본문 바로가기

java

(25)
ThreadLocal ThreadLocal 자바 ThreadLocal 클래스를 사용하면 동일한 스레드에서 읽고 쓰는것이 가능하다. 따라서 두개의 스레드가 동일한 코드를 실행 하고 코드에 동일한 ThreadLocal 참가 있어도 두 스레드는 서로 ThreadLocal변수를 볼 수 없다.따라서 자바 ThreadLocal 클래스는 간단하게 스레드 세이프를 구현할 수 있다. Creating a ThreadLocal ThreadLocal은 다음과 같이 생성할 수 있다. private ThreadLocal threadLocal = new ThreadLocal(); 각 스레드당 한번만 수행 한다. 여러 스레드에서 get 과 set을 통해 값을 변경 또는 가져올 수 있으며 변경된 값은 무조건 그 스레드에서만 사용 가능하다. Set Thre..
생성자 레퍼런스를 사용하면서 몰랐던 사실. ILLEGAL_ARGUMENT(IllegalArgumentException::new), NULL_POINT_EXCEPTION(e -> NullPointException()); Function supplier; RuntimeExceptions(Function supplier) { this.supplier = supplier; } 위 코드에서 NullPointExcetion의 람다와 IllegalArgumentException의 생성자레퍼런스는 동일한줄 알았지만 다른점이 있다. 다음 코드에서 Function의 String을 Integer로 바꾸면 생성자 레퍼런스로 사용한 표현식을 컴파일 에러가 난다. 왜그럴까? ILLEGAL_ARGUMENT(IllegalArgumentException::new), NULL_..
전략 패턴 전략 패턴은 변하는 행위를 클래스로 캡슐화 하여 동적으로 자유롭게 변경 가능하도록 도와주는 패턴 이다.쉽게 말하면 기능이 추가나 수정이 되었을때 그 기능을 사용하는 클래스를 변경하지 않고 클래스로 캡슐화 하여 개방폐쇄원칙을 아주 잘 지키고 있는 패턴이다. 그러면 축구 프리킥 예제를 가지고 패턴 설명을 하겠다. Kick클래스는 프리킥을 차기 위해 여러가지 종류의 킥을 받아서 프리킥을 찬다.public class Kick { private FreeKick freeKick; public void setFreeKick(FreeKick freeKick) { this.freeKick = freeKick; } public void freekick() { System.out.println(freeKick.kick())..
옵저버 패턴 옵저버 패턴 요즘 부쩍 말을 안듣는 두 아들들을 위해 아버지는 옵저버를 고용해 옵저버를 통해서 미션을 전달하여 수행 하도록 합니다. 클래스 다이어 그램입니다. OnesParents : 부모 인터페이스이며 아이들을 감시하기 위해 옵저버를 고용합니다. 옵저버가 관리하는 아이들 등록 및 삭제 인터페이스를 제공하며 아버지의 미션을 아이들에게 알리는 인터페이스를 제공 합니다. Father : 아버지는 부모 인터페이스를 구현하여 옵저버에게 미션을 전달 합니다. ParentsObserver : 부모가 아이들에게 미션을 줄 때 필요한 미션을 받아서 아이들에게 알려줄수 있는 인터페이스를 제공합니다. SeungJae : 승재는 아버지가 고용한 옵저버에게 미션을 받아 수행합니다. SeungHyun : 승현이는 아버지가 고용..
객체의 가시성 수정자는 어떻게 작동하는가? - 가시성 수정자(visibility modifier) 는 클래스의 캡슐화된 상태와 인스턴스 행동을 조정하는 메서드의 접근을 제어하는 역할. - 가시성 수정자 범위 Least private 같은 클래스의 모든 인스턴스 접근가능하위 클래스 접근 불가능 같은 패키지의 모든 클래스에서 접근 가능 protected 모든 하위 클래스에서 접근 가능 Most public어디서든 접근가능 - pirvate의 일반적이 ㄴ오해는 private으로 선언한 변수는 해당 인스턴스에만 접근할 수 있다고 생각하는 것. - 실제로 같은 타입의 다른 모든 인스턴스가 private 멤버 변수에 접근할 수 있다. - 책 8-7 코드는 같은 타입이지만 다른 인스턴스에서 private 멤버 변수에 접근하는 두 가지 경우를 보여주는 예다.
final 키워드는 객체 참조에 어떤 영향을 미치는가? - 객체의 선언하는 final 키워드는 원시 타입에 선언하는 final 키워드와 동일한 역할을 한다. - 변수 정의에서 지정된 값처럼 일단 할당이 되고 나면 메모리 위치가 변경되지 않는다. - 객체 참조는 변경할 수 없어도 객체 내부의 값들은 개별 값들은 개별 값들이 final 이 아니라면 변경 가능하다. @Test public void finalReferenceChanges() { final int i = 42; //i= 43; 주석 해제시 컴파일 에러 final List list = new ArrayList(20); //list = new ArrayList(50); 주석 해제 시 컴파일 에러 assertEquals(0, list.size()); list.add("adding a new value in..
자바에서 객체란 무엇인가? - 객체는 변수들의 컬렉션으로 정의할 수 있다. - 객체에는 상태와 행위가 있다고 생각하면 이해하기 쉽다. - 원시 타입을 제외하면 자바 언어의 다른 모든 변수들은 참조 타입 이다. 원시 타입과 다른점은 빈 객체를 의미하는 null 이 존재한다는 것이다. 참조 타입의 의미 - 원시 타입은 int i = 42 변수가 선언되었을때 42라는 값이 메모리에 할당 되고 int j = i라는 형식으로 i에의해 표현되는 값이 할당되었을 때 메모리의 다른 위치에 같은 값을 할당한다. - 할당되고 나면 i는 j 값에 영향을 미칠 수 없다. - 자바에서 new ArrayList(20) 같은 구문은 데이터를 저장하는데 필요한 영역을 메모리에 요구 - List myList = new ArrayList(20) 구문으로 생성된 ..
왜 Integer.MIN_VALUES에 대응하는 양수가 없는가? - short, int, long 타입의 2진수 값 저장소는 메모리에서 2의 보수 값을 사용한다. - 2의 보수 표현에서 양수에 대응하는 음수는 2진수 기반의 NOT 비트 연산을 적용한다. - 2의 보수 표현을 사용하는 주된 이유는 0은 하나의 값만 존재, 즉 양수나 음수의 개념이 없다. 일부 음수의 2진수 표현10진수 표현 2진수 표현 -1 1111 1111 -2 1111 1110 .... -12710000 0001 -128 10000 0000 - 저장할 수 있는 가장 작은 음수의 최상위 비트가 1이고 나머지는 0이다. - 이 값을 음수화 하려면 나머지 비트를 뒤집으면 (0111 1111) 되고 원래 값으로 돌리려면 하나(1000 0000)를 더하면 된다. - 이런 경우 해당하는 양수는 존재하지 않는다..