
참고 포스팅 : https://dev-coco.tistory.com/153
SRP_단일책임원칙 : 하나의 클래스는 단일 책임을 가져야 한다.
이는 해당 클래스를 수정해야 하는 이유가 동일한 이유를 가져야 함을 의미한다. 클래스를 수정해야 하는 이유가 여러 개일 경우 SRP는 지켜지지 않는다. 즉, 수정할 대상이 명확해지면, 이는 SRP가 정확히 지켜지고 있다고 생각하면 된다.
OCP_개방폐쇄원칙 : 확장에 대해서는 열려있고, 수정에 대해서는 닫혀있어야 한다.
요구사항이 변경되었을 때 새로운 동작을 추가하여 애플리케이션의 기능을 확장할 수 있어야 하고, 기존의 코드를 수정하지 않고 새로운 동작을 추가할 수 있어야 한다. 이를 지키기 위해서는 추상화에 의존하여 변하지 않을 부분만 남겨놔야 이를 구체화 하는 기능을 다양하게 정의할 수 있고, 변경도 쉽다. 일반적으로 우리가 Interface - ServiceImpl을 사용하는 것이 이러한 원칙을 지키는 방법 중 하나이다.
LSP_리스코프치환원칙 : 하위 타입은 상위 타입을 대체할 수 있어야 한다. 객체를 사용하는 클라이언트는 상위 타입이 하위 타입으로 변경되어도 차이점을 인식하지 못한 채 상위 타입의 퍼블릭 인터페이스를 통해 서브 클래스를 사용할 수 있어야 한다. 여기서 자식 클래스가 부모 클래스를 대체하기 위해서는 부모 클래스에 대한 클라이언트의 가정을 준수해야 한다는 것을 강조한다.
ISP_인터페이스분리원칙 : 목적과 관심이 각기 다른 클라이언트가 있다면 인터페이스를 통해 적절하게 분리해줘야 한다. 즉, 특정 용도를 필요로 하는 인터페이스에서 여러 용도로 사용되도록 하면 안된다는 것이다.
DIP_의존관계역전원칙 : 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안되며, 저수준 모듈이 고수준 모듈에 의존해야 한다는 것이다.
JVM 메모리 영역은 크게 Method, Stack, Heap 영역으로 구분된다.
Method 영역 : 모든 스레드가 공유하는 메모리 영역이며, 클래스, 인터페이스, 메소드, 필드, static 변수 등의 바이트 코드를 보관한다. 프로그램의 시작부터 종료까지 메모리에 남아있다.
스택 영역 : 지역 변수와 매개변수 등의 값이 저장되는 공간이며, 메소드 호출 시 생성되어 메소드 종료 시 메모리가 해제된다.
힙 영역 : new 키워드로 생성되는 객체, 배열 등이 저장되는 동적 메모리 영역으로, GC에 의해 메모리 관리가 수행된다. 영역의 생명주기도 GC에 의해 결정된다.