
아래의 내용은 오브젝트(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..

1. 체크 예외(Check Exception)와 언체크 예외/런타임 예외 (Uncheck Exception, Runtime Exception)의 차이 [ 예외(Exception)의 종류 ] 에러(Error) 예외(Exception) 체크 예외(Check Exception) 언체크 예외(Uncheck Exception) 에러(Error) java.lang.Error 클래스의 하위 클래스들이다. Error는 메모리가 부족하는 등과 같이 시스템이 비정상적인 상황인 경우에 사용한다. 주로 JVM에서 발생시키기 때문에 애플리케이션 코드에서 잡아서는 안되며, 잡아서 대응할 수 있는 방법도 없다. 따라서 시스템 레벨에서 특별한 작업을 하는게 아니라면 이러한 에러 처리는 하지 않아도 된다. 예외(Exception) j..

이번에는 순수 Java 기반의 애플리케이션에 대해 테스트 코드를 작성해보고자 합니다. 1. Java 단위 테스트(Unit Test) 작성 준비[ 필요한 라이브러리 ]요즘 Java 단위테스트 작성에는 크게 2가지 라이브러리가 사용된다.JUnit5: 자바 단위 테스트를 위한 테스팅 프레임워크AssertJ: 자바 테스트를 돕기 위해 다양한 문법을 지원하는 라이브러리JUnit 만으로도 단위 테스트를 충분히 작성할 수 있다. 하지만 JUnit에서 제공하는 assertEquals()와 같은 메소드는 AssertJ가 주는 메소드에 비해 가독성이 떨어진다. 그렇기 때문에 순수 Java 애플리케이션에서 단위 테스트를 위해 JUnit5와 AssertJ 조합이 많이 사용된다. [ given/when/then 패턴 ]요즘 ..