동적으로 책임 추가가 필요할 때 데코레이터 패턴을 사용할 수 있다. 기본 설계 Component : 실질적인 인스턴스를 컨트롤하는 역할 ConcreteComponent : Component의 실질적인 인스턴스 부분이며, 책임의 구현 부분 Decorator : Component와 Concrete Decorator를 동일 시 하도록 해주는 역할 ConcnreteDecorator : 실질적인 장식 인스턴스 및 정의이며 추가된 책임의 구현 부분 실습 요구 사항 커피 제조 방법 에스프레소 : 커피의 기본 아메리카노 : 에스프레소 + 물 카페라떼 : 에스프레소 + 스팀밀크 헤이즐넛 : 아메리카노 + 헤이즐넛 시럽 카페모카 : 카페라떼 + 초콜릿 캬라멜 마끼야또 : 카페라떼 + 카라멜 시럽 IBeverage : 커피..
컴포지트 패턴을 통해 트리 구조를 구현할 수 있다. 컴포지트란 하나 이상의 유사한 객체를 구성으로 설계된 객체로 모두 유사한 기능을 나타낸다. 이를 통해 객체 그룹을 조작하는 것처럼 단일 객체를 조작할 수 있다. 컴포지트 패턴이란? 컴포지트 패턴은 클라이언트가 복합 객체나 단일 객체를 동일하게 취급하는 것을 목적으로 한다. 여기서 컴포지트의 의도는 트리 구조로 작성하여 전체-부분 관계를 표현하는 것이다. 컴포지트 패턴은 언제 사용하는가? 복합 객체와 단일 객체의 처리 방법이 다르지 않을 경우, 전체-부분 관계로 정의할 수 있다. 기본 설계 Component : 모든 표현할 요소들의 추상적인 인터페이스이다. Leaf : Component 인터페이스를 구현하고 구현체 클래스를 나타낸다. (단일 객체에 해당된..
어댑터 패턴과 브릿지 패턴을 연결하여 이해한다. 기능 부분과 구현 부분을 분리하는 것이 이번 패턴의 키워드이다. 브릿지 패턴은 잘 사용되지 않고, 어댑터 패턴과 매우 비슷하다는 것을 먼저 알고 들어가자. 먼저 브릿지 패턴을 사용하지 않은 소스를 확인해보자 요구사항은 입력한 단어를 모스부호 형태로 출력하는 것이다. public class MorseCode { public void dot() { System.out.print("·"); } public void dash() { System.out.print("-"); } public void space() { System.out.print(" "); } } public class PrintMorseCode extends MorseCode { //blue pu..
추상 팩토리 패턴은 어떻게 보면, 팩토리 메소드 패턴을 좀 더 캡슐화한 방식이라고 볼 수 있다. 요구 사항 컴퓨터를 생산하는 공장이 있을 때, 마우스, 키보드, 모니터의 제조사로 Samsung과 LG가 있다고 가정해보자. 그럼 컴퓨터를 생산할 때의 부품들은 모두 Samsung이나 LG로 만들어질 것이다. 그럼 먼저, 팩토리 메소드 패턴을 사용하여 컴퓨터 생산하는 로직을 구현해보자. 위 설계를 발판으로 소스를 구현해보자. 키보드 관련 클래스 public interface Keyboard { } public class LGKeyboard implements Keyboard { public LGKeyboard(){ System.out.println("LG 키보드 생성"); } } public class Sam..
TCP는 3-way handshake 과정을 통해 연결을 설정하고 4-way handshake를 통해 해제한다. 3-way Handshake란? TCP 3-way Handshake는 TCP/IP 프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다. 3-way Handshake의 역할은, 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장하는 것이다. 3-way Handshake의 과정을 살펴보자. 클라이언트는 서버에 접속을 요청하는 SYN 패킷을 보낸다. 이 때 클라이언트는 SYN을 보내고 SYN/ACK 응답을 기다리는 SYN_SENT 상태가 된다. 서버는 SYN 요청을 받고 클라이언트에게 요청을..
네트워크 계층들 중 전송 계층에서 사용하는 프로토콜에 대해서 알아보자. 전송계층은 송신자와 수신자를 연결하는 통신서비스를 제공하는 계층으로서 쉽게 말하면 데이터의 전달을 담당하는 것이다. 그리고 데이터를 보내기 위해 사용하는 프로토콜이 있는데, 해당 프로토콜이 바로 UDP와 TCP이다. TCP와 UDP : 데이터를 전송하기 위해 사용하는 프로토콜 TCP 인터넷 상에서 데이터를 메시지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜 일반적으로 TCP와 IP를 함께 사용하는데, IP가 데이터의 배달을 처리한다면 TCP는 패킷을 추적 및 관리하는 역할을 한다. 패킷 : 인터넷 내에서 데이터를 보내기 위한 경로배정(라우팅)을 효율적으로 하기 위해 데이터를 여러 개의 조각들로 나누어 전송하는데, 이 조각을 패..
인증서의 역할 클라이언트가 접속한 서버가 신뢰할 수 있는 서버임을 보장한다. SSL 통신에 사용할 공개키를 클라이언트에게 제공한다. 추 후 클라이언트는 공개키를 통해 암호화 및 복호화를 진행하는 것이다. CA 인증서의 역할은 클라이언트가 접속한 서버가 클라이언트가 의도한 서버가 맞는지 보장하는 역할을 한다. 이런 역할을 하는 민간 기업들이 있는데, 이런 기업들을 CA(Certificate authority) 혹은 root Certificate라고 부른다. 인증서의 핵심은 클라이언트가 접속한 서버가 신뢰할 수 있는 사이트인지를 알려주는 것이다. 이것을 보증해주는 기관(CA)들이 존재하는 것이다. SSL을 통해서 암호화된 통신을 제공하려는 서비스는 CA를 통해서 인증서를 구입해야한다. CA는 서비스의 신뢰성..
총 두 가지 방식을 보면서 빌더 패턴을 공부해보자. 1. 빌더 패턴(1) : 객체의 구현을 서브 클래스에게 넘겨줘 인스턴스를 생성하는 패턴 2. 빌더 패턴(2) : 다른 객체의 도움으로 인스턴스를 생성하는 패턴(체인 방식) 빌더 패턴 (1) 복잡한 단계가 필요한 인스턴스 생성을 빌더 패턴을 통해서 구현가능하다. 복잡한 단계를 거쳐야 생성되는 객체의 구현을 서브 클래스에게 넘겨주는 패턴 기본 설계 예제 설계 소스 확인 //Factory public class ComputerFactory { private BluePrint print; public void setBlueprint(BluePrint blueprint) { this.print = blueprint; } public void make() { pr..
- Total
- Today
- Yesterday
- ifPresent
- 생성자
- 연관관계
- effectivejava
- 이펙티브자바
- 자바8
- 김영한
- mustache
- 빌더 패턴
- flatMap
- junit
- try catch finally
- @Lazy
- 이펙티브 자바
- 팩토리 메소드 패턴
- java
- jdk버전
- try with resources
- 빈 순환 참조
- Spring
- Effective Java
- 스프링부트
- package-private
- 복사 팩토리
- java8
- springboot
- 점층적 생성 패턴
- JPA
- 인프런
- 정적팩터리메서드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |