![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/kTF7c/btrzMJpf3h4/JnYuxbNN2co9w0ICoIpw61/img.jpg)
이따금 배열이나 리스트에서 원소를 꺼낼 때 ordinal 메서드(아이템 35)로 인덱스를 얻는 코드가 있습니다. 식물을 간단히 나타낸 다음 클래스를 예로 살펴봅시다. class Plant { enum LifeCycle { ANNUAL, PERENNIAL, BIENNIAL } final String name; final LifeCycle lifeCycle; Plant(String name, LifeCycle lifeCycle) { this.name = name; this.lifeCycle = lifeCycle; } @Oveeride public String toString() { return name; } } 이제 정원에 심은 식물들을 배열 하나로 관리하고, 이들을 생애주기별로 묶어봅시다. 생애주기별로 총..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/pZ0k3/btrzKQo7ZNn/LmAYimeOv1fpQU0zsezCBK/img.jpg)
대부분의 열거 타입 상수는 자연스럽게 하나의 정숫값에 대응됩니다. 그리고 모든 열거 타입은 해당 상수가 그 열거 타입에서 몇 번째 위치인지를 반환하는 ordinal이라는 메서드를 제공합니다. 이런 이유로 열거 타입 상수와 연결된 정숫값이 필요하면 ordinal 메서드를 이용하고 싶은 욕구에 빠집니다. 다음 코드는 합주단의 종류를 연주자가 1명인 솔로부터 10명까지 정의한 열거 타입입니다. public enum Ensemble { SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTET, NONET, DECTET; public int numberOfMusicians() { return oridnal() + 1; } } 동작은 하지만 유지보수하기가 끔찍한 코드입..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/ey3f0Q/btrzKbAwBzz/046aQjxPr6jczZwceJVOP0/img.jpg)
열거 타입은 일정 개수의 상수 값을 정의한 다음, 그 외의 값은 허용하지 않는 타입입니다. 사계절, 태양계의 행성, 카드게임의 카드 종류 등을 생각하시면 이해가 빠르실 겁니다. 정수 열거 패턴 기법 (옛날 방식) 자바에서 열거 타입을 지원하기 전에는 다음 코드처럼 정수 상수를 한 묶음 선언해서 사용했었습니다. // 상당히 취약한 정수 열거 패턴 public static final int APPLE_FUJI = 0; public static final int APPLE_PIPPIN = 1; public static final int APPLE_GRANNY_SMITH = 2; public static final int ORANGE_NAVEL = 0; public static final int ORANGE_T..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/PMTvD/btrzIn8KSua/9y58ZtlByJLDkSMay5DUCk/img.jpg)
클래스가 일을 실행할 때에는 자신의 클래스나 다른 클래스의 메서드를 호출한다. 메서드를 호출한 결과는 객체의 상태에 반영되지만, 일의 이력은 어디에도 남지 않는다. 이 때 ‘이 일을 실행하시오' 라는 ‘명령'을 표현하는 클래스가 있으면 편리하다. 실행하고 싶은 일을 ‘메서드를 호출'하는 동적인 처리로 표현하는 것이 아닌, 명령을 나타내는 클래스의 인스턴스로 하나의 ‘물건'처럼 표현할 수 있기 때문이다. 이력을 관리하고 싶을 때에는 그 인스턴스의 집합을 관리하면 된다. 명령의 집합을 저장해 두면 같은 명령을 재실행할 수도 있고, 복수의 명령을 모아 새로운 명령으로 재이용할 수도 있다. Command는 Event(사건)라고도 부른다. ‘이벤트 구동 프로그래밍'에서 사용되는 ‘이벤트'와 같은 의미다. 마우스를..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/dbU0oX/btrzKsIExCb/6Wg4Tz27FAy3EqemhAyfW0/img.jpg)
‘대리인'이란 의미로, 일을 해야 할 본인을 대신(대리)하는 사람을 뜻한다. 본인이 아니라도 가능한 일을 맡기기 위해서 대리인을 세운다. 대리인은 어디까지나 대리에 지나지 않기 때문에 할 수 있는 일에는 한계가 있다. 대리인이 할 수 있는 범위를 넘는 일이 발생하면, 대리인은 본인한테 와서 상담을 한다. 객체지향에서는 ‘본인', ‘대리인' 모두 객체가 된다. 즉, 바빠서 일을 할 수 없는 본인 객체 대신에 대리인 객체가 어느 정도 일을 처리하게 된다. 다음 링크는 프록시 패턴의 예제 코드다. GitHub - kkoon9/Java-Design-Pattern: Java 언어로 배우는 디자인 패턴 입문 예제 코드 Java 언어로 배우는 디자인 패턴 입문 예제 코드. Contribute to kkoon9/Jav..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/K3AWO/btrzKsBMtRY/CYIqkpBStLCQbopK5Z1Pkk/img.jpg)
‘플라이급'이란 의미로, 권투에서 가장 체중이 가벼운 체급을 나타낸다. 이 디자인 패턴은 객체를 ‘가볍게' 하기 위한 것이다. 여기서 말하는 무게는 ‘메모리의 사용량'을 의미한다. 많은 메모리를 사용하는 객체를 ‘무겁다'고 표현한다. Java에서는 new Something() 처럼, Something 클래스의 인스턴스를 만들 수 있다. 이 때, 그 인스턴스를 저장하기 위해서 메모리가 확보된다. Something 클래스의 인스턴스가 많이 필요할 때에, new를 많이 하면 메모리의 사용량이 커지게 된다. 플라이웨이트 패턴에서 사용하는 기법을 간단하게 표현하면 다음과 같다. 🐻 인스턴스를 가능한 대로 공유시켜서 쓸데없이 new하지 않도록 한다. 인스턴스가 필요할 때 항상 new하는 것이 아니라, 이미 만들어져..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/yx3yv/btrzHOcRu9G/CenY3Yw0eswSOF03wklF7k/img.jpg)
객체 지향 프로그래밍에서는 프로그램 할 대상을 ‘클래스’로 표현한다. 당연하게도 어떤 것을 클래스로 표현할지는 설계자가 생각해야 한다. 클래스에 대응하는 구체적인 ‘사물'이 현실에서 존재할수도 존재하지 않을수도 있다. 경우에 따라서는 ‘이런 것이 클래스가 될 수 있나?’라고 놀랄 정도의 것을 클래스로 하는 경우도 있다. 현실세계에서 우리는 다양한 사물의 ‘상태'에 대해서 생각한다. 그러나 상태를 ‘사물’로 생각할 일이 없기 때문에, 상태를 클래스로 표현한다는 것도 쉽게 이해가 안 될 수 있다. 이번 포스팅에서는 ‘상태'를 클래스로 표현하는 방법에 대해 다룬다. 상태를 클래스로 표현하면 클래스를 교체해서 ‘상태의 변화'를 표현할 수 있고, 새로운 상태를 추가해야 될 때 무엇을 프로그램하면 좋을지 분명해진다..
- Total
- Today
- Yesterday
- 디자인 패턴
- BOJ
- kkoon9
- kotest
- 정규표현식
- 이펙티브 자바
- Algorithm
- Effective Java
- 프로그래머스
- node.js
- 코테
- Kotlin
- 디자인패턴
- 클린 코드
- 클린 아키텍처
- MSA
- 백준
- 테라폼
- JPA
- Spring Boot
- Spring
- 이팩티브 자바
- programmers
- C++
- Olympiad
- 알고리즘
- BAEKJOON
- 객체지향
- AWS
- Java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |