목록OOP (8)
영호
개요 우테코 미션을 진행하면 dao에 대해 공부하면서 dao를 적용했을 때의 장점을 생각해봤습니다. 잘못된 내용에 대해 피드백 해주시면 감사하겠습니다 ㅎㅎ DAO baeldung의 dao관련 글을 보면 아래와 같은 문구로 시작한다. The Data Access Object (DAO) pattern is a structural pattern that allows us to isolate the application/business layer from the persistence layer (usually a relational database but could be any other persistence mechanism) using an abstract API. 간단하게 요약해보면, “추상 API를 사..
우테코 5기 레벨1 체스미션을 진행하면서 커맨드 패턴을 적용한 과정을 정리해보겠습니다:) 왜 적용했나? 체스미션에는 다양한 명령어가 있다. 움직이는 MOVE, 게임을 시작하는 START, 게임 점수를 보여주는 STATUS등등이 있다. 1단계 컨트롤러를 구현하면서 시간이 없어서 명령어마다 분기문을 통해 수행되는 로직을 구현한 결과 매우 더러운 코드가 나왔다. private void play(ChessGame chessGame) { List userCommandInput = repeatBySupplier(inputView::requestUserCommandInGame); try { GameCommand command = GameCommand.from(userCommandInput); if (isExitCom..
개요 우아한테크코스 프롤로그 학습로드맵에 있는 다형성에 대해 공부한 내용을 정리해 보겠습니다 :) 다형성? 단어만 보면 "다양한 형태를 가질 수 있는 성질인가?"라는 생각이 먼저 들었습니다. 위키백과를 보면 다형성을 아래와 같이 설명하고 있습니다. 프로그램 언어의 각 요소들(상수, 변수, 식, 오브젝트, 함수, 메소드 등)이 다양한 자료형(type)에 속하는 것이 허가되는 성질을 가리킨다. 즉, 하나의 객체, 메서드에 다양한 타입들을 갈아 끼울 수 있는 객체지향의 특징이다. 이렇게 말만 보면 잘 이해가 가지 않으니 코드로 적용해 보겠습니다. 다형성을 구현하는 방법에는 오버로딩, 오버라이딩도 있지만 이 글에서는 인터페이스를 통한 다형성에 대해 살펴보겠습니다. 인터페이스를 통한 다형성 고스톱을 할 때, 패를..
의존성 역전 원칙(DIP)란 간단하게 말해 "구체 클래스가 아닌 추상화에 의존해라"입니다. DIP에 찾아보면 고수준 모듈(클래스), 저수준 모듈(클래스)이란 단어가 많이 보입니다. 저수준 모듈은 고수준 모듈의 작업을 돕는 역할입니다. 이는 고수준 모듈이 저수준 모듈에 의존한다는 것을 의미합니다. 그러나 DIP는 고수준 모듈은 저수준 모듈에 의존하는 것이 아닌 추상화에 의존해야 한다고 합니다. 위 그림은 고수준이 저수준을 직접 의존하는 관계입니다. 만약, 스노우타이어에서 산악 드라이브를 위해 이에 적합한 타이어로 구체 클래스를 변경한다면 자동차에도 변경에 대한 영향이 연쇄적으로 미칠 것입니다. DIP준수 현재 자동차라는 고수준 모듈이 직접 스노우타이어라는 저수준 모듈에 의존하고 있습니다. 그러나 저는 이를..
ISP(인터페이스 분리 원칙)이란 "클라이언트는 자신이 사용하지 않는 기능에 의존하게 해선 안된다." 즉, 모든 클라리언트를 위한 범용적인 인터페이스 보단, 특정 클라이언트에 맞게 여러 인터페이스로 분리하는 것이 좋다는 뜻입니다. SRP와 비슷한 맥락입니다. SRP는 각 클래스들이 하나의 책임을 가지게 해서 유지보수성을 높였다면, ISP는 인터페이스들이 단일 책임을 가지도록 하는 원칙입니다. 예시 자동차를 개발하기 위해 Car인터페이스를 만들었습니다. 그런데 자동차에는 수동, 자동 2종류가 있다고 가정합니다. Car라는 범용적인 인터페이스를 사용하게 된다면, autoHandle(), manualHandle() 이렇게 2가지의 메서드가 포함되어야 할 것입니다. 이제 해당 인터페이스를 구현하는 클래스를 생각..
LSP(리스코프 치환 원칙)이란 SOLID에서 L에 해당하는 원칙으로, "상위 타입의 객체를 하위 타입의 객체로 치환을 해도 프로그램은 정상적으로 동작을 해야 한다."라는 내용입니다. 역시 코드를 보며 추가적으로 알아보겠습니다. 예시는 흔히 찾아볼 수 있는 직사각형, 정사각형 예시를 이용하겠습니다. Code 직사각형 (Rectangle) package lsp; public class Rectangle { private int height; private int width; public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public int getWidth() { retur..
들어가며 SOLID의 SRP글에 이어 이번에는 OCP(개발-폐쇄 원칙)에 대해 알아보겠습니다. OCP(개발-폐쇄 원칙)이란 "Open-Closed Principle"의 약자입니다. "확장에는 열려있고, 변경에는 닫혀있다."를 의미합니다. 즉, 기존에 동작하는 코드를 수정 없이, 코드를 추가함으로써 기능을 추가하거나 변경할 수 있어야 한다는 말입니다. 해당 원칙은 추상화나 인터페이스의 다형성을 통해 준수할 수 있습니다. 이제 코드를 통해 예시를 들어보겠습니다. 상황 가정 현재 세상에는 기름으로 움직이는 자동차만 존재한다고 가정을 합니다. 차를 소유한 사람이 자동차를 움직이려면 기름만 넣으면 되기 때문에 Driver클래스의 charge() 함수에는 기름을 넣는 로직만 존재합니다. public class Oi..
들어가며 이번 포스팅에서는 좋은 객체지향을 설계하는 5가지 원리인 SOLID 중 S에 해당하는 SRP(단일 책임원칙)에 대해 알아보겠습니다. SRP(단일 책임 원칙)이란 SRP에 대해 찾아보면 많이 볼 수 있는 정의로는 아래와 같습니다. 하나의 클래스는 하나의 책임만 진다. 또한 SOLID의 5가지 원리를 소개한 로버트 마틴은 책임을 "변경하려는 이유"라고 정의하고 있습니다. 즉, 하나의 클래스는 하나의 객체(=액터)에 대해서만 책임을 져야 하기 때문에, 클래스를 수정해야 하는 이유가 여러 개가 생겨선 안된다는 것입니다. 하지만 이렇게 글로만 보면 별로 와닿지 않기 때문에 코드를 보며 추가적으로 살펴보겠습니다. 상황 가정 단순하게 SRP의 이해를 돕기위한 예제입니다. Programming 클래스에는 개발..