본문 바로가기

전체 글

(94)
자바(Java)의 정석 - 쓰레드의 동기화 #128 쓰레드의 동기화(synchronization) 멀티 쓰레드 프로세스에서는 다른 쓰레드의 작업에 영향을 미칠 수 있다. 진행중인 작업이 다른 쓰레드에게 간섭받지 않게 하려면 '동기화'가 필요 쓰레드의 동기화 - 한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 못하게 막는 것. 동기화하려면 간섭받지 않아야 하는 문장들을 '임계 영역'으로 설정 임계영역은 락(lock)을 얻은 단 하나의 쓰레드만 출입가능(객체 1개에 락 1개) synchronized를 이용한 동기화 synchronized로 임계영역(lock이 걸리는 영역)을 설정하는 방법 2가지 synchronized 키워드는 반환 타입 앞에 사용한다. 첫 번째로 메서드에 사용하면 메서드 내용 전체가 임계 영역이 된다. 하지만 임계 영역은 최소화해서 사용..
자바(Java)의 정석 - 애너테이션 #115 애너테이션이란? 주석처럼 프로그래밍 언어에 영향을 미치지 않으며, 유용한 정보를 제공하는 것이다. 옛날에는 소스코드를 변경하면 그에 따른 문서를 변경해야 했다. 하지만 소스코드 업데이트와 문서에 작성되어 있는 소스버전이 불일치하는 경우가 많았다. 따라서 이를 합치자는 의견이 나왔다. 그래서 javadoc.exe라는 프로그램이 자바 소스코드에 있는 주석 doc을 읽어내는 방식을 구현해서 이 둘이 합쳐지게 되었다. 도한 옛날에는 설정파일을 xml로 많이 작성하였다. 그런데 위와 똑같은 문제가 자꾸 발생하자 xml 설정에 대한 정보도 하나의 자바 소스 코드로 합치자는 의견이 나왔고, 이를 구현한 것이 애너테이션이다. 애너테이션은 소스코드로 정보를 제공한다. 애너테이션의 특징은 여러 사람이 공유를 해야한다는 것..
Java 핵심 개념 1문 3답 - 익명 클래스(Anonymous class) Q. 익명 클래스가 무엇인가요? A1. 익명 클래스는 이름이 없는 일회용 클래스입니다. 정의와 생성을 동시에 해서 필요한 경우에 사용을 해줍니다. A2. 익명 클래스는 일회용 클래스입니다. 하지만 객체지향 프로그래밍에서 익명 클래스가 필요한 경우는 그렇게 많지 않습니다. 하지만 JDK 1.8부터 람다식이 도입이 되면서 자바는 함수형 프로그래밍이 도입되었습니다. 람다식은 기본적으로 익명 함수로 알려져있지만, 자바에서는 모든 것이 객체입니다. 따라서 람다식도 사실 익명 객체로 구성이 되어있습니다. 익명 객체가 의미하는 것은 람다식을 매개변수, 반환값으로 사용할 수 있는 객체라는 사실입니다. 그렇기에 매개변수로 람다식을 받기 위해서는 참조값을 정의해줘야 하는데, 어떤 익명 객체가 생성될지 모릅니다. 하지만 매..