이번에는 오랜만에 자바 문법을 살펴보고자 합니다. Java7부터는 기존의 try-catch를 개선한 try-with-resources가 도입되었는데, 왜 try-catch가 아닌 try-with-resources를 사용해야 하는지, 어떻게 사용하는지 알아보도록 하겠습니다. 1. try-with-resources란? try-with-resources 사용법 예시 [ try-with-resources란? try-with-resources 사용법 예시 ] try-with-resources를 살펴보기 전에 try-catch-finally로 자원을 반납하는 경우를 먼저 살펴보도록 하자. 두 가지를 모두 보고 비교함으로써 왜 try-with-resources를 사용해야 하는지 더욱 납득할 수 있을 것이다. Java..
앞선 포스팅에서는 Optional의 개념과 문법을 살펴보았습니다. Optional은 Null이 될 수 있는 객체를 감싸는 Wrapper 클래스이기 때문에 비용이 발생합니다. 그래서 Optional은 필요한 경우에만 사용하는 것이 합리적인데, 언제 사용하면 좋을지 살펴보도록 하겠습니다. 1. 언제 Optional을 사용해야 하는가? [ Optional이 만들어진 이유와 의도 ] Java8부터 Null이나 Null이 아닌 값을 저장하는 컨테이너 클래스인 Optional이 추가되었다. Java 언어의 아키텍트(설계자)인 Brian Goetz는 Optional에 대해 다음과 같이 정의하였다. Optional is intended to provide a limited mechanism for library met..
아래의 내용은 오브젝트(Object)를 읽으면서 정리한 내용입니다. Java에 한정되는 이야기이므로 다른 언어에는 적용되지 않을 수 있습니다. 1. 상속을 이용한 다형성과 메소드 오버라이딩/ 메소드 오버로딩 [ Self 참조(Self Reference) ] Java에서 객체가 메세지를 수신하면 컴파일러는 self 참조(Self Reference)를 임시로 자동 생성하여 메세지를 수신한 객체를 가리키도록 설정하고 상속 계층의 역방향으로 동적 메소드 탐색을 진행하는데, 이 과정을 순서대로 정리하면 다음과 같다. 컴파일러가 메세지를 수신한 객체를 가리키는 self 참조를 임시로 생성한다. 클래스에서 메세지를 처리할 메소드를 탐색한다. 메세지를 처리할 수 없으면 부모 계층으로 넘어가 메소드 탐색을 진행한다. 3..
필요한 데이터를 저장하기 위해 Map를 사용하는 개발자들이 있습니다. 하지만 Map을 사용하면 너무 많은 단점들을 안게 되는 것 같아서, 왜 Map이 아닌 DTO 클래스를 사용해야 하는지에 대해 정리해보고자 합니다. 1. Map보다 DTO 클래스를 사용해야 하는 이유 [ Map을 사용할 때의 단점 ] 컴파일 에러를 유발할 수 없음 String 텍스트를 Key로 사용함 가독성이 떨어짐 타입캐스팅 비용이 발생함 불변성을 확보할 수 없음 1. 컴파일 에러를 유발할 수 없음 Map의 Value는 Object 타입이다. 그리고 Object 클래스는 최상위 클래스이기 때문에 어떠한 데이터도 받아드릴 수 있다. Object를 사용할 때의 문제는 어떠한 데이터도 받아드릴 수 있기 때문에 타입 체크를 할 수 없다는 것 ..
객체를 생성하기 위해서는 생성자 패턴, 정적 메소드 패턴, 수정자 패턴, 빌더 패턴 등을 사용할 수 있습니다. 개인적으로 객체를 생성할 때에는 반드시 빌더 패턴을 사용해야 한다고 생각하는데, 왜 빌더 패턴을 사용해야 하는지에 대해 포스팅해보고자 합니다. 1. 빌더 패턴(Builder Pattern)을 사용해야 하는 이유 생성자와 수정자로 구현된 다음과 같은 User 클래스를 바탕으로 왜 생성자나 수정자보다 빌더를 써야하는지 이해해보도록 하자. @NoArgsConstructor @AllArgsConstructor public class User { private String name; private int age; private int height; private int iq; } [ 빌더 패턴(Build..