
자바 라이브러리에는 close 메서드를 호출하여 직접 닫아줘야 하는 자원이 많습니다. InputStream, OutputStream, java.sql.Connection 등이 예로 있습니다. 자원 닫기는 클라이언트가 놓치기 쉬워서 예측할 수 없는 성능 문제로 이어지기도 합니다. 이런 자원 중 상당수가 안전망으로 finalizer를 사용하고 있지만 finalizer는 그리 믿을만하지 못합니다.(아이템 8) 전통적으로 자원이 제대로 닫힘을 보장하는 수단으로 try-finally가 쓰였습니다. 예외가 발생하거나 메서드에서 반환되는 경우를 포함해서 말입니다. static String firstLineOfFile(String path) throws IOException { BufferReader br = new ..

자바는 두 가지 객체 소멸자를 제공합니다. 그 중 finalizer는 예측할 수 없고, 상황에 따라 위험할 수 있어 일반적으로 불필요합니다. 오동작, 낮은 성능, 이식성 문제의 원인이 되기도 합니다. finalizer는 나름의 쓰임새가 몇 가지 있긴 하지만 기본적으로 쓰지 말아야 합니다. 그래서 자바 9에서는 finalizer를 사용 자제(deprecated) API로 지정하고 cleaner를 그 대안으로 소개합니다. ⇒ 하지만 자바 라이브러리에서도 finalizer를 여전히 사용합니다. cleaner는 finalizer보다는 덜 위험하지만, 여전히 예측할 수 없고, 느리고, 일반적으로 불필요합니다. 자바에서는 접근할 수 없게 된 객체를 회수하는 역할을 가비지 컬렉터가 담당하고, 프로그래머에게는 아무런 ..

케이크에는 여러 종류가 있다. 크림 케이크, 딸기 케이크 등등 다양한 장식(데코레이터)에 따라 케이크의 명칭이 달라진다. 아무것도 장식(데코레이터)하지 않은 케이크를 스펀지 케이크라고 한다. 오브젝트(객체)에도 이런 케이크와 비슷한 경우가 있다. 중심이 되는 객체인 스펀지 케이크 이 스펀지 케이크에 장식이 되는 기능을 하나씩 추가하면 목적이 더욱 뚜렷한 객체가 된다. 데코레이터 패턴은 오브젝트에 장식(데코레이터)을 해 나가는 디자인 패턴이다. GitHub - kkoon9/Java-Design-Pattern: Java 언어로 배우는 디자인 패턴 입문 예제 코드 Java 언어로 배우는 디자인 패턴 입문 예제 코드. Contribute to kkoon9/Java-Design-Pattern development..

C, C++처럼 메모리를 직접 관리해야 하는 언어를 쓰다가 자바처럼 가비지 컬렉터를 갖춘 언어로 넘어오면 프로그래머의 삶이 훨씬 평안해집니다. 자바는 다 쓴 객체를 알아서 회수해줍니다. 그래서 자칫 메모리 관리에 더 이상 신경 쓰지 않아도 된다고 오해할 수 있는데, 절대 사실이 아닙니다. 스택을 간단히 구현한 다음 코드를 살펴봅시다. public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITAL_CAPACITY]; } public void push(..

디렉터리(폴더) 안에는 파일 또는 다른 디렉터리가 존재한다. 디렉터리와 파일은 서로 다르지만 ‘디렉터리 안에 넣을 수 있는 것'이라는 의미로 합쳐서 ‘디렉터리 엔트리’로 불린다. 컴포지트 패턴은 그릇(디렉터리)과 내용물(파일)을 동일시해서 재귀적인 구조를 만들기 위한 디자인 패턴이다. GitHub - kkoon9/Java-Design-Pattern: Java 언어로 배우는 디자인 패턴 입문 예제 코드 Java 언어로 배우는 디자인 패턴 입문 예제 코드. Contribute to kkoon9/Java-Design-Pattern development by creating an account on GitHub. github.com Composite 패턴의 등장인물 Leaf(나뭇잎)의 역할 - File Leaf..

전략 패턴에서는 알고리즘을 구현한 부분을 모두 교환할 수 있다. 전략 패턴은 알고리즘을 빈틈없이 교체해서 같은 문제를 다른 방법으로도 쉽게 해결할 수 있도록 도와주는 패턴이다. GitHub - kkoon9/Java-Design-Pattern: Java 언어로 배우는 디자인 패턴 입문 예제 코드 Java 언어로 배우는 디자인 패턴 입문 예제 코드. Contribute to kkoon9/Java-Design-Pattern development by creating an account on GitHub. github.com 전략 패턴의 등장인물 Strategy(전략)의 역할 - Strategy Strategy는 전략을 이용하기 위한 인터페이스(API)를 결정한다. ConcreteStrategy(구체적인 전략)..

똑같은 기능의 객체를 매번 생성하기보다는 객체 하나를 재사용하는 편이 나을 때가 많습니다. 재사용은 빠르고 세련됐습니다. 특히 불변 객체(아이템 17)는 언제든 재사용할 수 있습니다. 다음 코드는 하지 말아야 할 극단적인 예입니다. String s = new String("bikini"); // 따라 하지 맙시다! 이 문장은 실행될 때마다 String 인스턴스를 새로 만듭니다. 완전히 쓸데없는 행위입니다. 생성자에 넘겨진 "bikini" 자체가 이 생성자로 만들어내려는 String과 기능적으로 완전히 똑같습니다. 이 문장이 반복문이나 빈번히 호출되는 메서드 안에 있다면 쓸데없는 String 인스턴스가 수백만 개 만들어질 수도 있습니다. 다음은 개선된 버전의 코드입니다. String s = "bikini"..

많은 클래스가 하나 이상의 자원에 의존합니다. 가령 맞춤법 검사기는 사전에 의존하는데, 이런 클래스를 정적 유틸리티 클래스(아이템 4)로 구현한 모습을 드물지 않게 볼 수 있습니다. public class SpellChecker { private static final Lexicon dictionary = ..; private SpellChecker() {} // 객체 생성 방지 public boolean isValid(String word) { ... } public List suggestions(String typo) { ... } } 위 코드는 정적 유틸리티를 잘못 사용한 예입니다. 유연하지 않고 테스트하기 어렵다는 단점이 있습니다. public class SpellChecker { private ..
- Total
- Today
- Yesterday
- 객체지향
- Algorithm
- Effective Java
- AWS
- JPA
- 클린 아키텍처
- 프로그래머스
- Spring Boot
- 디자인패턴
- node.js
- 코테
- Kotlin
- 테라폼
- 백준
- Java
- BOJ
- BAEKJOON
- programmers
- 이펙티브 자바
- 디자인 패턴
- 이팩티브 자바
- 정규표현식
- 클린 코드
- MSA
- kotest
- Spring
- Olympiad
- 알고리즘
- C++
- kkoon9
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |