CS/디자인 패턴과 프로그래밍 패러다임 6

SOLID 원칙 - 의존 역전 원칙

지난번 OCP 정리에 이어 이번에는 의존 역전 원칙인 DIP에 대해 간단히 정리하겠다.정의우선, 책에 정리되어 있는 정의는 다음과 같다.자신보다 변하기 쉬운 것에 의존하던 것을 추상화된 인터페이스나 상위 클래스를 두어 변하기 쉬운 것의 변화에 영향받지 않게 하는 원칙 말을 굉장히 어렵게 써놨는데 쉽게 풀어서 설명하면 "구현체가 아닌 역할군에 의존관계를 가져야 한다"는 원칙이다.역할과 구현체위 말도 무슨 말인가 싶을 수 있는데, 객체지향 프로그래밍을 공부해보면 무슨 말인지 바로 이해가 될 것이다.우선, 객체지향 설계를 할 경우 다음과 같은 방식으로 진행된다.해당 기능을 담당하는 역할을 설계(인터페이스)해당 기능을 담당하는 역할을 상속받아 실제로 구현체를 구현(클래스)다음 사진을 한번 보자. 로미오와 줄리엣..

SOLID 원칙 - 개방 폐쇄 원칙

객체지향 프로그래밍을 설계할 때 아래와 같이 5가지 원칙을 지켜야한다라는 말을 들어본 적 있을 것이다.단일 책임 원칙(SRP)개방 폐쇄 원칙(OCP)리스코프 치환 원칙(LSP)인터페이스 분리 원칙(ISP)의존 역전 원칙(DIP)CS를 공부하면서 배웠을 SOLID 원칙인데 솔직히 이론적인 설명만 읽어서는 온전히 이해가 되지 않는 원칙들이 몇 개 있었다. 이번에 김영한님의 spring 강의를 들으면서 개방 폐쇄 원칙을 잘 지킨 사례를 발견하여 블로그에 기록해두려 한다.개방 폐쇄 원칙(OCP)이론적인 설명은 다음과 같다.코드의 수정에는 폐쇄되어 있지만 확장에는 개방되어 있어야 한다. 즉, 유지 보수할 때 코드의 수정은 최대한 지양하면서 확장은 용이하게 할 수 있도록 설계해야 한다. 언뜻 이해되는 듯 하면서도 ..

객체지향 프로그래밍

객체지향 프로그래밍이란?객체들의 집합으로 프로그램의 상호 작용을 표현하며 데이터를 객체로 취급하여 객체 내부에 선언된 메서드를 활용하는 방식 영어로 Object-Oriented Programming으로 작성하며, 줄여서 OOP로 표현한다.장점모듈화하기 좋다유지 보수에 용이하다단점설계에 많은 시간이 필요하다처리 속도가 다른 프로그래밍 패러다임에 비해 상대적으로 느리다예시 코드앞서 프로그래밍 패러다임 포스트에서 작성한 배열의 최댓값 찾기 코드를 객체지향 방식으로 작성하면 다음과 같다.const ret = [1, 2, 3, 4, 5, 11, 12]class List { constructor(list) { this.list = list this.mx = list.reduce((max, num) =>..

프로그래밍 패러다임

프로그래밍 패러다임이란?프로그래머에게 프로그래밍의 관점을 갖게 해주는 개발 방법론패러다임의 분류선언형 프로그래밍함수형 프로그래밍명령형 프로그래밍객체지향형 프로그래밍절차지향형 프로그래밍선언형과 함수형 프로그래밍선언형 프로그래밍(declarative programming)이란 "무엇을" 풀어내는가에 집중하는 패러다임이다. "프로그램은 함수로 이뤄진 것이다"라는 명제가 담겨 있다. 함수형 프로그래밍은 선언형 패러다임의 일종으로, 일반적으로 선언형 프로그램을 언급하면 함수형 프로그래밍을 의미하기도 한다.예시 코드const list = [1, 2, 3, 4, 5, 11, 12]const ret = list.reduce((max, num) => num > max ? num : max, 0)console.log(re..

싱글톤 패턴(Singleton Pattern)

싱글톤이란?하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴 하나의 클래스를 기반으로 여러 개의 개별적인 인스턴스를 만들 수 있지만, 그렇게 하지 않고 하나의 클래스를 기반으로 단 하나의 인스턴스를 만드는 패턴이다. 일반적으로 데이터베이스 연결 모듈에서 많이 사용된다.예제 코드일반적으로 싱글톤 패턴은 자바에서 사용빈도가 높으므로 자바로 예시를 들겠다.class Singleton { private static class singleInstanceHolder { private static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return sin..

디자인 패턴

디자인 패턴이란?프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 "규약" 형태로 만들어 놓은 것을 의미한다. 디자인 패턴은 크게 3가지로 구분된다.생성 패턴구조 패턴행위 패턴생성 패턴생성 패턴은 객체 생성에 관련된 패턴이다. 객체의 생성과 조합을 캡슐화해 특정 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 크게 받지 않도록 유연성을 제공한다.생성 패턴의 역할을 요약하면 "추상 객체 인스턴스화"이다. 생성 패턴은 5가지가 있다.추상 팩토리빌더팩토리 메서드프로토타입싱글톤 정처기를 공부할 때 "추빌팩프싱"이라고 외운 패턴들이다.구조 패턴클래스나 객체를 조합해 더 큰 구조를 만드는 패턴이다. 서로 다른 인터페이스를 지닌 두 개의 객체를 묶어 단일 인터페..