본문 바로가기
728x90

Programming/Java49

[자바/Java] Synchronized Synchronized synchronized는 '동기화'를 의미한다. 자바에서 말하는 동기화란 무엇일까? 프로그램은 대부분 멀티 쓰레드를 사용하여 성능을 이끌어낸다. 여러 개의 쓰레드가 동시에 여러 작업들을 진행해주므로 단일 쓰레드에 비해 작업 효율면에서 큰 이점을 가지기 때문이다. 이러한 멀티 쓰레드 환경에서 주의할 점은 여러 쓰레드가 한 자원을 사용하는 경우에도 해당 자원의 안정성과 신뢰성을 보장해주어야 한다는 것이다. 그렇기 때문에 특정 쓰레드가 자원을 사용하고 있는 경우에, 다른 쓰레드가 해당 자원에 접근하지 못하도록 막는 것이 필요하다. 이 때 사용되는 것이 바로 synchronized, 동기화인것이다. 즉, 하나의 자원을 사용하기 위해 여러 쓰레드들을 조화시켜 충돌하지 않도록 하는 것이다. .. 2023. 11. 16.
[자바/Java] File 클래스 File 클래스 자바에서 파일 또는 디렉토리에 대한 파일 객체를 생성하여 다양한 메소드를 사용할 수 있게 해주는 클래스이다. 파일의 해당 경로, 절대 경로 등 여러 편리한 메소드를 제공하고 있다. File 클래스 생성자 File 클래스는 파일, 디렉토리에 대한 객체를 생성하기 때문에 생성한 객체가 파일 일 수도 있고 디렉토리 일 수도 있다. File 클래스 메소드 일반 메소드 File 객체의 상대 경로, 절대 경로 등을 제공하는 메소드이다. File 생성/수정/삭제 메소드 파일이나 디렉토리 등을 생성, 수정, 삭제하는 메소드도 제공하고 있다. File 체크 메소드 파일인지 디렉토리인지, 파일이 존재하는 지 등을 체코하는 메소드이다. File 권한 메소드 파일의 권한을 설정, 변경할 수 있는 메소드이다. .. 2023. 10. 18.
[자바/Java] 시스템 속성(property) 시스템 속성 시스템 속성(property)는 JVM(Java Virtual Machine)이 동작할 때 자동으로 설정되는 시스템 값이다. 키(Key)와 값(Value)로 구성되어 있으며 운영체제에서 사용되는 파일 경로, 구분자, 운영 체제의 종류 및 자바 프로그램을 실행시킨 사용자 아이디, JVM 버전 등이 여기에 해당한다. 이런 시스템 속성은 애플리케이션에서 사용이 되는데, getProperty(key), setProperty(key, value)를 통해서 사용할 수 있다. 또한 setProperty의 경우 런타임에서 조작이 가능하기 때문에, 계정 정보와 같이 보안에 민감한 내용은 코드에 직접 작성되기 보다는 서비스나 운영체제 값은 런타임 환경의 시스템 '속성'에 저장할 수 있다. 이후, 코드에서는 g.. 2023. 10. 18.
[자바/Java] 파일 I/O - PrintWriter + 인코딩 설정 PrintWriter 파일 입출력에서, 파일에 데이터를 쓸 때, System의 print관련 메서드를 사용하는 것처럼 파일에 쓸 수 있도록 편리한 기능을 제공하는 클래스(extends Writer)이다. PrintWriter 클래스는 Writer 클래스를 상속 받은 클래스로, 메소드로는 위에서 언급했던 System의 print 관련 메소드처럼 작동하는 메소드를 지원하고 있다. import java.io.PrintWriter; public class Main { public static void main(String[] args){ //System.out -> console창에 출력 PrintWriter pw = new PrintWriter(System.out); String str1 = "Hello"; .. 2023. 10. 18.
[자바/Java] 파일 I/O - Object입출력 https://codingralro.tistory.com/entry/%EC%9E%90%EB%B0%94Java-%ED%8C%8C%EC%9D%BC-IO-%EA%B8%B0%EB%B3%B8 [자바/Java] 파일 I/O 파일 입출력(I/O) 키보드에서 값을 입력(Scanner) 받고, 콘솔 창에 값을 출력(System.out.println)하는 과정은 익숙하다. 그렇다면 파일에서 값을 읽어오고(입력) 저장(출력)하려면 어떻게 해야 할까? 파일 codingralro.tistory.com Object 입출력 파일 입출력을 공부하면서, 바이트, 캐릭터 타입의 데이터 입출력, 기본 타입의 데이터 입출력을 배웠다. 이번 글에서는 객체를 파일에 읽고 쓸 수 있는 Object 입출력에 대해서 다루겠다. 객체는, 클래스로의 .. 2023. 10. 18.
[자바/Java] 파일 I/O - Data 입출력 https://codingralro.tistory.com/entry/%EC%9E%90%EB%B0%94Java-%ED%8C%8C%EC%9D%BC-IO-%EA%B8%B0%EB%B3%B8 [자바/Java] 파일 I/O 파일 입출력(I/O) 키보드에서 값을 입력(Scanner) 받고, 콘솔 창에 값을 출력(System.out.println)하는 과정은 익숙하다. 그렇다면 파일에서 값을 읽어오고(입력) 저장(출력)하려면 어떻게 해야 할까? 파일 codingralro.tistory.com Data 입출력 이전에 배웠던 File I/O(위의 링크 참조)는 직접적으로 파일에 스트림을 연결하여 읽고 쓰는 클래스에 대해 다룬다. 이러한 클래스들은 바이트 기반, 문자 기반 스트림으로 문자 또는 바이트 형식으로만 읽고 쓰는것.. 2023. 10. 18.
[자바/Java] 파일 I/O - File 입출력 파일 입출력(I/O) 키보드에서 값을 입력(Scanner) 받고, 콘솔 창에 값을 출력(System.out.println)하는 과정은 익숙하다. 그렇다면 파일에서 값을 읽어오고(입력) 저장(출력)하려면 어떻게 해야 할까? 파일 입출력, Scanner 등은 모두 입출력이라는 범위 안에 존재하고 자바에서는 입출력을 수행하기 위해 스트림이라는 개념을 사용한다. 스트림(Stream)이란, 두 노드(키보드, 모니터, 메모리, 파일 등) 사이를 연결하는 데이터가 지나가는 통로이다. 스트림은 단방향 통신만이 가능하기 때문에 하나의 스트림으로 입출력을 같이 처리할 수 없다. 그렇기 때문에 입력 스트림, 출력 스트림 두 개의 스트림이 반드시 필요하다. 또한 스트림은 처리하는 데이터의 타입에 따라 아래와 같이 나뉜다. 이.. 2023. 10. 18.
[자바/Java] 쓰레드 Thread Thread란 쓰레드는 프로세스안에서 독립적으로 작업을 실행하는 단위를 말한다. 프로세스란, 일반적으로 CPU에 의해 메모리에 올려져 실행중인 프로그램을 말하며, 자신만의 메모리 공간을 포함한 독립적인 실행환경을 가지고 있다. 자바 JVM(Java Virtual Machin)은 주로 하나의 프로세스로 실행되며, 동시에 여러 작업을 수행하기 위해 멀티 쓰레드를 지원하고 있다. 멀티 쓰레드란 무엇일까? 쓰레드는 프로세스안에서 작업 실행 단위라고 하였는데, JVM에 의해 관리되고, 한 프로세스에는 적어도 하나 이상의 쓰레드가 있고, Main 쓰레드를 시작으로 추가적으로 작업 실행 단위를 늘려 갈 수 있다. 그렇게 되면 하나의 프로세스에서 실행되는 여러 작업들을 여러 개의 실행 단위, 즉 쓰레드들이 나눠서 처리.. 2023. 10. 17.
[자바/Java] 스트림 Stream - 심화 스트림 Stream 심화 이전까지는 스트림의 생성 - 중간 연산 -최종 연산으로 이어지는 기본 개념 및 사용방법에 대해서 다루었다. 이번 글에서는 더 나아가 스트림의 동작 순서, 성능 향상 등 더 깊은 내용에 대해 다루겠다. 동작 순서 성능 향상 스트림 재사용 지연 처리 Null-safe 스트림 생성 줄여쓰기 동작순서 스트림은 데이터의 흐름이다. 이때에 데이터의 흐름이 생성과 중간 연산, 최종 연산을 거쳐 흐르게 되는데, 구체적으로 어떻게 흐르는지에 대한 관찰이 필요하다. 다음 예제에서, 출력 결과는 어떻게 될까? List list = Arrays.asList("Eric", "Elena", "Era"); list.stream() .filter(el -> { System.out.println("filter.. 2023. 10. 15.
[자바/Java] 스트림 Stream - 최종 연산 https://codingralro.tistory.com/entry/%EC%9E%90%EB%B0%94Java-%EC%8A%A4%ED%8A%B8%EB%A6%BC-Stream-%EC%A4%91%EA%B0%84-%EC%97%B0%EC%82%B0 [자바/Java] 스트림 Stream - 중간 연산 https://codingralro.tistory.com/entry/%EC%9E%90%EB%B0%94Java-%EC%8A%A4%ED%8A%B8%EB%A6%BC-Stream-%EC%83%9D%EC%84%B1 [자바/Java] 스트림 Stream - 생성 스트림 (Stream) 이란 자바8에서 등장한 스트림은 람다를 활용할 수 있는 개념 codingralro.tistory.com 저번 글에서는 중간 연산에 대해 공부하였다.. 2023. 10. 15.
[자바/Java] 스트림 Stream - 중간 연산 https://codingralro.tistory.com/entry/%EC%9E%90%EB%B0%94Java-%EC%8A%A4%ED%8A%B8%EB%A6%BC-Stream-%EC%83%9D%EC%84%B1 [자바/Java] 스트림 Stream - 생성 스트림 (Stream) 이란 자바8에서 등장한 스트림은 람다를 활용할 수 있는 개념 중 하나이다. 스트림은 '집합 자료의 연산'을 위해 사용하는 객체로서 스트림이 등장하기 이전에는 배열 또는 컬렉션 codingralro.tistory.com 저번 글에서는 자바에서 스트림 객체를 생성하는 법에 대해서 다루었다. 이번 글에서는 생성한 스트림 객체를 어떻게 가공하는지에 대한 과정을 공부해보겠다. 중간 연산 - Stream 가공하기 스트림은 데이터의 흐름이다. 코.. 2023. 10. 15.
[자바/Java] 스트림 Stream - 생성 스트림 (Stream) 이란 자바8에서 등장한 스트림은 람다를 활용할 수 있는 개념 중 하나이다. 스트림은 '집합 자료의 연산'을 위해 사용하는 객체로서 스트림이 등장하기 이전에는 배열 또는 컬렉션 객체를 다루기 위해서 for 또는 forEach문을 돌면서 요소 하나씩을 꺼내서 다루었다. 간단한 경우라면, 이러한 방식은 크게 문제가 되지 않지만 로직이 복잡해질 수록 코드의 양이 많아지고 복잡해져 로직이 섞이게 되고, 메소드를 나눌 경우 루프를 여러번 도는 경우가 발생한다. 이러한 문제를 해결하고자 등장한 개념이 바로 스트림인 것이다. 스트림을 더 잘 이해하기 위해서는 단순히 집합 자료의 연산을 해주는 객체라는 것, 이전에 스트림이 데이터의 흐름이라는 것을 인지해야 한다. 스트림(Stream) = 데이터의.. 2023. 10. 15.
728x90
반응형