전체 글
-
[디자인 패턴] 템플릿 메서드 패턴 (Template Method)백엔드/객체지향 | 디자인패턴 2023. 1. 29. 09:56
템플릿 메서드 패턴의 경우에는 일부 구현이 다르지만, 실행 과정은 동일한 코드를 여러개 작성할 상황에서 적용하면 코드 중복을 줄여주는 디자인 패턴이다. 만약 네이버페이와 카카오페이의 결제 방식이 다음과 같다고 해보자 [네이버페이] 1. 네이버 아이디와 비밀번호를 입력하여 인증한다. 2. 포인트 충전을 한다. (+ 네이버 포인트 추가 적립) 3. 결제한다. [카카오페이] 1. 카카오 아이디와 비밀번호를 입력한다. 2. 포인트 충전을 한다. 3. 결제한다. 템플릿 메서드 패턴은 두 가지 종류가 있다. - 실행 과정을 구현한 상위 클래스 - 실행 과정의 일부 단계를 구현한 하위 클래스 본인 인증은 아이디와 비밀번호를 입력하는 것은 같지만, 내부 인증은 카카오와 네이버가 서로 다르다. 아이디와 비밀번호를 입력하..
-
[디자인 패턴] 전략 패턴 (Strategy)백엔드/객체지향 | 디자인패턴 2023. 1. 29. 09:55
전략 패턴은 특정 행동을 할 수 있는 알고리즘이 여러가지일 때, 프로그램을 실행 중에 알고리즘을 선택할 수 있도록 하는 패턴이다. 위 문장만 보면 이해하기 어렵지만, 알고보면 간단한 패턴으로 개방-폐쇄 원칙(OCP)을 지킬 수 있도록 도와주는 디자인 패턴이다. 만약 어떤 물건을 사고 결제를 할 때, 현금 결제나 카드 결제, 카카오페이를 선택할 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 public class consumer { public void credit(int strategy, int money) { if (strategy == 1) { 현금 결제 } else if (strategy == 2) { 카드 결제 } else if (strategy == 3) { 카카오페이 결제 }..
-
[SOLID] 객체지향 설계 원칙백엔드/객체지향 | 디자인패턴 2023. 1. 28. 01:03
우아한테크코스 프리코스를 할 때, 인터넷에서 뒤적뒤적 거리면서 공부를 했었지만 간단한 코드와 글만 봐서는 이해가 되지 않았었다. 그런데 지금 객체지향 책을 읽어보니 이해가 되어서 나중에 까먹어도 최대한 쉽게 다시 이해할 수 있도록 정리를 해보았다. SOLID를 이해하려면 기본적인 객체지향 지식은 있어야 의미를 제대로 알 수 있다. 참고로 객체지향 설계는 지키면 지킬수록 좋은 이상적인 방법론이지 무조건 지켜야 한다는 것은 아니다. 그래서 완벽한 객체지향 설계가 아니더라도 최대한 객체지향 설계를 맞추게 된다면 유지보수하기 좋은 코드가 될 것이다. 1. 단일 책임 원칙 (SRP) 한 클래스는 하나의 책임을 가져야 한다. 객체지향 설계에서 중요한 것은 한 객체에 최소의 책임을 부여하는 것이다. 그래서 단일 책임..
-
[객체지향의 사실과 오해] 0. 목차책/객체지향의 사실과 오해 2023. 1. 25. 01:31
1장 - 협력하는 객체들의 공동체 2장 - 이상한 나라의 객체 3장 - 타입과 추상화 4장 - 역할, 책임, 협력 5장 - 책임과 메시지 6장 - 객체 지도 7장 - 함께 모으기 + 부록 - 추상화 기법 객체지향 입문서로 유명한 책이다. 객체지향에 대해 따로 공부하지 않은 사람들, 자신의 설계와 코드가 객체지향적인지 판단이 서지 않는 사람들에게 강추한다. 일단 내가 그동안 작성한 코드들은 객체지향적으로 짠 코드가 아님을 확실히 알 수 있었다. 책에서는 역할, 책임, 협력, 메시지를 강조하지만, 나는 기능 완성하는데만 급급했으니.. 이 책을 지금이라도 읽은게 참 다행이라고 생각한다. 다른 책들보다는 이해하는데 오래 걸려서 시간이 걸리기도 하고, 블로그에 글을 쓸 때마다 여러 번 읽어야 해서 시간 효율이 극..
-
[객체지향의 사실과 오해] 7. 함께 모으기 ~ 부록 추상화기법책/객체지향의 사실과 오해 2023. 1. 25. 01:05
이번 장에서 설명하는 내용 인터페이스와 구현을 잘 분리해야 한다. 추상화는 복잡도를 줄이기 위해 다양한 방법을 사용한다. 1. 객체지향 설계 관점 객체지향을 설계할 때 3가지 관점으로 설계할 수 있다. 개념 관점 : 사용자가 도메인을 바라보는 관점을 반영. 실제 도메인의 규칙과 제약을 최대한 유사하게 반영함 명세 관점 : 객체가 협력을 위해 무엇을 하느냐에 초점을 맞춤. 인터페이스와 구현을 분리해서 설계함 구현 관점 : 개발자에게 가장 익숙한 관점으로 객체의 책임을 어떻게 어떻게 수행하느냐에 초점을 맞춤 좋은 설계란 한 클래스에서 개념 / 명세 / 구현 관점을 모두 볼 수 있어야 한다. 클래스가 은유하는 개념은 개념 관점, 공용 인터페이스는 명세 관점, 속성과 메서드는 구현 관점을 반영해야 한다. 2. ..
-
[객체지향의 사실과 오해] 6. 객체 지도책/객체지향의 사실과 오해 2023. 1. 23. 09:36
이번 장에서 설명하는 내용 도메인 모델이란 특정 목적에 필요한 지식을 선택적으로 단순화하고, 구조화한 형태이다. 유스케이스란 사용자와 시스템 간에 이뤄지는 상호작용의 흐름을 텍스트로 정리한 것이다. 도메인 모델과 유스케이스를 사용하여 설계를 한다면 유지보수하기 쉽고 유연한 객체지향 시스템이 된다. 1. 설계 좋은 설계란 미래의 변경을 예측하고 설계에 반영을 하는 것보단, 변경을 수용할 수 있는 설계를 만드는 것이다. 설계의 중요한 목표는 설계를 변경할 때의 시간을 낮추는 것이다. 전통적인 설계는 기능 중심 설계로 특정 기능을 작은 기능으로 나누는 방식이다. 이것은 작은 기능으로 나누어도 서로 밀접한 연관이 있기 때문에 기능이 변경될 경우 코드를 수정하는데 많은 시간을 소비해야한다. 하지만 객체지향적 설계..
-
[객체지향의 사실과 오해] 5. 책임과 메시지책/객체지향의 사실과 오해 2023. 1. 22. 18:51
이번 장에서 설명하는 내용 객체에게 자율성을 부여하면 좋은점 - 협력을 단순하게 만든다. - 외부와 내부를 명확하게 분리할 수 있다. - 협력의 대상을 다양하게 선택할 수 있는 유연성을 제공한다. 1. 자율적인 책임 객체지향을 구성하는 기본 단위는 객체이고, 객체는 스스로 정해진 원칙과 의지에 행동하는 자율적인 책임감을 가진다. 객체가 행동할 때는 다른 객체로부터 요청을 수신 받은 것이고, 이때 요청을 처리하기 위해 수행하는 행동을 책임이라고 한다. 요청을 송신한 객체는 수신 객체가 어떤 방법을 사용하든 책임만 완수할 수 있으면 아무런 터치를 하지 않는다. 자율적인 책임은 요청을 '어떻게' 수행하느냐가 아니라 '무엇을' 해야 하는가를 설명하는게 중요하다. 만약 내가 알고리즘 문제를 풀어야 한다면 어떻게 ..
-
[객체지향의 사실과 오해] 4. 역할, 책임, 협력책/객체지향의 사실과 오해 2023. 1. 13. 12:49
이번 장에서 설명하는 내용 어떤 협력에 참여하냐에 의해 객체에 필요한 행동을 결정하고, 필요한 행동이 객체의 상태를 결정한다. 객체를 설계하려면 협력부터 설계해야 한다. 객체지향 설계에서는 역할, 책임, 협력이 중요하고, 여기에서 책임 주도 설계, 디자인 패턴, 테스트 주도 개발이 나왔다. 1. 역할 개발자 정다빈은 요구사항 A를 만들기 위해 코드를 작성하고 있다고 가정해보자. 그러면 아래와 같은 상황이 발생한다. 1. 정다빈은 레노버 노트북 키보드에 손을 올려두고 타이핑을 한다. 2. 레노버 노트북 키보드는 입력된 값을 레노버 노트북에 전송한다. 3. 레노버 노트북는 모니터에 입력된 값을 표시한다. 여기서 정다빈, 레노버 노트북 키보드, 레노버 노트북, 모니터는 객체이다. 1장에서 말했듯이 각 객체는 ..