객체지향의 원리와 이해
-
[객체지향의 원리와 이해] 템플릿 콜백 패턴 (Template Callback Pattern)개발/OOP, Design Pattern 2021. 1. 3. 01:52
템플릿 콜백 패턴 전략을 믹명 내부 클래스로 구현한 전략 패턴 템플릿 콜백 패턴은 전략 패턴의 변형으로 모든 것이 전략 패턴과 동일한데, 전략을 익명 내부 클래스로 정의해서 사용한다는 특징이 있다. 템플릿 콜백 패턴을 리팩토링하면 중복되는 부분을 컨텍스트로 이관하여 코드가 간결해진다. 익명 내부 클래스를 사용하기 때문에 전략 패턴에서 사용한 각각의 전략 클래스(StrategyGun.. 등등)이 필요없다. 스프링의 3대 프로그래밍 모델 중 하나인 DI(의존성 주입)에서 사용하는 특별한 형태의 전략 패턴이다. 스프링을 이해하기 위해 전략 패턴, 템플릿 콜백 패턴, 리팩터링된 템플릿 콜백 패턴을 알아야 한다. 전략 패턴의 일종이므로 개방 폐쇄 원칙(OCP)와 의존성 역전 원칙(DIP)이 적용된다. 예제 아래 ..
-
[객체지향의 원리와 이해] 전략 패턴 (Strategy Pattern)개발/OOP, Design Pattern 2021. 1. 2. 21:40
전략 패턴 (Strategy Pattern) 클라이언트가 전략을 생성해 전략을 실행할 컨텍스트에 주입하는 패턴 다양한 전략을 생성해내고 필요에 따라 컨텍스트에 주입시키면 전략을 실행할 수 있다. 전략을 주입시킨다는 것은 모델링된 객체(어플리케이션 바운더리)에 전략을 매개값으로 주어서 사용되도록 하는 것이라고 할 수 있다. Startegy startegy = new Strategy(); // 전략 생성 Client client = new Client(); client.runContext(strategy); // 전략을 주입했다. 중요 포인트 전략 메서드를 가진 전략 객체 전략 객체를 사용하는 컨텍스트(전략 객체의 사용자/소비자) 전략 객체를 생성해 컨텍스트에 주입하는 클라이언트(제3자, 전략 객체의 공급자..
-
[객체지향의 원리와 이해] 데코레이터 패턴 (Decorator Pattern)개발/OOP, Design Pattern 2021. 1. 2. 16:07
데코레이터 패턴 메서드 호출의 반환값에 변화를 주기 위해 중간에 장식자를 두는 패턴 참고 : https://johngrib.github.io/wiki/decorator-pattern/ 원본에 장식을 더하는 패턴이다. 프록시와 구현 방법이 같다. 데코레이터 패턴은 클라이언트가 받는 값에 장식을 더하는 것이 목적이다. 프록시의 패턴의 목적은 제어의 흐름을 변경하거나 별도의 로직 처리이다. 그리고 반환값을 변경하지 않는다. 중요 포인트 장식자는 실제 서비스와 같은 이름의 메서드를 구현한다. 이때 인터페이스를 사용한다. 장식자는 실제 서비스에 대한 참조 변수를 갖는다.(합성) 장식자는 실제 서비스의 같은이름을 가진 메서드를 호출하고, 그 반환값에 장식을 더해 클라이언트에게 돌려준다. 장식자는 실제 서비스의 메서..
-
[객체지향의 원리와 이해] 싱글턴 패턴 (Singleton Pattern)개발/OOP, Design Pattern 2021. 1. 2. 16:03
싱글턴 패턴 클래스의 인스턴스, 즉 객체를 하나만 만들어 사용하는 패턴 커넥션 풀, 스레드 풀, 디바이스 설정 객체 등과 같은 인스턴스를 여러개 만들면 불필요한 자원을 사용하게 되고, 프로그램에 예상치 못한 결과를 초래하기도 한다. 그래서 이런 경우 하나의 인스턴스만을 만들고 계속 재사용하는 싱글턴 패턴을 사용한다. 중요 포인트 new를 실행할 수 없도록 생성자에 private 접근제한자를 지정한다. 유일한 단일 객체를 반환할 수 있는 정적 메소드가 필요하다. 유일한 단일 객체를 참조할 수 있는 정적 참조 변수가 필요하다. 예제 public class Singleton { static Singleton singletonObject; // 정적 참조 변수 private Singleton() {} // pr..
-
[객체지향의 원리와 이해] (3-2) 자바와 객체지향 - 추상화:모델링개발/OOP, Design Pattern 2020. 12. 27. 14:27
추상화 : 모델링 추상 : [심리] 여러 가지 사물이나 개념에서 공통되는 특성이나 속성 따위를 추출하여 파악하는 작용 피카소같은 화가의 작품을 보면 실제 사람과 비슷한 모습을 하지 않고 어떠한 특징들만을 표현하고 있다. 계급을 사람의 키로 표현한다던가 하는 방식으로 말이다. 사전적 정의처럼 추상화 한다는 것은 어떠한 것을 표현할 수 있는 공통된 특징과 속성을 파악하여 표현하는 것을 말한다. 추상화는 모델링이다 객체지향의 4대 특성(캡,상,추,다)는 클래스를 통해 구현된다. 클래스를 통해 '사람'을 구현한다고 했을 때, 먼저 클래스 설계를 한다. 설계를 하기 위해 사람의 공통된 특성을 뽑아보자. - 사람 - 시력 - 몸무게 - 나이 - 직업 - 연봉 - 먹다() - 마시다() - 눕다() - 자다() - ..
-
[객체지향의 원리와 이해] (3-1) 자바와 객체지향 - 개요 (객체지향의 4대 특성)개발/OOP, Design Pattern 2020. 12. 25. 02:16
객체 지향은 인간 지향이다. 자바 이전에 언어들은 모두 인간의 편의를 위해 하이-레벨에서 고려되었지만, 포인터 같은 개념은 기계 수준의 눈높이로 낮추지 않으면 이해하기 어렵다. 그래서 현실 세계처럼 프로그래밍 하기위해 객체 지향 개념이 탄생했다. 구조적 프로그래밍 언어에서 중요한 함수는 중복 제거와 논리의 분할를 만들었고, 그 다음 객체 지향이 나타났다. 0과 1로 이루어진 기계에 맞추던 사고방식을 현실의 Object에 맞춰 사물을 인지하는대로 프로그래밍 하자는 것이 그 출발이다. 그래서 직관적이다. 객체 지향의 큰 그림 세상 모든 사물은 객체이다. 각각의 사물은 고유하다. 사물은 속성을 갖는다. 사물은 행위를 한다. 그리고 인간은 사물을 분류(class)해서 이해한다. 객체지향의 4대 특성 - 캡! 상..
-
[객체지향의 원리와 이해] (02) 자바와 절차적/구조적 프로그래밍개발/OOP, Design Pattern 2020. 12. 23. 01:16
깃허브 자바와 절차적/구조적 프로그래밍 변수가 어떻게 메모리에 저장되고 사용되는지와 메서드가 어떻게 호출되고 메모리에 어떤 변화를 일으키는지 살펴본다. 자바 프로그램의 개발과 구동 JVM의 존재와 역할을 아는 것은 자바 개발 환경을 이해하기 위해 필수이다. JVM은 가상 기계이고 현실세계와 가상세계를 비교하면 다음과 같다. 현실세계 - 가상세계 SW 개발도구 - JDK (JVM용 SW 개발 도구) 운영체제 - JRE (JVM용 OS) 하드웨어 - JVM (가상의 컴퓨터)(윈도우 JDK) JDK는 javac.exe를 포함하고, 이를 통해 컴파일해서 만들어진 목적 파일을 자바 가상 기계가 실행한다. 자바 메모리 구조 메모리는 |코드 영역|데이터 저장 영역| 으로 나눌 수 있고, 그 중에 데이터 저장 영역은 ..
-
[객체지향의 원리와 이해] (01) 사람을 사랑한 기술개발/OOP, Design Pattern 2020. 12. 22. 00:59
신기술은 이전 기술의 어깨를 딛고 스프링을 비롯한 모든 신기술은 이전 기술의 철학과 기법에 새로운 철학과 기법을 더해 나타난다. 스프링은 그 발전사의 정점에 가깝고, 스프링을 이해하기 위해 이전 기술들을 간단하게 이해할 필요가 있다. 기계어에서 객체 지향 프로그래밍 언어로 기계어 최초에 인간은 0과 1로만 이루어진 기계어로 프로그래밍을 했었다. 이러한 방식의 프로그래밍은 눈에 제대로 들어오지도 않을 뿐다. (010101010000000100001001이 애드삭에서 1과 3을 더하는 기계어 프로그래밍 코드라는데 당연히 알기 쉽지않다.) 그리고 기계어 방식은 CPU 별로 코드가 다르다. 어셈블리어 기계어를 인간의 언어로 표현한 것으로 예를 들어 더하는 연산을 CPU에 따라 add, plus로 표현한다. 그리..