본문 바로가기

Programming18

디자인패턴 시리즈 4. 팩토리 패턴 (Factory Pattern) 팩토리 패턴 (Factory Pattern) 팩토리 패턴은 추상 팩토리 패턴과 팩토리 메소드 패턴이 존재한다. 이 두가지 패턴은 팩토리 패턴으로 묶이지만 서로 다른 디자인 패턴이다. 팩토리 메소드 패턴은 객체를 생성할 때 필요한 인터페이스를 만들고, 어떤 클래스의 인스턴스를 만들지는 서브 클래스에서 결정한다. 즉, 인스턴스를 생성하는 과정을 서브 클래스에 위임하는 것이다. 코드에 적용해보기 Sandwich sandwich = new HamSandwich(); 앞선 디자인 패턴 글에서 위와 같은 new 연산자를 통한 인스턴스 생성(구상 클래스의 인스턴스) 과정을 많이 보았다. 인터페이스를 이용하여 코드를 유연하게 만들었지만 구상 클래스의 인스턴스를 만들어야 했다는 것은 여전하다. 햄 샌드위치, 베이컨 샌드.. 2023. 1. 16.
디자인패턴 시리즈 3. 데코레이터 패턴 (Decorator Pattern) 데코레이터 패턴 (Decorator Pattern) 서브클래스를 만들 때보다 훨씬 유연하게 기능을 확장할 수 있다. 객체에 추가 요소를 동적으로 더 할 수 있다. 코드에 적용해보기 샌드위치 가게에서 주문을 한다고 하자. 예를 들면 토핑 주문 지옥이라는 서브웨이. 모든 샌드위치들은 Sandwich 추상 클래스의 서브클래스가 된다. price() 메소드는 추상 메소드이고 서브클래스는 이 메소드를 구현해야 한다. name 인스턴수 변수는 서브 클래스에서 정해지고 getName() 메소드를 통해서 호출해서 정해진 이름을 알 수 있다. 햄 샌드위치, 참치 샌드위치, blt 샌드위치에서는 가격을 반환하는 price() 메소드를 구현해야 한다. 하지만 햄, 참치 등은 기본 재료이고 여기에 에그마요, 베이컨, 양상추 .. 2023. 1. 13.
디자인패턴 시리즈 2. 싱글톤 패턴 (Singleton Pattern) 싱글톤 패턴 (Singleton Pattern) 클래스 인스턴스를 단 하나만 생성하고 그 인스턴스로의 전역 접근을 제공한다. 코드에 적용해보기 싱글톤 패턴의 첫인상은 클래스가 단 하나뿐인데 디자인패턴이라는 거창한 이름을 붙인 것만 같았다. 하지만 생각보다 많은 곳에서 필요로 하는 디자인패턴이다. 스레드 풀, 블루투스 장치를 위한 드라이버 등이 대표적인 예시이다. 스프링 Bean은 컨테이너가 싱글톤 스콥으로 관리하고 있다고 한다. 이런 객체를 쓸 때 인스턴스가 2개 이상이면 이상하게 작동하거나 불필요하게 자원을 낭비하게 된다. 가장 심각한 문제는 결과의 일관성이 사라진다는 것이다. 싱글턴 패턴에서 인스턴스를 하나만 생성하는 방법은 간단하다. public으로 생성자를 만드는 것이 일반적이지만 안타깝게도 pr.. 2023. 1. 12.
디자인패턴 시리즈 1. 전략 패턴 (Strategy Pattern) 전략 패턴 (Strategy Pattern) 알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해서 사용할 수 있게 해준다. 코드에 적용해보기 이론만 보면 도대체 무슨 소리인지 모르겠는 게 디자인 패턴이다. 나의 경우 예시를 들어 천천히 코드에 적용해보면서 이해를 하는 게 훨씬 빨랐다. 지금부터 배구 게임을 만드는 프로그램을 작성할 것이다. 표준 객체지향 기법을 사용하여 Player라는 슈퍼클래스를 만든 후에 이 클래스를 확장하여 여러 종류의 플레이어를 만들 계획이다. public abstract class Player { public void defence() { System.out.println("수비를 했습니다!"); } abstract public void attack(); } public .. 2023. 1. 11.
SOLID 원칙 SRP(단일 책임 원칙), OCP(개방-폐쇄 원칙) 객체지향 5대 원칙이라고 불리는 SOLID Principles은 Single Responsiblity Principle, Open-Closed Principle, Liskov Substitution Principle, Dependency Inversion Principle, Interface Segregation Principle으로 이루어져있다. 유지 보수와 확장이 쉬운 프로그램을 설계하기 위해 앞선 원칙들을 적용한다. 즉, 이 다섯가지 원칙을 적용한다면 객체지향 프로그래밍을 하게 되는 것이다. Single Responsiblity Principle (단일 책임 원칙) 책임이란 단어가 다소 추상적으로 느껴질 수 있지만 '기능'이라고 보면 된다. 함수, 클래스 등은 단 하나의 책임을 가져야 한다는 원칙이.. 2023. 1. 3.
커밋 내역 관리를 위한 git merge, rebase, squash 공동 작업 혹은 버전 관리를 위해 커밋 내역을 깔끔하게 해야 한다고들 한다. 개인적으로는 혼자서 하는 작업이라도 커밋 내역을 알아보기 쉽게 관리하는 습관을 들이는 것이 중요하다고 생각한다. 어제 내가 작성한 코드도 기억이 잘 나지 않는데 몇 달 전 남긴 커밋들이 과연 어떤 작업들이었는지 한눈에 알아볼 수 있을까. 의미 있는 커밋을 남기고 메시지를 직관적으로 작성하며 내역을 관리하는 것은 아주 중요하다. 커밋 내역을 관리하기 위한 방법은 여러가지가 있다. 나는 보통 squash를 사용하여 의미 없는 커밋들을 합하고 rebase 하여 일렬로 커밋들을 정렬했다. merge 커밋이 남지 않기 때문에 깔끔하고 구현 순서를 의도에 따라 정렬할 수 있어 좋다고 생각했기 때문이다. 인턴쉽을 진행했던 기업에서는 reba.. 2022. 12. 22.