월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
context 해석은 어떻게 해야하는건가요?
concrete 는 구현체라고 해석을 해서 이해를했는데 context 는 문맥 이라는 한글뜻이 와닿지가 않습니다. 어떻게 이해를 해야할까요?
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
실제 데코레이터 패턴을 사용하게 될 때 동적인 특징과 관련해 질문 드립니다.
데코레이터 패턴에 대해 추가적으로 구글링 하던 와중 아래와 같은 구현 예시를 보게 되었습니다.3-1. 전방 슈팅이 기본인 슈팅게임에서 아이템 획득에 따라 측방/후방 슈팅이 자유롭게 추가/삭제 되어야 할 때.3-2. 커피 전문점에서 기본 메뉴에 휘핑, 카라멜 등 첨가물이 자유롭게 추가될 때 가격 정산.저기서 '자유롭게' 라고 한다면, '매번 사용자 요청에 따라 동적으로 어떤 부가적인 것을 추가하거나 삭제 하는 것'으로 저는 이해를 했는데요. 예시로 보여주신 코드에서는 동적으로 데코레이터를 변경하기 위해서 코드로 flag 값을 수정하거나 혹은 프로퍼티즈를 수정해야 하더라구요. 1) 만약 사용자 요청에 따라 동적으로 데코레이터를 구성해주고 싶다면, 사용자 요청으로 들어온 임의의 구분자에 따라서 아래처럼 계속 반복적으로 생성하는 방법밖에는 없을까요?? Beverage beverage1 = new DarkRoast(); //예로 요청에서 key가 ingredient이고 value가 M 인 값이 2개 있을 경우 beverage1 = new Mocha(beverage1); beverage1 = new Mocha(beverage1); // 예로 요청에서 key가 ingredient 이고 value가 W 인 값이 1개 있을 경우 beverage1 = new Whip(beverage1); System.out.println(beverage1.getDescription()+" cost : "+beverage1.cost()); 2 ) 또한 '동적으로 삭제' 라는 말도 있었는데 저기서 이미 맨 마지막에 Whip 이라는 객체가 생성되어서 Mocha를 대체 하였는데 삭제 = 즉, 이전 상태로 어떻게 동적으로 되돌릴 수 있을까요?? 생각보다 혼자 구성하기가 쉽지 않아서 도움 요청 드립니다...ㅠ
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
Decorator 설정 방법 질문드립니다.
안녕하세요. 기선님 강의를 보고 토이 프로젝트에(Java/Spring) decorator 패턴을 적용하다 궁금한 점이 있어서 질문드립니다. 먼저 제가 생각하는 로직은 매 요청마다 CommantService의 정책이 변경되지 않고, booting 시 properties 값에 따라 enable되는 decorator가 정해지는 방식으로 만들고자 합니다. === 질문 실제 서비스에서 decorator 패턴 적용시 CommentService를 언제 어떤식으로 초기화를 해야할지 모르겠습니다. CommontServiceFactory를 싱글톤 패턴으로 만들어두고 CommontService를 필요로 하는 곳에 CommontServiceFactory를 di시키면 될까요? 아님 다른 방법으로 진행해야 할까요?
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
예시로 보여주신 StringBuffer의 synchronized 키워드의 성능과 관련해 여쭤보고 싶습니다.
안녕하세요! 강의 정말 잘 듣고 있습니다. 예시로 잠시 언지해주신 StringBuffer의 성능 면에서 궁금한 점이 있어 질의 드립니다. StringBuffer도 StringBuilder 처럼 builder의 형태인데 synchronized 키워드가 붙어 동기화를 지원 한다고 말씀주셨습니다. synchronized 키워드가 메소드 단위로 붙으면 해당 메소드 단위로 lock이 걸린다고 싱글톤에서 배웠는데요. 그런데 스레드 마다 빌더를 생성한다고 하셨으니, 스레드들은 별개의 빌더 인스턴스를 사용하다고 하면 동기화로 인한 lock도 빌더 인스턴스 별로 걸릴 테니 사용자 요청이 물려서 의도하지 않은 데이터가 생길 가능성도 적지 않나요?? 왜 StringBuffer 에서 sync 키워드를 사용하는지 여쭤봐도 괜찮을까요?? 또한 각 인스턴스 별로 lock이 걸릴테니 사용자가 몰리는 것과 상관이 없어서 성능에 크게 영향이 가지 않을 것이라고 생각이 되는데 이게 맞을까요??
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
FileInputStream 패턴
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 예시로 들어주신 FileInputStream이 BufferedReader까지 변하는 코드를 봤습니다. 혹 코드 변경 없이 기능을 추가하는 데코레이터 패턴이라고 보여지는데, 데코레이터 패턴으로도 볼 수 있을까요?
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
멀티 스레드 환경과 관련하여 DefaultTourBuilder에 대해 문의 드립니다.
코드 예시로 보여주신 DefaultTourBuilder를 보면 멤버 변수로 title, nights, days, startDate 등의 값을 가지고 있는데요. 만약 멀티 스레드 환경이라고 생각했을 때 사용자의 요청이 물려 들어왔을 경우, 사용자가 의도하지 않은 값을 출력하게 될 수도 있겠다고 생각 했습니다. ( getPlan() 을 하기 전에 같은 Builder로 다른 사용자가 멤버 변수를 바꾼 경우 ) 그래서 이를 방지하기 위해서는 사용자 요청마다 Builder를 new 해서 별도의 인스턴스로 생성하는 것 밖에 없을 것 같은데 Builder가 인스턴스를 만들어 주는 역할을 하다보니 Builder 자체를 여러개 만든다는게 좀 의아하게 와닿습니다.. 실제 현장에서 builder 패턴을 사용할 때는 Director를 사용하신 것과 같이 설정이 정형화된 인스턴스를 만드는 경우에만 주로 사용하는 편인가요??? 혹시 Builder는 하나만 만드는 채로 멀티 스레드 환경에 대비해 코드를 작성하는 방법이 있을까요???
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
SRP의 관점
SRP를 지켰냐, 안지켰냐의 관점은 method 레벨인가요 아니면 class 레벨인가요?
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
Cloneable 인터페이스 재정의
Java에서 기본제공하는 clone을 쓸때는 Cloneable 재정의가 의미가 있겠지만 사용자가 Prototype을 직접 clone()메소드에 정의하면 재정의 하는게 아닌 따로 public 메소드로 만들어도 괜찮나요?? 또한 왜 equals()를 재정의 해줘야 하나요? 보니까 기본제공되는 Object의 equals()함수를 사용시 false가 반환되는데 둘의 직접적인 관계를 모르겠습니다.
- 해결됨코딩으로 학습하는 GoF의 디자인 패턴
팩토리 메소드 패턴이 커맨드 패턴을 이용해서 만든 패턴이라고 볼 수 있을까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 기선님, 항상 강의 잘듣고 있습니다. 다름이 아니고 커맨드 패턴 코드를 보다보니 팩토리 메소드 패턴에서 봤던 코드와 유사한 느낌이 들었는데 혹시 팩토리 메소드 패턴이 커맨드 패턴을 사용해서 만들었다고 볼 수 있을까요??
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
ioc 컨테이너이의 singleton scope를 무너뜨리는 방법
(IoC 컨테이너는 ApplicationContext를 사용해서 bean을 관리하는걸로 아는데 그럼 강의해서 설명해주신 ApplicationContext를 이용한 spring에서 사용되는 예제가 같다고 생각해서 IoC 컨테이너로 워딩 하였습니다.) IoC 컨테이너의 기본 scope가 singleton scope인걸 학습했었는데 IoC 컨테이너를 사용하더라도 다른 hash 값을 가진 인스턴스를 뽑아낼 수 있다고 언급하셨는데 어떻게 다른 인스턴스를 뽑아내는건가요?
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
Decorator pattern 질문 입니다
제가 이 부분에서 생성자 주입을 기준으로 생각해서 왜 마지막에 주입된건 Trim 인데 SpamFilter가 작동하지라고 생각 했었는데주입이 아니라 Trim이 SpamFilter를 감싼형태로 동작해서 책임이 추가되었고 감싸진 순서대로 추가된 책임(메서드)이 적용이 된게 맞는 건지 궁금해서 질문해봅니다
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
테마, 폰트 어느것으로 사용하시나요?
테마와 폰트가 눈에 잘 띄고 예뻐요 ! 정보좀요.. ㅋㅋ
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
Factory Method 질문 입니다.
제가 제대로 이해한 것이 맞는지 궁금해서 질문 올려봅니다. 강의에 기술된 코드를 기반으로 보았을 때 ShipFactory = Product, orderShip = Creator, createShip = factory method, WhiteShipFactory = ConcreteProduct, WhiteShip = ConcreteCreator로 볼 수 있는 건가요??
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
private/ default
안녕하세요 강의 너무 잘보고 있습니다 선생님. 다름이 아니라 interface - private/default 에 대해 궁금 한점이 있는데 private 는 하위클래스에서 사용을 못하는걸로 알고있는데 그렇다면 공통으로 사용될 값들을 그냥 다 default로 선언해주면 좀더 편하지 않나요..? 이것에 대한 제 생각은 private 를 쓰신이유가 좀더 캡슐화에 가깝게 만들려고 사용하는것같은데 이 이유가 혹시 정답일까요..?
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
팩토리 메소드(FacotryMethod) 패턴 PPT 예제의 Product interface 에 대한 질문
안녕하세요. 백기선님, GoF 디자인 패턴 강의 정말 잘듣고있습니다!강의를 들으면서 궁금한점이 있어서 질문 드리고 싶습니다. 팩토리 메소드 패턴을 소개하는 PPT 에서 Product 는 interface 라 정의가 되어있는데,팩토리 메소드 패턴을 코드로 나타내는 예제에서 Product 의 역할을 하는것이 Ship 클래스 인것같은데,Ship 은 인터페이스가 아닌 클래스입니다.제가 이해를 잘못한 것 일까요??
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
Concrete 빌더에 관한 질문
안녕하세요 강의 잘 듣고 있습니다. 다름이 아니라, 본 강의에선 DefaultTourBuilder 구현체로 빌더 패턴 사용 예시를 보여주셨습니다. 1. 첫 번째 질문으로, 칸쿤 여행의 경우 TourPlan의 모든 멤버 변수에 어떤 값을 할당해야 한다고 가정했을 때, 강의에선 getPlan에서 모든 변수가 제대로 초기화됐는지 체크하는 과정이 생략된 것 같은데 맞을까요? 2. DefaultTourBuilder가 칸쿤 여행과 같이 모든 멤버 변수를 초기화했을 때만 인스턴스를 만들 수 있도록 getPlan에 제약을 걸어놨다면, 본 강의에서 예시로 들었던 당일치기 롱비치 여행은 DefaultTourBuilder로 만들 수 없다고 생각합니다. 여러 방법이 존재하겠지만 강의에서 말씀하신 내용을 되짚어보면 당일치기 여행 인스턴스를 제공하는 ShortTourBuilder를 만드는 게 합리적이란 생각이 듭니다. 강사님의 의견은 어떠신가요? 감사합니다.
- 해결됨코딩으로 학습하는 GoF의 디자인 패턴
Flyweight Pattern 이론 강의 자료중에 오타인거 같습니다.
Flyweight Pattern 이론 강의 자료 중에 내적인 요소, 외적인 요소의 영어 표현으로 [Intrinsit], [extrinsit] 라는 표현이 있는데 해당 표현들은 [Intrinsic], [extrinsic] 표현인거 같습니다. 혹시 오타이신건가요? 항상 좋은 강의 감사드립니다.
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
ModelMapper의 리플렉션에 관해 문의입니다.
기선님 강의 잘 보고 있습니다. [프로토타입 패턴 2부 - 패턴 적용하기] ModelMapper를 사용하다가 리플렉션에 관한 문의인데요. 제가 리플렉션에 대해 깊게 알지 못해 문의를 드리는거 일 수 있어서 양해 부탁드리겠습니다. ( _ _) ModelMapper에서 리플렉션 진행 할 때 필드 네이밍이 일치하지 않아도 가져오는게 조금 신기해서 문의드립니다. GithubRepository githubRepository = new GithubRepository();githubRepository.setUser("dnom");githubRepository.setName("live-study");GithubIssue githubIssue = new GithubIssue(githubRepository);githubIssue.setId(1);githubIssue.setTitle("Issue : JVM Memory 부족");ModelMapper modelMapper = new ModelMapper();GithubIssueData githubIssueData = modelMapper.map(githubIssue, GithubIssueData.class); public class GithubIssueData { private int id; private String title; private String repositoryUser; private String repositoryName;... 생략} public class GithubIssue implements Cloneable{ private int id; private String title; private GithubRepository githubRepository;... 생략} public class GithubRepository { private String User; private String Name;... 생략} GithubIssue에서 githubRepository로 필드명을 지어두었음에도 불구하고 복사한 GithubIssueData의 repositoryUser, repositoryName 필드에 어떻게 매핑되어 값이 들어가게 되는 걸까요? GithubIssueData의 필드명이 githubRepositoryUser, githubRepositoryName으로 정확히 지어야만 들어갈걸로 예상했거든요. ModelMapper의 map 메소드를 파헤쳐보다가 모르겠어서 문의드립니다. ㅠ - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
UML 툴이 어떤 것인지 궁금합니다!!
안녕하세요 ㅎㅎ 혹시 UML 툴 어디거 사용하시는지 알 수 있을까요?? 제가 기존에 사용하던 것 보다 디자인어 더 깔끔하군요!
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
강의에서는 잘 되는데...
예제 코드를 활용해서 공부를 하던 중 잘 모르겟는게 보이는데요... 그건 바로 코드는 눈을 씻고 찾아봐도 동일한데 정렬이 절대 안되는 겁니다. 무슨말이냐면... _01_before의 Client.java에서 코드는 물론 똑같이 작성했고요... package me.whiteship.designpatterns._03_behavioral_patterns._16_iterator._01_before;import java.util.Collections;import java.util.Iterator;import java.util.List;public class Client { public static void main(String[] args) { Board board = new Board(); board.addPost("디자인 패턴 게임"); board.addPost("선생님, 저랑 디자인 패턴 하나 학습하시겠습니까?"); board.addPost("지금 이 자리에 계신 여러분들은 모두 디자인 패턴을 학습하고 계신 분들입니다."); // TODO 들어간 순서대로 순회하기 List<Post> posts = board.getPosts(); for (int i = 0 ; i < posts.size() ; i++) { Post post = posts.get(i); System.out.println(post.getTitle()); } // TODO 가장 최신 글 먼저 순회하기 Collections.sort(posts, (p1, p2) -> p2.getCreatedDateTime().compareTo(p1.getCreatedDateTime())); for (int i = 0 ; i < posts.size() ; i++) { Post post = posts.get(i); System.out.println(post.getTitle()); } }} 실행하면 분명 Collection.sort로 정렬을 했는데 결과는 다음과 같습니다. -+---------- 디자인 패턴 게임 선생님, 저랑 디자인 패턴 하나 학습하시겠습니까? 지금 이 자리에 계신 여러분들은 모두 디자인 패턴을 학습하고 계신 분들입니다. 디자인 패턴 게임 선생님, 저랑 디자인 패턴 하나 학습하시겠습니까? 지금 이 자리에 계신 여러분들은- 모두 디자인 패턴을 학습하고 계신 분들입니다. ------------------- 당황스러운 것은 제가 이것을 같이 따라서 작성해보고 실행을 했는데 이러한 결과가 나와서 git에 올려두신 파일을 돌려봣는데 다음과 같은 결과가 나온 것입니다. 제가 무엇을 놓치고 있는 걸까요?