Composition이란? 기존 클래스를 상속을 통한 확장 대신, 필드로 클래스의 인스턴스를 참조하게 만드는 설계입니다. 가령, Service나 Repository를 인터페이스로 구축하고 해당 내용을 사용하기 위해 인스턴스로 받아와서 참조해 사용할 때 Composition을 쓰고 있는 것입니다. 상속과 합성의 차이점 상속 부모 클래스와 자식 클래스의 의존성을 컴파일 타임에 해결합니다. Is-A 관계로 한 개의 부모 클래스에 한 개의 자식 클래스를 가집니다. 부모 클래스의 구현에 의존 결합도가 높습니다. 클래스 사이의 정적인 관계로 융통성 있게 사용하기 어렵습니다. 부모 클래스 안에 구현된 코드 자체를 물려 받아 재사용하기에 예기치 못한 에러가 발생할 우려가 있습니다. 합성 두 객체 사이의 의존성을 런타임..
String String 클래스는 String Constant Pool에 저장되고, 불변객체로 변경되지 않는 특징을 가지고 있습니다. 이렇게 사용하면, 문자열을 Constant화 하여 다른 변수 혹은 객체들과 공유하게 되는데 이 과정에서 데이터 캐싱이 일어나고 그 만큼 성능적 이득을 취할 수 있기 때문입니다. 두번째는 데이터가 불변(immutable) 하다면 Multi-Thread 환경에서 동기화 문제가 발생하지 않기 때문에 더욱 안전한 결과를 낼 수 있기 때문입니다. 세번째는 보안(Security) 측면으로, 데이터베이스 사용자 이름, 암호는 데이터베이스 연결을 수신하기 위해 문자열로 전달되는데, 만일 번지수의 문자열 값이 변경이 가능하다면 해커가 참조 값을 변경하여 애플리케이션에 보안 문제를 일으킬 ..
Record는 Java14 부터 도입되고 16부터 class처럼 타입으로 사용이 가능해졌습니다. final로 구성되기에 VO로 많이 사용되는 방식입니다. 정의 방법 불변 데이터 객체로 Person을 정의하면 아래와 같이 정의 해야합니다. public class Person { private final String name; private final String address; public Person(String name, String address) { this.name = name; this.address = address; } @Override public int hashCode() { return Objects.hash(name, address); } @Override public boolean ..
멀티테스킹 OS에서는 멀티 테스킹을 지원합니다. Linux, Windows 등이 모두 이에 해당되죠. 즉, 한 컴퓨터에서 인터넷 검색, 노래 듣기, 게임을 동시에 할 수 있는 것이죠 그럼 어떻게 많은 작업을 동시에 처리할 수 있을까요? cpu 성능이 좋지 않으면 동시에 처리하는 기능이 떨어지는 걸까요? 게임과 같이 처리량이 많은 업무를 할때, 다른 업무를 많이 처리하게 한다면 동시에 처리되지 않고 버벅이거나 게임할 때 자막이 잘 나오지 않는 것 그런것들 모두 이것과 관련이 있습니다. 실제로 동시에 처리될 수 있는 프로세스의 개수는 CPU 코어의 개수와 동일합니다. 이보다 많은 개수의 프로세스가 존재하기 때문에 모두 함께 동시에 처리할 수는 없습니다. 각 코어들은 아주 짧은 시간에 여러 프로세스를 번갈아가..