JAVA-SOLID 6

[OOP] 스프링 삼각형(AOP)

AOP(Aspects - Oriented Programming) 핵심관심사와 횡단관심사를 분리하여 모듈화하여 재사용할 수 있도록 지원하는 것 관점 지향 프로그래밍이라고도 함 스프링 AOP는 인터페이스 기반으로 함. class Teacher{ public void sleep(){}; public void eat(){}; public void teach(){}; } class Student{ public void sleep(){}; public void eat(){}; public void learn(){}; } 위의 코드를 보게 되면 먹고 자는 행동은 학생과 선생님 둘 다 공통적으로 수행하는 부분이기 때문에 횡단관심사라고 하고 선생님의 역할을 가르치는 것이고 학생의 역할은 배우는 것으로 서로 핵심적인 역할..

JAVA-SOLID 2023.06.21

[OOP] 스프링 삼각형(IoC/DI)

스프링을 이해하기 위해서는 스프링 삼각형이 대단히 중요하다. 프로그래밍에서의 의존성이 의미하는 것은 무엇일까? 대답은 전체가 부분에 의존한다는 것을 의미한다. 자바에서는 new키워드가 의존관계를 표현한다고도 한다. 의존성을 주입하는 방법에는 스프링을 이용한 방법과 이용하지 않은 방법 2가지가 존재한다. 우선 스프링을 사용하지 않고 의존성을 주입하는 방법에 대해 설명하겠다. 스프링을 사용하지 않고 의존성을 주입하는 방법(생성자 주입) public class IocDi { public static void main(String[] args) { Case c=new ClearCase(); Phone phone=new Phone(c); System.out.println(phone.getCaseType()); }..

JAVA-SOLID 2023.06.18

[OOP] 디자인 패턴(Singleton, Template Method, Strategy)

Singleton Pattern(싱글톤 패턴) Singleton Pattern은 오직 단 하나만의 인스턴스를 만들고 그것을 계속해서 재사용하는 원칙을 의미한다. 따라서 Singleton Pattern을 적용하면 의미상 한 클래스에 두 개의 객체가 존재할 수 없는 것을 의미한다. Singleton Pattern을 적용하려면 아래와 같은 3가지 조건이 필요하다. new연산을 실행할 수 없도록 생성자에 private접근 제어자를 지정함 유일한 단일 객체를 반환할 수 있는 정적 메소드가 필요함 유일한 단일 객체를 참조할 정적 참조 변수가 필요함 위의 코드를 살펴보면 Singleton클래스의 참조변수를 정적변수로 선언을 하고 초기화를 하지 않았다. 그런 다음 기본생성자를 선언했는데 public이 아닌 privat..

JAVA-SOLID 2023.06.14

[OOP] 디자인 패턴(Adapter, Proxy, Decorator Pattern)

디자인 패턴 디자인 패턴은 다른 말로 설계패턴이라고도 한다. 또한 디자인패턴은 상속, 인터페이스, 객체를 속성으로 사용하여 이용하는 방식이다. 디자인 패턴은 설계라고 하면 SOLID원칙은 설계원칙이기 때문에 디자인 패턴은 SOLID원칙을 기반으로 한다. Adapter Pattern(어댑터 패턴) 어댑터는 변환기라는 의미를 가지고 있다. 여기서 변환기는 서로 다른 두 인터페이스 사이에 통신이 가능하게 하는 것을 의미한다. 어댑터 패턴을 사용하는 것은 대표적으로 JDBC가 있다. JDBC를 인터페이스를 이용하여 사용하는 DB를 바꾸어도 사용자는 신경쓰지 않아도 되기 때문이다. JDBC를 보니 뭔가 떠오른게 있는가? 바로 Adapter Pattern은 OCP(개방 폐쇄 원칙)과 DIP(의존 역전 원칙)을 이용..

JAVA-SOLID 2023.06.08

[OOP] 객체지향설계 5원칙_SOLID원칙

SOLID란? SOLID는 객체 지향 설계를 할 때 필요한 원칙을 의미하고 SRP(단일 책임 원칙), OCP(개방 폐쇄 원칙), LSP(리스코프 치환 원칙) ISP(인터페이스 분리 원칙), DIP(의존 역전 원칙) 총 위의 5개로 구성되어 있는 원칙 SRP(단일 책임 원칙) SRP는 쉽게 말해서 클래스를 역할과 책임에 따라 분리하는 것을 의미한다. 예를 들어 사육사라는 클래스가 있다고 가정하자 위처럼 사육사는 강아지에게 사료주는 일과 호랑이에게 고기를 주는 일, 곰에게 생선을 주는 일 총 3가지일을 맡고 있다. 근데 만약 강아지가 더 이상 동물원에 존재하지 않으면 사육사가 하는 일에서 사료주는 일을 할 대상이 사라지게 된다. 위의 코드는 이러한 점에서 SRP가 지켜지지 않았다. 그럼 SRP원칙을 지켜가면..

JAVA-SOLID 2023.06.08

[OOP] 자바 vs 구조적/절차적 프로그래밍

일반적으로 프로그램이 메모리를 사용하는 방식은 아래 의 사진과 같이 코드 실행 영역과 데이터 저장 영역으로 구분된다. 하지만 객체 지향 프로그램에서는 데이터 저장 영역이 더 세분화된다. 위처럼 데이터 저장 영역을 스태틱 영역, 스택 영역, 힙 영역으로 나뉜다. 기본적인 OOP에 대한 지식이 있다고 가정하고 간략하게 구조적/절차적 프로그래밍, OOP프로그래밍에 대해 설명하겠다. 구조적/절차적 프로그래밍 마치 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시 되는 프로그래밍 대표적인 언어로는 C, FORTRAN이 있다. 구조적/절차적 프로그래밍 구조적 프로그래밍의 장점은 실행 속도가 빠르고, 프로그램의 흐름을 쉽게 추적할 수 있다는 장점이 있지만 단점으로는 유지보수가 어렵고, 실행순서가 명확하기 때문..

JAVA-SOLID 2023.05.30