행동 패턴? 행동 패턴은 '객체 사이의 상호작용 또는 객체의 책임 할당'과 밀접한 관련이 있는 디자인 패턴이다. 한 객체가 수행할 수 없는 작업을 여러개의 객체로 분배하는 등의 작업을 통해서 객체 사이의 결합도를 최소화하는데 중점을 두는 패턴이다. 템플릿 메서드 패턴 부모 클래스에서 골격을 정의하면 자식 클래스가 알고리즘의 특정 메소드를 오버라이딩하여 사용할 수 있도록 한다. 다시 말하자면, 부모 클래스에 변하지 않는 템플릿을 두고, 변하는 부분을 메소드의 형태로 자식 클래스에 두어 상속을 사용하여 문제를 해결한다. 예를 들어 다음과 같이 메소드 실행에 대한 로깅을 한다고 가정하자. 핵심 비즈니스 로직의 시작과 끝에 로깅을 위한 코드가 추가되었다. 이는 개발자가 핵심 코드에 집중할 수 없게 할 뿐..
다형성 객체지향에서 말하는 다형성이란 무엇인가? 위키피디아에서는 "프로그램 언어 각 요소들(상수, 변수, 식, 객체, 메소드 등)이 다양한 자료형(type)에 속하는 것이 허가되는 성질"이라고 말하고 있으며, 오버라이딩으로 대표되는 런타임 다형성과 오버로딩으로 대표되는 컴파일 다형성을 자연스럽게 떠올리게 될 것이다. 의존 역전 하지만 사실 다형성의 진가는 DIP와 플러그인 아키텍쳐의 기반이 된다는 데에 있다. '클린 아키텍쳐'라는 책에서는 '객체지향의 다형성이 제어의 흐름을 간접적으로 전환하는 규칙을 부과한다'라고 말하고 있다. 다형성이라는 개념이 사용되기 전 소프트웨어는 어떤 모습이었을까? 모든 프로그램들은 main함수가 고수준 함수를 호출하고, 고수준 함수가 저수준 함수를 호출하는 형태로 되어 있었을..
Git은 협업을 위한 툴이다. 그래서 나도 지금까지 프로젝트를 할 때마다 나름의 커밋 컨벤션도 세우고, 작업마다 브랜치를 파서 작업한 후 pr을 올리고 merge conflict를 체크하고, 간단한 코드리뷰를 통해서 approve받은 후에야 develop으로 머지하는 프로세스들을 익히고 지켰다. 하지만 확실한 규칙을 설정하고 진행한 것이 아니기 때문에 reset --hard를 한다거나, 같은 branch에서 conflict가 난다거나 한다는 문제들이 발생했다. 그래서 브랜치 전략이라는 패턴에 대해서 간단히 정리해보고자 한다. 브랜치 전략이란? 효율적인 협업을 위해서 Git을 사용하는데, 협업하는 팀원들간에 스타일의 차이가 있기 때문에 사용방식의 통일을 주기 위해서 사용되는 전략을 말한다. 크게 Git F..
소프트웨어의 구성요소들은 확장에는 열려있고 변경에는 닫혀있어야 한다, 즉 요구사항의 변경이나 추가가 발생해도 기존 구성요소는 수정이 일어나지 않아야 한다. 흔히 OOP 5원칙에서 OCP를 만족시키기 위해서 사용하는 기법은 클래스 상속과 객체 합성을 통한 코드 재사용이라고 말한다. 먼저 상속을 사용하면, 자식클래스에 부모클래스를 덧붙이는 것으로 부모의 정의를 물려받은 후 코드를 추가하고 확장할 수 있다는 장점이 있다. 하지만 상속을 이용해서 코드를 재사용하기 위해서는 자식 클래스에서 부모 클래스의 구현법에 대한 지식을 가져야 하고, 그것은 부모 객체의 캡슐화를 약화시키는 문제를 가져오고, 결국 기능을 추가하는데 기존 구성요소를 수정하게 되므로 OCP의 위반이라는 결과를 가져올 수도 있다. 상속의 주된 목적..
절차적 프로그래밍, 전통적인 설계 원리 객체지향 프로그래밍 이전에 프로시저를 이용한 절차적 프로그래밍(procedural programming)이라는 방법이 많이 사용되었다. 이것은 프로시저(=함수)를 이용하여 절차적으로 프로그래밍을 하는 것으로, 메인함수뿐 아니라 여러 절차(기능)을 함수로 만들어 진행시키는 방식을 이야기한다. 순서도를 생각하면 쉽다. 필요한 기능들을 함수로 만들어놓고, 함수를 통해서 흐름을 나타내는 설계방식 하에서도 여러가지 설계 원리가 많이 나타났다. 단순성(simplicitiy): 유지보수를 위해서 가장 중요한 특성, 소프트웨어 유지보수는 비용이 매우 많이 드는 작업이기 때문에, 유지보수를 위해서는 단순하고 이해하기 쉬운 설계가 중요하다. 효율성(efficiency): 단순성과 비..
1. MVC (Model - View - Controller) Model: 어플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분 View: UI(User Interface) Controller: 사용자의 입력을 받고 처리 - 동작 1. 사용자의 Action이 Controller로 전달된다. 2. Controller는 사용자의 Action에 따라서 Model을 업데이트한다. 3. Controller는 Model을 나타내줄 View를 선택한다. 4. View는 Model을 이용하여 화면을 나타낸다. (View가 직접 업데이트(Model이용 or 변경감지), Model이 View에 Notify) - 특징 > Controller는 여러개의 View를 선택할 수 있는 1:n관계를 가지며, View를 선택할..