개발(89)
-
[디자인패턴] 커맨드 패턴(Command Pattern)
Head First Design Patterns를 읽고 학습한 내용을 기록합니다. 0. 커맨드 패턴 정의 아래는 책에 쓰여있는 커맨드 패턴의 정의. 커맨드 패턴을 이용하면 요구 사항을 객체로 캡슐화 할 수 있으며, 매개변수를 써서 여러 가지 다른 요구 사항을 집어넣을 수도 있습니다. 또한 요청 내역을 큐에 저장하거나 로그로 기록할 수도 있으며, 작업취소 기능도 지원 가능합니다. 커맨드 패턴은 결과를 위한 계산과정의 각 부분들을 캡슐화 시킬 수 있다. 계산의 결과를 원하는 클라이언트는 사실 과정은 궁금하지 않고 결과만 올바르게 출력되면 된다. 이런 Needs에 의해 커맨드 패턴은 계산과정을 캡슐화하고, 클라이언트는 단순히 계산을 해달라는 명령만 수행함으로써 원하는 결과를 얻어낼 수 있다. 실습을 하면서 조..
2021.03.07 -
[Design Pattern] 싱글턴 패턴(Singleton Pattern)
Head First Design Patterns를 읽고 학습한 내용을 작성합니다. 0. 싱글턴 패턴의 정의와 필요성 싱글턴 패턴은 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴입니다. 사실 얼핏보기에는 이게 패턴까지 될필요가 있나싶다. 전역변수 하나면 쉽게 해결될 문제인것같다. 하지만 인스턴스를 전역변수로 셋팅하면 하면 해당 파일이나 화면이 로딩 될때 항상 생성된다. 전혀 사용되지 않는 경우에도 말이다. 거기다 해당 인스턴스가 상당히 많은 양의 리소스를 소모한다면 사용하지도 않는데 성능까지 저하시킬수도 있다. 또한, 소스코드 어딘가에 인스턴스를 추가로 생성하는 코드가 있다면 이를 방지할 방법이 없다. 1. 고전적인 싱글턴 패턴 1 2 3 4 5 6..
2021.03.05 -
[Design Pattern] 팩토리 패턴(Factory Pattern)
Head First Design Patterns를 읽고 학습한 내용을 기록합니다. 0.개요 (손이 좀더 가더라도)조건문을 클래스로 뽑아내서 관리할때가 더 좋은 경우가 있다. 조건문의 내용이 객체 인스턴스를 만드는 작업이라면 더욱더 그렇다. 객체의 인스턴스를 만드는 작업이 항상 공개되어 있어야하는것은 아니며, 오히려 공개를 했다간 클래스간 결합에 관련된 문제가 발생할 수 있기 때문이다. 이전 패턴을 학습할때 Duck이라는 인터페이스를 써서 각종 오리 인스턴스 생성에 유연하게 대처했다. 1 Duck duck = new MallardDuck(); cs 하지만 아래처럼 일련의 구상 클래스(각종 오리)들이 있을때는 부득이하게 조건문을 통해 인스턴스화를 수행할 수 밖에 없다. [ 이 코드만 보면 크게 문제 될건 없..
2021.03.02 -
Git Bash를 이용한 git 기초 학습( branch와 merge )
몇가지 상황을 통해 로컬 저장소 생성, Commit, Branch 생성, Checkout(브랜치 이동), Merge, Merge 시 발생한 Conflict 해소에 대해서 정리합니다. Git을 사용하기 위한 툴은 git Bash를 사용했습니다. 작업 폴더명은 practice이며 (당연히) 텅텅 비어있다. 이제 이 practice 폴더를 로컬 저장소로 사용하려고 한다. git init 명령을 실행한다. git init 명령어를 실행하고 폴더를 보면 .git이라는 폴더가 생긴걸 알 수 있다. .init은 로컬 저장소에 대한 각종 정보를 담고있다. ( 커밋 history , HEAD 포인터의 위치 등 ) 경로 옆에 (master)가 생겼다. 이는 현재 내가 작업중인(HEAD가 가르키는) 브랜치가 master 브..
2021.02.27 -
[Design Pattern] 데코레이터 패턴(Decorator Pattern)
Head First Design Patterns를 읽고 학습한 내용을 기록합니다. 정의 데코레이터 패턴에서는 객체에 추가적인 요건을 동적으로 첨가한다. 데코레이터는 서브클래스를 만드는것을 통해서 기능을 유연하게 확장할 수 있는 방법을 제공한다. 예제 커피 주문 프로그램을 만든다고 생각해보자. 당연히 커피의 종류가 정의 되어야 할것이다. 일반적으로 아래처럼 만들수 있을것이다. Beverage는 추상클래스이며 Espresso , DarkRoast등 서브클래스가 확장해서 사용하게 된다. 위 구조에서 커피에 두유와 모카 토핑을 하려면 어떻게 해야할까? 첫번째 방법으로는 아래처럼 커피와 토핑이 조합가능한 모든 경우를 서브 클래스로 정의하는것이다. 디카페인 커피(Decaf)에 두유,모카를 토핑하는 경우를 정의했는데..
2021.02.05 -
[Design Pattern] 옵저버 패턴(Observer Pattern)
Head First Design Patterns를 읽고 학습한 내용을 기록합니다. 정의 옵저버 패턴에서는 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 정의한다. 특정 객체에 변경이 발생했을때 그 객체에 의존하는 모든 객체에게 변경 사실을 알려 줄 수 있는 디자인 패턴이다. 책에선 신문 발행-구독을 예로 설명하고 있다. 여기서 정보를 구독하는 구독자를 옵저버(Observer)라고 부른다. 옵저버 패턴에서 발행자와 구독자는 느슨한 결합으로 연결되어 있는데 이 뜻은 두 객체가 상호작용을 하긴 하지만 서로가 내부적으로 어떤일을 하는지는 관심이 없다는 걸 의미한다. 발행자는 데이터를 제공만 할 뿐이지 구독자들이 ..
2021.02.01