월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
Spring Security 의 ProviderManager (AuthenticationManager) 도 옵저버 패턴을 사용하고 있다고 볼 수 있을까요?
안녕하세요 강사님! 우선 양질의 강의 잘 듣고 있다는 말씀 드리고 싶습니다. Spring Security 에서 AuthenticationProvider 를 찾아서 인증을 위임하는 역할을 수행하는 ProviderManger 도 옵저버 패턴을 사용하고있다고 볼 수 있을까요? ProviderManager (AuthenticationManager) 에서 AuthenticationProvider 들을 가져온후 이들을 순회하며 인증위임을 시키는 코드입니다단순히 supports() 를 통해 인증을 위임시킬 AuthenticationProvider 들을 골라내는 것뿐, 이것도 옵저버 패턴이 적용된 예인지 알고 싶습니다.
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
싱글톤 패턴을 깨트리는 방법
싱글톤 패턴을 깨트리는 방법으로 Reflection, 직렬화/역직렬화 두 가지 방법을 설명해주셨고 굉장히 흥미롭게 들었습니다.다만 들으면서 싱글톤을 깨트리는 방법이 존재한다고 하더라도 저걸 고려하면서 코드를 짜야할까?라는 생각이 들었습니다.저는 아직 취준생이라 그런지 리플렉션이나, 직렬화/역직렬화 방식으로 객체를 생성해본 적이 없어서 이런 생각을 하는 거 같습니다. 실무에서 리플렉션을 이용해서 객체를 생성하는 경우가 종종 발생하나요? 굳이 왜 리플렉션을 이용해 객체를 생성하는 건지 어떨 때, 리플렉션을 사용해서 객체를 생성하는지 예시가 궁금합니다. 스프링을 쓰면서 직렬화/역직렬화가 이루어지는 것은 아래 정도의 케이스밖에 생각나지 않아요. 1. Client <-> Server 데이터를 주고받을 때, (dto)Server <-> DB 데이터를 주고받을 때, (Entity)하지만 DTO나 Entity를 싱글톤으로 만들어줄 이유가 없으므로 직렬화/역직렬화 때문에 싱글톤이 깨지는 경우가 발생할까가 의문입니다. <질문 정리>리플렉션이나 이용해서 객체를 생성하는 경우가 실무에서 종종 사용되는 방법 인가요?직렬화/역직렬화가 이루어지는 클래스는 싱글톤으로 설정할만한 클래스가 아닐 텐데 직렬화/역직렬화 때문에 싱글톤이 깨지는 경우가 실무에서 종종 발생하는 문제인가요?1~2번 질문에 대한 답이 만약 저렇게 객체를 생성하는 경우는 없다 라면 싱글톤을 구현할 때 저런 것을 고려하며 짤 이유가 있나요?
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
코드에 약간 오타가 있는거 같습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요. 백기선님수업을 잘 듣고 있습니다. 제 생각에 간단한(?) 오타같은게 있는거 같아서 제보드립니다. 혹시 오타가 아니라면 제가 잘못 이해한 부분을 말씀 부탁드리겠습니다.옵저버 패턴 3부 - 1:56초쯤 unregister 를 subject가 "디자인패턴"인 것에 대해서 user2 를 해지 해주었는데요.이미 user 2는 오징어게임에만 등록중입니다. 그래서 결과값도 user2 가 보낸 "옵저버 패턴 장, 단점 보는 중" 이 user1한테 가서 출력된거 같습니다.아마 user1을 해지하거나 user2를 오징어게임에 대해서 해지하려고 하지 않았나 싶습니다..
- 해결됨코딩으로 학습하는 GoF의 디자인 패턴
싱글톤 (Singleton) 패턴 구현 방법 3 - 2번 퀴즈에 대해 질문이 있습니다.
안녕하세요 백기선님, 강의 들으면서 많이 배우고 있습니다.싱글톤 (Singleton) 패턴 구현 방법 3- 2. 만약에 생성자에서 checked 예외를 던진다면 이 코드를 어떻게 변경해야 할까요?위 퀴즈에 대해 질문이 하나 있습니다.static 필드의 초기화 혹은 static block에서 exception이 발생하면 ExceptionInInitializerError가 발생하는 것으로 알고 있습니다.인터넷에서 많은 사람들이 위 퀴즈에 대해 '생성자에서, 혹은 static block에서 try/catch하여 checked exception을 RuntimeException으로 변환해준다' 라고 설명을 하는데, static eager initialization를 사용하는 구조에서는 unckecked, checked 등 exception의 종류와 관계 없이 모두 ExceptionInInitializerError 이 발생하지 않나요?그리고 static eager initialization 과정에서 exception이 발생하여 싱글턴 인스턴스가 null이 되어버리는 경우, Spring에서의 BeanCreationException과 같이 서버가 뜨면 안되는 상황이 아닐까 생각이 됩니다.제가 잘못 파악하고 있거나 놓친 부분이 있다면 가르침 부탁드립니다.
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
안녕하세요, 강의 순서 질문드립니다.
안녕하세요.헤드퍼스트 디자인 패턴 책을 읽으면서 백기선님 강의를 같이 들으려고 하는데요!혹시 강의 순서대로 수강하는걸 권장하시는지 상관없는지 질문드립니다.
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
스프링 시큐리티 WebSecurityConfigurerAdapter deprecated 대체 코드
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 책임 연쇄 패턴에서 스프링 시큐리티 예제코드 중에 WebSecurityConfigurerAdapter를 사용하는 코드가 있는데, 최신 버전을 사용하는 경우에 deprecated되어 사용하지 못하는 듯 합니다. < 대체코드 >@Configuration @EnableWebSecurity public class SecurityConfig { /** * WebSecurityConfigurerAdapter가 Spring Security 5.7.0-M2부터 deprecated 됨. * component-based security configuration으로의 사용자 전환 격려 위함. * 따라서 아래와 같이 bean으로 등록하여 사용. */ @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth -> auth.anyRequest().permitAll()); return http.build(); } } 이 경우, 기존 코드를 위의 코드로 작성하시면 됩니다. : )
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
팩토리메소드 = 추상팩토리?
이 코드는 팩토리 메소드 패턴이고,public interface ShipFactory { Ship createShip(); } 이 코드는 추상 팩토리 패턴입니다.public interface ShipPartsFactory { Anchor createAnchor(); Wheel createWheel(); } 팩토리 메소드 패턴은 product와 createor간의 의존성을 낮추는것을 목적으로, 서브 클래스인 concreator에게 의존성을 위임합니다. 추상 팩토리 패턴은 여러 객체의 생성이 있을때 여러 객체의 의존성을 낮추기 위해, 마찬가지로 서브 클래스인 concreator에게 의존성을 위임합니다그렇다면 사실상 차이는 생성하는 객체의 수 뿐인데, 왜 다른 이름으로 만들었는지 이해가 안가네요..
- 해결됨코딩으로 학습하는 GoF의 디자인 패턴
중재자 패턴에 관하여~
안녕하세요중재자 패턴을 공부하던 중에 궁금한 점이 있어서 질문하게되었습니다.1. 현재 강의에서는ConcreteMediator(FrontDesk)와 ColleagueA(Guest) , ColleagueB(CleaningService) ColleagueC(Restaurant) ... 이렇게 구성되는걸로 파악되는데현재 ConcreteMediator에 대한 인터페이스(Mediator)와 그 인터페이스를 참조하는 Colleague가 만들어 있지 않은데 굳이 만들지 않아도 괜찮은건가여?2.중재자 패턴을 ConcreteMediator에 모든 의존성을 다 가지게 만들어서 사용한다 라고 이해하면 되나요??
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
undo 메소드 작업중에서
예를 들어 LightOffCommand 클래스에서 Light를 가지고 있는데 undo() {light.on();}이렇게 사용하지 않는건 단일책임 원칙때문에 그런건가요?
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
Streams builder 타입 추론이 불가능한 이유
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요.강의 내용 약 2분 즈음 말씀해주신 Stream builder 사용 시 다이아몬드 연산자로 타입을 지정해주어야 하는 이유에 대해 제가 이해하고 있는 것이 맞는지.. 검색으로 시원한 해답을 찾는데 어려움이 있어 질문 드립니다.Stream.Builder<String> stringStreamBuilder = Stream.builder(); Stream<String> strings = stringStreamBuilder.add("string1").add("string2").build();Stream<String> strings = Stream.builder().add("string1").add("string2").build();첫 번째 코드가 두 번째 코드로 변경되면 에러가 발생하는 이유는, Stream.builder() 메소드가 실행되면 내부적으로 Stream.Builder 의 구현체인 StreamBuilderImpl 클래스가 new 연산자를 통해 생성된 후 반환됩니다. 제네릭에서 타입을 지정하지 않은 경우는 일반적으로 Object 타입으로 간주하지만 new 연산자를 통해 먼저 반환을 받는 첫번째 코드에서는 String 타입으로 타입 추론이 이루어집니다. 그렇지 않은 두 번째 코드에서는 Object 타입을 가지고 있는 StreamBuilderImpl 클래스에 String 타입의 메소드를 파라미터로 넘겨 타입 오류가 발생하는 것으로 이해하고 있습니다. 혹시 제가 이해하고 있는 것이 맞는지.. 혹시 틀린 부분이 있다면 지적 부탁드립니다. 감사합니다. 🥲
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
익명클래스로 객체 생성시 의문점
강의에서 사용하는코드(위키피디아에 있다던 예제)입니다.PostfixExpression.minus() 메소드는객체(참조변수를 myPostfix 라고 하겠음)를 생성하게 되고,이후에 myPostfix.interpret() 메소드를 호출할수 있고, interpret() 메소드가 호출될때 left와 right에접근 하게 됩니다.이러한과정에서, left와 right의 파라미터가 넘어와서MyPostfix 라는 객체가 생성되는 시점과, myPostfix.interpret()라는 메소드가 호출되는 시점은 다른데도 myPostfix.intepret()가 호출될때도 left, right를 사용한다는것은, left,right를 내부적으로 저장하고 있다는 것같습니다. (일반적으로 객체가 내부적으로 필드에 값을 갖고있는것처럼) MyPostfix라는 객체가 생성될때 그 객체 안에서 left,right를 관리하고 있는것인지..? 설명 부탁드립니다.
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
mediator패턴에서 객체끼리 순환참조는 어떻게 해결해야할까요
좋은 강의 감사드립니다 강사님.중재자와 각 서비스들이 서로 디펜던시가 있는데, 객체를 어떻게 오케스트레이션 해야할지 힌트를 좀 얻을 수 있을까요. 강의에도 패턴 적용 후 실행클래스 사례가 없어서, 프록시를 사용해야하는건가 싶긴한데 좀 더 깔끔한 방법이 있을까 궁금합니다.
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
객체간에 this를 넘기는 부분에 관련해 질문이 있습니다..
지금까지 코딩해 올 때, 객체에게 this를 직접 넘기는 케이스를 지양하고자 하였는데요, 왜냐하면 객체간의 불필요한 의존성을 만들고, 잘못햇다간 circular dependency를 만들고, 구조를 파악하기 어렵게 만든다고 느꼈기 때문입니다. 중재자 패턴, 상태 패턴 등을 포함한 일부 패턴들에는 생성자 혹은 메서드 등에 this를 직접 넘기는 경우를 예시로 보여주셨는데, 단순하게 primitive 값 혹은 값 객체를 넘기면 해결될 의존성이 객체가 다른 객체로, 그리고 또 다른 객체로 이동하여 더더욱 파악이 어려워 질 수도 있겠다고 느꼈습니다.생판 관계 없는 객체가 다른 객체의 속성을 변경하거나, 접근하는 등 디미터 법칙을 어기기 쉬워질 수 있겠다는 생각도 들구요.(CleaningService는 restaurant만 알면 되고, 타월을 restaurant에게만 넘겨주면 되는데, this를 넘기게 될 시 CleaningService가 guest가 누구인지까지 알아야 된다는 점에서 그렇게 느꼈습니다.) 개인적으로 이러한 이유로 안티패턴이 될 수도 있다고 생각하는데, 그렇다고 말할 수 있는 것인지 궁금합니다.
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
전략 패턴과 상태 패턴에 관련해서 질문이 있습니다.
두 패턴 전부 공부하고 보니까 구조가 굉장히 비슷하다고 느껴졌습니다. 전략 패턴도 결국 해당 Speed 인터페이스가 어떤 서브클래스를 인스턴스로 가지고 있느냐에 따라 행동이 달라지는 모습이어서 상태 패턴과 굉장히 유사하다고 느꼈는데, 혹시 전략 패턴과 상태 패턴의 확실한 차이점이 어떤 것인지 알 수 있을까요??
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
플라이웨이트 패턴 3부에서 HashMap 동시성 질문입니다.
패턴에 대한 주제에서 살짝 벗어난 질문이긴 합니다. 캐쉬 역할을 하는 맵을 HashMap으로 선언하였는데 Thread Safe 하게 만드려면 ConcurrentHashMap 으로 바꾸어야 하는게 맞는지 여쭤봅니다.
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
enum 이 이른 초기화 방법이 아니라는 것은,
마치 전역변수처럼 처음부터 enum 인스턴스를 생성해서 들고 있다는 의미로 이해하면 될까요?
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
해당 코드가 C# 에선 접근 관련 컴파일 에러가 뜹니다.
안녕하세요 :) Java 보단 C# 이 편한 수강생입니다. C# 으로 강의 코드를 타이핑 하고 있는데요, 같은 코드인데 C# 에선 접근 제한 에러가 뜨더라구요! 그래서 instance 를 public/internal 로 바꿔야 했는데 C# 과 Java 의 차이에서 비롯된 것일까요? 어떤 차이에서 비롯된 것인지 궁금합니다!
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
설계관련 궁금증이 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님 이전강의에서 어떤식으로 구현할 지 간단하게 설명해준 내용을 듣고 이번 강의를 듣기전에 먼저 구현을 해본 뒤 영상을 시청한 후 차이점이 생겨서 질문 드립니다.. 저는 클라이언트가 디바이스의 존재를 몰라도 사용할 수 있도록 Shape 인터페이스에 void printToPhone();void printToWatch(); 두 메서드를 생성한 뒤 각 도형 자식클래스에 @Overridepublic void printToPhone() { device = new Phone(); device.printTo(this);}@Overridepublic void printToWatch() { device = new Watch(); device.printTo(this);}이런식으로 메서드 내부에서 디바이스를 생성하여 처리하였습니다.이후 클라이언트에서 Shape rectangle = new Rectangle();rectangle.printToPhone();rectangle.printToWatch();이런식으로 호출하는 방법으로 설계를 진행하였는데강의를 듣다보니 디바이스가 새로 추가될 때마다 선생님의 코드와는 다르게Shape 인터페이스에 새로운 메서드를 추가하고 상속받은 모든 자식클래스에추가로 수정을 하여야 하는 단점이 생겼습니다.클라이언트의 입장에서 디바이스의 존재를 모르고 사용할 수 있도록 하는 것과선생님 코드처럼 확장에 용이하게 하는 방법 중 설계를 어떤부분에 중점을 둬야할지잘 모르겠습니다..약간 디자인패턴과 조금 거리가 있는 질문을 드려서 죄송합니다.좋은 강의 감사합니다.
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
설계관련 궁금증이 있습니다.
안녕하세요 선생님 이전강의에서 어떤식으로 구현할 지 간단하게 설명해준 내용을 듣고 이번 강의를 듣기전에 먼저 구현을 해본 뒤 영상을 시청한 후 차이점이 생겨서 질문 드립니다.. 저는 클라이언트가 디바이스의 존재를 몰라도 사용할 수 있도록 Shape 인터페이스에 void printToPhone();void printToWatch(); 두 메서드를 생성한 뒤 각 도형 자식클래스에 @Overridepublic void printToPhone() {device = new Phone();device.printTo(this);}@Overridepublic void printToWatch() {device = new Watch();device.printTo(this);}이런식으로 메서드 내부에서 디바이스를 생성하여 처리하였습니다.이후 클라이언트에서 Shape rectangle = new Rectangle();rectangle.printToPhone();rectangle.printToWatch();이런식으로 호출하는 방법으로 설계를 진행하였는데강의를 듣다보니 디바이스가 새로 추가될 때마다 선생님의 코드와는 다르게Shape 인터페이스에 새로운 메서드를 추가하고 상속받은 모든 자식클래스에추가로 수정을 하여야 하는 단점이 생겼습니다.클라이언트의 입장에서 디바이스의 존재를 모르고 사용할 수 있도록 하는 것과선생님 코드처럼 확장에 용이하게 하는 방법 중 설계를 어떤부분에 중점을 둬야할지잘 모르겠습니다..약간 디자인패턴과 조금 거리가 있는 질문을 드려서 죄송합니다.좋은 강의 감사합니다.
- 미해결코딩으로 학습하는 GoF의 디자인 패턴
설계관련 궁금증이 있습니다.
안녕하세요 선생님 강의 잘 보고있습니다. 비지터 패턴 관련하여 앞선 강의에서 설명해준 내용을 듣고 먼저 구현을 해봤는데요. 저는 클라이언트에서 디바이스의 존재를 모른채로 사용하게 하고 싶어서 Shape 인터페이스에서 void printToPhone();void printToWatch();이라는 각각의 인터페이스를 만든 뒤에 각 도형의 자식 클래스에@Overridepublic void printToPhone() { device = new Phone(); device.printTo(this);}@Overridepublic void printToWatch() { device = new Watch(); device.printTo(this);}이런식으로 처리한 뒤에 클라이언트에선Shape rectangle = new Rectangle();Shape triangle = new Triangle();rectangle.printToPhone();rectangle.printToWatch();triangle.printToPhone();triangle.printToWatch();요런식으로 처리하였습니다.이후 강의를 듣고난 뒤 새로운 디바이스가 생성될 때마다 수정해야 할 클래스가훨씬 많아진다는 단점이 있다는걸 인지했지만 클라이언트 입장에선 디바이스의 존재를 몰라도사용할 수 있는 장점이 있는데 이걸 어떤 기준으로 트레이드오프 해야할 지 여쭤보고 싶습니다.좋은 강의 감사합니다.