묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨오브젝트 - 기초편
질문 있습니다!
public Reservation reserve(Customer customer, int audienceCount) { Money fee = movie.calculateFee(this).times(audienceCount); return new Reservation(customer, this , audienceCount, fee); }reserve 하기위해 movie에게 calculateFee를 하기 위해 screening을 전달해주는데 이 전달해주는 명확한 근거가 있는지 궁금합니다. 만약 screening을 전달하지않고 빈 것으로 전달했다하더라도public Money calculateFee(Screening screening) { return fee.minus(discountPolicy.calculateDiscount(screening)); }Movie 클래스에서 screening 대신 movie를 this로 전달했어도 동일한 기능은 가능한 거 같습니다. 질문을 하다가 깨달았는데 DiscountCondition에 screening이 필요하기 때문에 전달해주는 것을 알게되었습니다. 이렇게 전달해주는 것은 자연스럽게 일단 관계와 책임을 결정한 뒤 필요한 요소들이 뭘까 전체적으로 고민하면서 정해지는 것일까요? 상영이 예약에 대한 책임을 지고, 영화에게 가격을 계산하는 책임을 줄 때 screening을 넘겨주는 것과 condition에서 screening이 필요하다는 것까지 같이 설계하셨었는지 궁금합니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
synchronized 메서드와 join 관련 질문이 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.만약 무한정 대기할 수도 있는 상황에서 t1.join(50);t2.join(50); main의 코드를 이렇게 바꿔봤는데 결과가 똑같더라구요 이게 왜 그런지 알고 싶습니다.
-
해결됨오브젝트 - 설계 원칙편
디자인 패턴에 대해선 어떤 생각을 가지고 계신지 궁금합니다.
좋은 강의 감사합니다. 강의를 들으면서 객체지향 설계 원칙에 맞춰 코드를 짜다보면 나중에 되돌아봤을때 의도했던 안했던 시중에 알려져있는 디자인 패턴과 유사한 방향으로 코드가 만들어질 것 같다는 생각을 했습니다. 강사님께서는 디자인패턴을 어떻게 바라보고 계시고 디자인 패턴을 의도해가며 구현할 때와 아닐때가 있으신지도 궁금합니다~!!감사합니다~!!
-
해결됨유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
데이터 로드 관련 질문
안녕하세요! 강의 잘 듣고 있습니다.13. 데이터 테이블 관리 시스템 부분을 듣다가 몇 가지 의문점이 있어 질문 드립니다. CSV Reader가 List<Dictionary<string, object>>를 반환하고 있고, 이를 로드 함수에서 실제 데이터로 형변환해 사용하고 있습니다. 그런데 object 타입을 값 타입으로 변환하면 언박싱이 발생해서성능에 좋지 않다고 알고 있습니다. 통일성을 위해서 object 타입으로 쓰신 건지, 로드 과정이 Awake에서 한 번에 일어나기 때문에 괜찮은지 궁금합니다. 그리고 object 대신 string을 반환하는건 어떤지도 여쭤보고 싶습니다. 챕터 데이터를 검색할 때 리스트에서 순회를 하는데 딕셔너리 같은 별도의 자료 구조에 저장하지 않은 이유가 궁금합니다. 감사합니다.
-
해결됨오브젝트 - 기초편
[강의 자료 오타 제보]
안녕하세요 . 제가 생각했을 땐 오타인 거 같아 제보드립니다. HIGH COUPLING이 높은 결합도라고 명시되어 있는게 맞는 거 같아 제보드려요! 시간대는 7:13분대 화면입니다.
-
해결됨스프링 핵심 원리 - 기본편
appConfig.xml 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.라이브 코딩 하면서 따라가고 있는데 appConfig.xml 작성 도중 오류가 발생했습니다...
-
해결됨스프링 핵심 원리 - 기본편
7:46에 테스트 부분
질문이라기엔 뭐 하지만, 현재 MemberService를 동일 이름으로 2개 이상 가지고 있지 않으니MemberService memberService = ac.getBean("memberService", MemberService.class);해당 부분을MemberService memberService = ac.getBean(MemberService.class);이렇게 가져가도 괜찮을까요?테스트에는 성공하는데 혹시 따로 "memberService" 오버로딩 메소드를 사용하신 이유가 있으신가 해서요!
-
미해결김영한의 실전 자바 - 중급 1편
12:30 의 newClassGrade 질문이 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]16.타입 안전 열거형 패턴 12:30 쯤 new ClassGrade();로 새로운 객체를 만들어서 discountServies.discount의 파라미터로 사용 하셨는데 newClassGrade.BASIC 으로 파라미터를 입력하면 BASIC은 ClassGrade의 스태틱 필드이기 때문에 정상적으로 비교 가능한게 아닌지 궁금합니다. 만약 정상적으로 비교하다면 new를 기능에 크게 문제가 없는데 왜 private로 변경해야 하는지도 궁금해요!
-
미해결스프링 핵심 원리 - 기본편
생성자 주입 관련하여 기초적인 질문 드리고합니다.
부모 클래스 타입에, 자식클래스의 생성자를 주입하는 상황에대해 궁금한게 생겨 질문드립니다. 부모 클래스 타입으로 선언된 인스턴스는자식 클래스에게만 있는 메서드를 사용하지 못하는거로 알고있는데요, 그렇다면 만약에 여러 인터페이스를 implement 받은 클래스라면, 이떄는 생성자 주입방식을 쓰면 안되는게 아닌가 하는 의문이 들어 질문드립니다. 예를 들면 아래와 같이 구현된 A에 대해서public class A implements D, E { ... 코드 생략 } 아래 처럼 생성자 주입을 한다면, 이 a 인스턴스는 E 인터페이스에 정의된 메서드들은 사용하지 못하는게 아닌가해서 여쭤보고자합니다.( 실제 클래스들을 보면 다중상속을 받은 경우에도 생성자 주입방식을 잘 쓰고 있는것 같아 이부분이 궁금합니다.. ).. 코드 생략 D a = new A(); .. 코드생략
-
미해결김영한의 실전 자바 - 중급 2편
블로그 작성 시, 저작권 문제에 대하여
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 아니오2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]공부한 내용을 블로그(노션)에 작성하려 하는데, PDF에 있는 그림 이미지 같은 것들을 캡쳐해서 사용해도 괜찮을까요?
-
해결됨오브젝트 - 설계 원칙편
8-5 책임 분리를 통한 중복 코드 제거 과정에서 특정 조합은 불가능할 때
안녕하세요!AbstractReader로부터 파싱에 대한 책임을 분리하여 Parser라는 클래스를 새로 생성하는 내용 잘 들었습니다!여기서 궁금한 것이 생겨 질문 남깁니다..!DatabaseReader, RedisReader, FileReader / CsvParser, JsonParser, XmlParser 구성은 총 9가지의 경우의 수가 나올 수 있을 것 같은데요만약 '(DatabaseReader, XmlParser)는 불가능하고 (DatabaseReader, CsvParser)와 (DatabaseReader, JsonParser)가 가능하고,(RedisReader, XmlParser)와 (RedisReader, CsvParser)는 불가능하고 (RedisReader, JsonParser)만 가능하다' 와 같이 특정 조합이 불가능한 경우는 어떻게 컴파일 타임에 가능한 조합으로만 강제할 수 있을지 궁금합니다!
-
미해결얄코의 떠먹여주는 객체지향 디자인 패턴
파사드 패턴과 템플릿 메서드 패턴의 차이
파사드 패턴은 다수의 서브시스템을 하나로 묶는 패턴으로 이해했습니다. 클라이언트의 클래스의 함수에서 서브시스템에 해당하는 개체들의 함수를 호출하여 구현하는 거 같은데요, 어떻게 보면 템플릿 메서드 패턴과 사실상 똑같은거 아닌가요? 두 패턴의 뚜렷한 차이가 있는데 제가 이해를 잘 못한건지 질문드립니다.
-
미해결파이썬 알고리즘 트레이딩 파트2: Interactive Brokers API를 활용한 실시간 알고리즘 트레이딩
주문 하는것도 강의내용에 잇나요
주문 하는것도 강의내용에 잇나요
-
해결됨프론트엔드 마스터클래스
Variable Object 질문
안녕하세요, 좋은 강의 감사합니다.실행 컨텍스트 부분에서 궁금한 점이 있어서 질문드립니다. 강의에서 Variable Object를 설명해주셨는데, 제가 개인적으로 찾아본 자료들에서는 ES2015부터 실행 컨텍스트가 Lexical Environment, Variable Environment, this binding으로 구성된다고 나와 있더라고요.Variable Object는 그 이전 스펙에서 사용되던 용어인 것 같은데, 혹시 강의에서 이 개념을 선택해서 설명하신 특별한 교육적 의도가 있으셨을까요?제가 아직 깊이 이해하지 못해서 그런데, 두 방식 중 어떤 것이 JavaScript 동작 원리를 학습하는 데 더 도움이 되는지, 또는 어떤 차이점들이 있는지 알려주시면 감사하겠습니다.
-
해결됨유니티 시스템 프로그래밍 Pt.2 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
18 유저 데이터 온라인DB 로드 및 저장 PT4의 UserInventoryData 클래스에 대하여
private void ConvertFirestoreDictToData(Dictionary<string, object> dict) { EquippedWeaponData = ConvertDictToUserItemData((Dictionary<string, object>)dict["EquippedWeaponData"]); EquippedShieldData = ConvertDictToUserItemData((Dictionary<string, object>)dict["EquippedShieldData"]); EquippedChestArmourData = ConvertDictToUserItemData((Dictionary<string, object>)dict["EquippedChestArmourData"]); EquippedBootsData = ConvertDictToUserItemData((Dictionary<string, object>)dict["EquippedBootsData"]); EquippedGlovesData = ConvertDictToUserItemData((Dictionary<string, object>)dict["EquippedGlovesData"]); EquippedAccessoryData = ConvertDictToUserItemData((Dictionary<string, object>)dict["EquippedAccessoryData"]); InventoryItemDataList = ConvertDictToInventoryList((List<object>)dict["InventoryItemDataList"]); if(dict.TryGetValue("EquippedWeaponData", out var equippedWeaponDataValue) && equippedWeaponDataValue is Dictionary<string, object> equippedWeaponDataDict) EquippedWeaponData = ConvertDictToUserItemData(equippedWeaponDataDict); if (dict.TryGetValue("EquippedShieldData", out var equippedShieldDataValue) && equippedShieldDataValue is Dictionary<string, object> equippedShieldDataDict) EquippedShieldData = ConvertDictToUserItemData(equippedShieldDataDict); if (dict.TryGetValue("EquippedChestArmourData", out var equippedChestArmorDataValue) && equippedChestArmorDataValue is Dictionary<string, object> equippedChestArmorDataDict) EquippedChestArmourData = ConvertDictToUserItemData(equippedChestArmorDataDict); if (dict.TryGetValue("EquippedBootsData", out var equippedBootsDataValue) && equippedBootsDataValue is Dictionary<string, object> equippedBootsDataDict) EquippedBootsData = ConvertDictToUserItemData(equippedBootsDataDict); if (dict.TryGetValue("EquippedGlovesData", out var equippedGlovesDataValue) && equippedGlovesDataValue is Dictionary<string, object> equippedGlovesDataDict) EquippedGlovesData = ConvertDictToUserItemData(equippedGlovesDataDict); if (dict.TryGetValue("EquippedAccessoryData", out var equippedAccessoryDataValue) && equippedAccessoryDataValue is Dictionary<string, object> equippedAccessoryDataDict) EquippedAccessoryData = ConvertDictToUserItemData(equippedAccessoryDataDict); if (dict.TryGetValue("InventoryItemDataList", out var inventoryItemDataListValue) && inventoryItemDataListValue is List<object> inventoryItemDataList) InventoryItemDataList = ConvertDictToInventoryList(inventoryItemDataList); }위와 같이 수정하셨는데, trygetvalue로 체크하는것으로 바꾸었으니 아래와 같은 부분을 지워주는게 맞지 않나요? 안그러면 중복 처리 되는게 아닌가요? EquippedWeaponData = ConvertDictToUserItemData((Dictionary<string, object>)dict["EquippedWeaponData"]); EquippedShieldData = ConvertDictToUserItemData((Dictionary<string, object>)dict["EquippedShieldData"]); EquippedChestArmourData = ConvertDictToUserItemData((Dictionary<string, object>)dict["EquippedChestArmourData"]); EquippedBootsData = ConvertDictToUserItemData((Dictionary<string, object>)dict["EquippedBootsData"]); EquippedGlovesData = ConvertDictToUserItemData((Dictionary<string, object>)dict["EquippedGlovesData"]); EquippedAccessoryData = ConvertDictToUserItemData((Dictionary<string, object>)dict["EquippedAccessoryData"]); InventoryItemDataList = ConvertDictToInventoryList((List<object>)dict["InventoryItemDataList"]);
-
미해결스프링 핵심 원리 - 기본편
인터페이스랑 구현 질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]너무 기초를 질문하는 것 같아 죄송하지만 따로 물어볼 곳이 없어서 여기에 질문 남깁니다. 멤버 서비스와 멤버 레포지토리를 따로 인터페이스를 만들어서 구현체를 만들었는데 둘 다 회원가입과 회원조회의 역할인 것 같은데 굳이 2개로 나누어서 2단계로 거쳐서 가는 이유가 있을까요?
-
해결됨오브젝트 - 기초편
간접 참조에 대한 질문
안녕하세요!강의에 대한 질문이 있습니다.실무에서 직접참조보다 간접참조를 선호하고 있는데요.간접참조의 경우에는 어떻게 구현해야 객체지향적일 지 궁금합니다. 예를 들어서 Screening 객체가 Movie 객체를 간접 참조로 MovieId만 가지고 있는 경우서비스 레이어에서 DAO를 통해 Movie 객체를 조회한 후 reservce() 메시지에 같이 넘겨야 할까요?
-
해결됨유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
16번 강의에서 ShowUI 함수부분 오타가 있는거 같습니다.
public virtual void ShowUI() { if (!m_UIOpenAnim) { m_UIOpenAnim.Play(); } m_OnShow?.Invoke(); m_OnShow = null; }위 함수에서 선생님 말씀으로는 m_UIOpenAnim이 있다면 플레이라고 하시는데 적는 코드는 위 처럼 m_UIOpenAnim가 널일 때 플레이라고 적혀있습니다
-
미해결김영한의 실전 자바 - 중급 2편
중급2편 56강의 bucket.add(value); 메서드가 이해가 안됩니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의 중급 2편의 56강 9분19초에서 size++; 윗 줄의 bucket.add(value); 라는 코드는 자바 라이브러리에 있는 코드인가요? 아니면영한님께서 작성한 코드인건가요?강의에서 사용한 코드를 보면 배열의 값을 대입시키는 코드는 안보이는데 마지막에 있는 add()메서드가 값을 저장하게 된다고 말씀하셨는데 앞선 강의에서는 해당인덱스게 정수 값을 대입시키는 것 밖에 나와있지 않아서 질문하게 되었습니다
-
해결됨김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션
File,Files 강의 2번쨰 Files 07:30 에 tmep 파일들을 다 지운건가요 ?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)[질문 내용]7분 30초 즘에 편집 되고 temp 파일 쪽이 다 지워진거같은데 강의 처럼 지우고 따라가야하는지 궁금합니다. 흐름상 delete 부분에서 isRegularfile 이 false 가 나와서 원인을 찾는 과정에서 삭제된거같은데 굳이 삭제를 안해도 되는지 궁금합니다.