springboot를 통해 개발하다보면 abstract와 interface 어떤 차이점이 있기에 따로 사용하게 될까요? 추상 클래스와 인터페이스의 특징 각각에 대한 특징을 한번 알아보겠습니다. 추상 클래스 인터페이스 사용 키워드 abstract interface 사용 가능 변수 제한 없음 static final(상수) 가능한 접근 제어자 제한없음 public 상속 키워드 extends implements 다중 상속 여부 불가능 가능 조금 더 각각에 대해 알아보겠습니다. 추상 클래스 추상클래스는 하위 클래스의 공통점만을 모아서 만든 추상화하여 만든 클래스를 의미합니다. 또한 다중 상속이 불가능하여 단일 상속만 허용합니다. 추상 클래스는 추상 메소드 외에 일반 클래스처럼 일반적인 필드, 메서드, 생성자를 가..
기술 스텍
정의 리플렉션이란 런타임 단계에서 클래스의 정보를 분석해내는 자바 API로 클래스의 메서드, 타입, 필드, 어노테이션 등의 정보를 접근 또는 수정을 할수 있습니다. 즉, 클래스의 정보를 통해 '거울에 비친 상'과 같이 똑같은 형태를 만들고 이를 통해 메서드, 타입, 필드, 어노테이션과 같은 자원에 접근하거나 수정할 수 있는 자바 API를 의미합니다. Reflection이 왜 필요할까? Java는 동적으로 객체를 생성해주는 기술이 없습니다. 따라서 JVM의 메모리 영역에 있는 데이터를 런타임에 가져와서 사용하게 해줄 존재가 필요합니다. 특히, 다이나믹 프록시, 프레임워크, 라이브러리 등에서 들어오는 클래스의 정보를 모르기 때문에 이러한 정보를 아는 것을 목적으로 사용하게 됩니다. 사용 예 예를 통해서 리플..
Composition이란? 기존 클래스를 상속을 통한 확장 대신, 필드로 클래스의 인스턴스를 참조하게 만드는 설계입니다. 가령, Service나 Repository를 인터페이스로 구축하고 해당 내용을 사용하기 위해 인스턴스로 받아와서 참조해 사용할 때 Composition을 쓰고 있는 것입니다. 상속과 합성의 차이점 상속 부모 클래스와 자식 클래스의 의존성을 컴파일 타임에 해결합니다. Is-A 관계로 한 개의 부모 클래스에 한 개의 자식 클래스를 가집니다. 부모 클래스의 구현에 의존 결합도가 높습니다. 클래스 사이의 정적인 관계로 융통성 있게 사용하기 어렵습니다. 부모 클래스 안에 구현된 코드 자체를 물려 받아 재사용하기에 예기치 못한 에러가 발생할 우려가 있습니다. 합성 두 객체 사이의 의존성을 런타임..
String String 클래스는 String Constant Pool에 저장되고, 불변객체로 변경되지 않는 특징을 가지고 있습니다. 이렇게 사용하면, 문자열을 Constant화 하여 다른 변수 혹은 객체들과 공유하게 되는데 이 과정에서 데이터 캐싱이 일어나고 그 만큼 성능적 이득을 취할 수 있기 때문입니다. 두번째는 데이터가 불변(immutable) 하다면 Multi-Thread 환경에서 동기화 문제가 발생하지 않기 때문에 더욱 안전한 결과를 낼 수 있기 때문입니다. 세번째는 보안(Security) 측면으로, 데이터베이스 사용자 이름, 암호는 데이터베이스 연결을 수신하기 위해 문자열로 전달되는데, 만일 번지수의 문자열 값이 변경이 가능하다면 해커가 참조 값을 변경하여 애플리케이션에 보안 문제를 일으킬 ..