본문 바로가기

분류 전체보기23

불변 클래스(Immutable Class) 객체 내부의 값의 불변성(immutability)을 보장하여, 내부 필드를 수정, 변경할 수 없는 클래스를 말한다. 불변 클래스의 장점과 단점 불변 객체는 단순하다. 생성된 시점부터 GC에 의해 파괴될 때 까지 객체의 값이나 상태가 변하지 않는다. 따라서 객체의 불변식(invariant)을 유지하기 위한 코드는 생성자를 제외하고, 그 외 메서드에서는 번거로운 불변식 체크가 필요없다. 불변 객체는 스레드 안전(Thread-safe)하다. 최초 생성 이후로 불변 객체 필드나 상태를 변경할 수 없으니, 멀티 쓰레드 프로그램 개발 중 발생하는 동시성 이슈(concurrency issue)에서 자유롭다. 이펙티브 자바의 저자 조슈아 블리크는 이 때문에 StringBuffer 클래스를 직접 사용하는 것을 '.. 2023. 5. 10.
불변식(Invariant) 어떤 객체가 정상적으로 작동하기 위해 절때 허무러지지 않아야 하는 값, 식, 상태의 일관성을 보장하기 위해 항상 참이 되는 조건(condition)을 말한다. 자동차를 표현 한 Car라는 객체에는 현재 보유한 연료의 양과 최대로 넣을 수 있는 연료의 양이 있다. class Car{ private static final int MAX_OIL_VALUE = 1000; protected int oilValue; Car(int oilValue){ this.oilValue = oilValue; } } 이때 oilValue의 값이 0 미만이 되거나, MAX_OIL_VALUE를 넘어서는 경우는 정상적인 자동차 객체의 상태(State)라고 할 수 없다. 이런 경우를 Car 객체(Object)의 불변식(Invariant.. 2023. 5. 10.
한정적 와일드카드(Bounded Wildcard Type) 한정적 와일드카드 도입 배경 매개변수화 타입은 불공변(invariant)이다. 서로 다른 타입 Type1 와 Type2가 있을 때 List 과 List는 그 누구의 상위 타입도, 하위 타입도 아니다. 따라서 List은 List의 하위 타입이 아니다. 왜 제네릭 문법은 이렇게 만들어 졌을까? 상위 모듈과 이를 확장한 하위 모듈이 있을 때 상위 모듈의 동작을 하위 모듈이 완전히 대체 할 수 있어야 한다. (SOLID, Liskov Subsitution Principle : 리스코프 치환 원칙) List 은 List 구조를 가진 자료구조의 원소로 문자열을 다루는 String 타입 객체만을 다룰 수 있다. List 는 List 구조를 가진 자료구조의 원소로 Object 타입 객체만을 다루는 일을 한다. 하지만 .. 2023. 5. 10.
왜 제네릭(Generic) 문법을 배워야 할까? 용어 정리 한글 용어 영문 용어 예시 매개변수화 타입 parameterized type List, Map 실제 타입 매개변수 actual type parameter String, Integer 제네릭 타입 generic type List, Map 정규 타입 매개변수 formal type parameter E, T, V, K 비한정적 와일드카드 타입 unbounded wildcard type List, Set 로 타입 raw type List, Map, Set 한정적 타입 매개변수 bounded type parameter , 재귀적 타입 한정 recirsove type bound , 한정적 와일드카드 타입 bounded wildcard type List 2023. 5. 10.