묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨오브젝트 - 기초편
영화가 정책을 1개만 갖는데 비해 정책이 다수의 컨디션을 갖는 디자인에 대해
아 이건 처음부터 수업 내용에 대한 질문이나 의문이라기보다 그 예제를 보다 현실적으로 확장했을 때 이런 부분을 어떻게 생각하시는지 정도의 질문입니다. 수업의 용이성을 위해 구현된 코드에 의문이나 불만은 없습니다 ^^정책이 여러 개의 컨디션을 소유하고 그 중 하나만 걸리면 할인 금액을 계산하게 되어있습니다.이게 약간 논리적으로 혼란한데 할인이 일어나는 이유는 컨디션에 걸렸기 때문으로 결국 진짜 할인 이유는 소유한 컨디션 중 하나입니다.결국 걸린 컨디션에 따라 할인 금액이 달라질 것 같이 생겼는데, 정책은 고정된 방법으로 할인가를 계산하고 있습니다.이것이 잘못되었다고 생각하지는 않는데, 이런 논리의 흐름이라면 역시 영화가 다수의 정책을 소유해야 하지 않나 싶어서요.
-
해결됨오브젝트 - 기초편
DiscountPolicy 구현 및 설계에 대해 궁금한 점이 있습니다.
상영은 영화에게 요금계산을 맡기고영화는 다시 정책에게 요금 계산을 맡기죠정책은 다시 컨디션에게 할인 여부를 판정하게 하고컨디션은 다시 상영에게 협조를 구합니다.대표적으로 4번의 상황에서 나오는 코드가 시퀀스판정입니다.헌데 이 코드의 구조를 보면 말이 컨디션이 스크린과 협조한거지 상영의 속성을 그대로 까서 얻은 것과 진배 없습니다.더 나아가 컨디션은 상영의 속성 변화나 애당초 주어진 상영의 지식 정도에 큰 영향을 받아 구현됩니다. 상영의 지식이 적으면 구현할 수 있는 컨디션도 좁은 범위의 가능성을 갖게 되며 상영이 추가적인 정보가 확장된다면 컨디션도 더 많은 구조로 확장할 수 있게 됩니다. 즉 이 둘은 완전히는 아니지만 변화율이 상당히 긴밀하다 할 수 있습니다.현실적으로는 마케팅팀의 입김에 의해 컨디션을 추가하려다보니 상영에 정보가 충분치 않아 추가하게 될 가능성이 높아 보입니다.또한 이런면에서 상영은 역할이나 책임을 수행한다기보다 컨디션 입장에서는 그냥 데이터클래스로 보이는 수준이라고 생각됩니다. 이미 컨디션의 이름이 상영의 속성을 평가하겠다는 뉘앙스를 강하게 풍기고 있습니다.제 생각에는 이러한 이유로 컨디션과 상영이 충분히 디커플링 되어야 한다고 생각합니다.그래야 할인조건을 만드는 변화율과 상영의 변화율을 분리할 수 있기 때문입니다.이 디커플링으로 가장 적절한 장소는 정책의 calculateDiscount메소드의 for루프라 생각됩니다.interface ConditionInfo{ int getSequence() ZonedDateTime getStartTime() int getMinAge() int getRunningTimeMinute() } ... for(DiscountCondition each:conditions){ ConditionInfo info = new ScreenInfo(Screen); if(each.isSatisfiedBy(info)){ ...게다가 이 설계는 일견 의존성 흐름이 단방향처럼 보이지만 결국 정책이 상영을 알고 상영은 영화를 알게 되면서 다시 영화가 정책을 알게 되는 순환 의존성의 구조로 귀결됩니다. 물론 영화가 정책에 의존하는 부분은 단지 소유밖에 없으니 그나마 나은 편이지만, 정책이 컨디션에게 상영을 던져주면서 부탁하면 컨디션이 상영에 정보가 충분치 않은 경우 상영이 다시 영화에 추가 정보를 만들게 하는 순환구조가 일어납니다.사실 정책이 getDiscountAmount하는 과정도 말이 좋아 상영에게 받은거지 그건 결국 완전히 영화의 가격에 의존하는 로직입니다. 즉 사실상 정책과 영화의 단방향 의존성은 순환의존성으로 깨져버린 상태라 디자인상 그냥 정책 생성시 영화를 넣어주는게 더 유지보수가 편한 거 아니냐? 라는 생각도 들었습니다.전체 도메인에서 정책 내의 컨디션이 핵심비지니스 로직이라고 판단되는 바, 이 부분을 더 추상화할 필요는 충분히 있다 생각됩니다.
-
미해결스프링 핵심 원리 - 기본편
localhost:8080질문있습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.다 된거 같은데 사이트에 연결할수 없음이 나오네요
-
해결됨오브젝트 - 기초편
5-2강이 편집이 잘못되어 동일 내용이 뒤에 붙어있어요.
7분 30초 정도에 끝나는 내용일텐데 중간에 영상이 한번더 붙여넣기 된 건지 그 이후에 같은 내용의 영상이 다시 나옵니다.
-
미해결김영한의 실전 자바 - 기본편
스택메모리에 관하여 질문이 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 혹시 스택 메모리에 쌓이는 스택프레임들은 main 메서드안에서 실행되는 메서드들만 이루어져있나요 아니면 다른 클래스의 메서드를 사용하면 그 인스턴스 메서드들도 스택 메모리에 쌓이나요?
-
해결됨오브젝트 - 기초편
영화가 가격을 갖고 있는 이유가 궁금해요.
고객이 구매하는건 상영인데 왜 영화가 가격을 들고 있을까요. 상식적이라면 상영이 가격을 들고 있을거 같아요.
-
미해결김영한의 실전 자바 - 기본편
ProductOrderMain 질문 드려요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]기존 정답에 Scanner 기능을 추가 했는데 nextInt()의 빈공간 데이타 때문에 nextLine() 입력 오류가 나서 이런식으로 하니 오류는 잡았고 정상 작동 되었습니다. 이 방법 말고 다른 방법은 없을까요?매번 nextInt 뒤에 scanner.nextLine()을 넣어야 하는건지..?int total =0; ProductOrder product1 = new ProductOrder(); System.out.print("상품명1을 입력하세요: "); String name = scanner.nextLine(); product1.productName = name; System.out.print("가격1을 입력하세요:"); int price100 = scanner.nextInt(); product1.price = price100; scanner.nextLine(); //삽입 System.out.print("수량1을 입력하세요:"); int quantity100 = scanner.nextInt(); product1.quantity = quantity100; scanner.nextLine(); //삽입 ProductOrder product2 = new ProductOrder(); System.out.print("상품명2을 입력하세요:"); String name2 = scanner.nextLine(); product2.productName = name2; System.out.print("가격2을 입력하세요:"); int price200 = scanner.nextInt(); product2.price = price200; scanner.nextLine(); //삽입 System.out.print("수량2을 입력하세요:"); int quantity200 = scanner.nextInt(); product2.quantity = quantity200; scanner.nextLine(); //삽입 ProductOrder product3 = new ProductOrder(); System.out.print("상품명3을 입력하세요"); String name3 = scanner.nextLine(); product3.productName = name3; System.out.print("가격3을 입력하세요:"); int price300 = scanner.nextInt(); product3.price = price300; //삽입 scanner.nextLine(); System.out.print("수량3을 입력하세요:"); int quantity300 = scanner.nextInt(); product3.quantity = quantity300; scanner.nextLine(); //삽입
-
미해결김영한의 실전 자바 - 중급 1편
private 변수 접근
안녕하세요.이 코드에서 어떻게 books[i].title 로 접근할 수 있는지 모르겠습니다. 분명 title 과 author 가 private 으로 막혀 있기 때문에 안되는거 아닌가요? 이 질문에 대한 챗 지피티의 답변이 이러한데 그렇다면 이 코드 역시 가능해야 하는것 아닌가요 ?
-
미해결김영한의 실전 자바 - 중급 2편
List인터페이스를 sout 할때 질문입니다.
링크드리스트의 list를 그냥 System.out.println(list); 했을때, 아래의 내용이 맞는지 궁금합니다. LinkedList의 toString 메서드는 AbstractCollection 클래스에서 오버라이딩된 toString 메서드를 상속받아 사용합니다.
-
미해결김영한의 실전 자바 - 중급 2편
TreeSet으로 자동 변환
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================Set 정리 14:58에서데이터 개수가 8개 이상이 되면 TreeSet으로 바꿔서 equals를 수행한다는 말씀은,HashSet, LinkedListSet으로 선언하여도 자바가 탐색 시에만 자동으로 변경한다는 말인가요?
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
배열 최대 / 최소값 문제 풀다가 질문이 있습니다 .
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 선생님 잘 풀고 있는 와중에 궁금한 사항이 있어서 여쭤봅니다해당 아래쪽 저는 min = max = numbers[0]; for (int i = 0; i < n; i++) { if (numbers[i] < min) { min = numbers[i]; } if (numbers[i] > max) { max = numbers[i]; } }int i = 0 이라고 생각해서 작업하고 수행이 됏는데1로 하신 이유가 있을까요 ? 1로 해야하는 이유를 모르고 선생님이랑 다르니 생각이 멈추지 않아서 밤새 잠이 오지 않아 여쭤봅니다 ㅠ ㅠ
-
해결됨김영한의 실전 자바 - 중급 1편
열거형 문제풀이 2번 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 열거형 문제풀이2를 복습하는 도중에,문제풀이2 설명 에서 "참고 : HTTP 상태 코드는 200 ~ 299사이의 숫자를 성공으로 인정한다.(pdf-30page)" 라는 말이 있어서,스캐너로 205번을 쳤는데, "true"라는것이 안나와서 강사님 코드에서,1.메서를 하나추가,2.기존 메서드 내용을 좀 변경하였는데 이런 식으로 해도 되는지 알고 싶어서 코드를 올립니다.메인은 여러번 입력하기 위해서 while문 추가,HttpStatus 이넘 클래스는 isInputSuccess()라는 메서드 추가,및 findByCode에 if문에 or을 추가해서(마우스 블락진데) 200~299번 되게 만듬.이렇게 하였는데 괜찮으지요?추가예전에 문제풀이 할때는 안했더라고요.+ 오류나서, 밑에걸로 바꿈..추가2글을 다시 읽어 보니까 개소리(내가 요구사항을 잘못 이해 했구냐.. 라는 생각이 어제밤에 들던데..)인것 같은데. 글을 지우는 것은.. 아닌것 같아서.. 이렇게 남겨 놓습니다.
-
해결됨C개발자를 위한 최소한의 C++
생성자 궁금한거 있습니다
#include <iostream>using namespace std;class MyClass {public:MyClass(int a) : m(a) {cout << "base" << endl;}MyClass(const MyClass& rhs) : m(rhs.m) {cout << "copy" << endl;}~MyClass() {cout << "delete:" << m << endl;}void print() {std::cout << m << std::endl;}private:int m;};MyClass test(MyClass rhs){return rhs;}int main() {MyClass a = 10;MyClass b = MyClass(50);MyClass c = a;return 0;}결과로 base, base, copy, delete: 10, delete: 50, delete: 10이 출력됐습니다.[질문]MyClass a = 10;MyClass b = MyClass(50);이 둘의 차이가 무엇인가요? 특히 MyClass b = MyClass(50);의 base만 출력은 이해가 되지 않습니다.일단 임시객체를 만들었으니 base, 그리고 임시객체를 const MyClass& rhs의 인자로 넘겨줘서 copy, 그리고 다음줄로 넘어가면 쓸모없어진 임시객체 MyClass(50)이 삭제되서 delete 이렇게 3개가 출력될줄 알았는데 base만 출력돼서 이해가 되지 않습니다.. (이 부분은 찾아보니까 복사 엘리전이라고 하는데 맞나요?? 그래서 복사 생성자를 안쓴다는데 헷갈리네요 ㅠㅠ)그리고MyClass b = MyClass(50);MyClass c = a; 이 둘의 차이도 알고싶습니다.b,c 둘다 객체를 인자로 받고있습니다. 근데 b는 base를 출력하고 c는 copy를 출력합니다. 왜 b가 base를 출력하나요? 이와같은 복잡함을 덜기위해 explicit를 사용하는건가요?
-
미해결김영한의 실전 자바 - 중급 2편
add 부분 코드 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이 코드는 LinkedList<Integer> bucket = new LinkedList - > buket = bukets[hashIndex] 이렇게 이어지는 코드인건가요 ..? bukets이라는 linkedlist의 배열을 만들고 bukets 1 bukets 2 하나 하나에 linkedlist를 넣는 과정인건 알겠는데 저 buket은 어떻게 나온 코드인지 모르겠어요 ㅠㅠ
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
continue;를 쓰는 조건문 for과 while의 차이를 알고싶습니다.(같은 방식인데 for이 출력이 안되는 이유)
반복문 안에 if문 continue를 걸어서 홀수만 출력 되도록 코드를 연습했습니다.. while문은 출력이 되었는데, for문은 같은 방식으로 하면 안되는 이유가 뭘까요..?Run창에서 따로 오류가 뜨진 않지만, 아무것도 출력이 되지 않습니다... package loop; public class LoopEx { public static void main(String[] args) { // while문 정상 출력 int i = 0; while(i<=10) { if ((i % 2) == 0) { i++; continue; } System.out.println("while = " + i); i++; } // for문 출력되지 않음 for(int j = 0; j < 10; j++) { if((j % 2)==0) { j++; continue; } System.out.println("for = " + j); } } }
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
자바 스레드관련 질문이 있습니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.예전부터 궁금하던건데 고급강의에서 스레드를 다뤄주셔서 너무 감사드립니다.궁금했던 질문1.war,jar 파일이 tomcat 에서 구동되면 강의에서 설명해준것처럼 tomcat 프로그램을 프로세스가 작동할텐데 동시에 3개의 요청이 tomcat 으로 들어오게 된다면 tomcat 을 돌리고 있는 프로세스는 총 3개의 스레드를 스레드풀에서 가져와서 각 각 요청에 1개씩 스레드를 할당하여 was 가 멀티스레드 처럼 작동되게 되는건가요?2.tomcat 으로 war,jar 파일을 배포하고 운영하면 tomcat 의 스레드가 war,jar 의 소스를 1줄씩 읽는거고 war,jar(자바) 에서는 스레드가 따로 생성되지 않는건가요? (자바에서 멀티스레드 사용하지 않은경우)3.2번이 맞다고 했을때 만약 자바소스에서 멀티스레드를(총3개 스레드사용) 사용했다면 tomcat 의 스레드는 1개일텐데 어떻게 멀티스레드가 되는건가요..? 자바에서 스레드를 2개 더 생성시켜버리는건가요? 궁금합니다 ㅠ4.그리고 자바에서 스레드 숫자를 설정해버리면(4개로 설정) tomcat 에서 4명의 사용자 요청만 동시에 처리할 수 가 있다고 하셨는데자바에서 스레드 숫자를 설정하는순간 톰캣의 스레드풀에서 4개의 스레드만 사용가능해지는건가요..?
-
미해결김영한의 실전 자바 - 중급 1편
Class 클래스 질문입니다!
[질문 내용]강의 내용과 똑같이 코드를 작성했는데 다음과 같은 에러가 발생합니다. 원인을 도저히 찾지 못해서 질문을 남깁니다!!추가로다음 코드를 추가하면 해결이 되는데 이렇게 해결이 되어도 괜찮은 부분일지 궁금합니다..
-
미해결김영한의 실전 자바 - 중급 2편
와일드카드
[질문 내용]package generic.test.ex5; import generic.animal.Animal; import generic.animal.Cat; import generic.animal.Dog; public class WildCardMain2 { public static void main(String[] args) { Box<Object> objBox = new Box<>(); Box<Animal> animalBox = new Box<>(); Box<Dog> dogBox = new Box<Dog>(); Box<Cat> catBox = new Box<Cat>(); //writeBox(objBox); writeBox(animalBox); Animal animal = animalBox.get(); System.out.println("animal = " + animal); } static void writeBox(Box<? extends Animal> box) { box.set(new Dog("멍멍이", 100)); } }package generic.test.ex5; public class Box<T> { private T value; public void set(T value) { this.value = value; } public T get() { return value; } }======질문 수정extends를 대입하면 Animal 이하의 개체(예: Cat, Dog)들이 전달 가능해지고, 이는 Dog를 담을 수 없기 때문에 컴파일 오류가 발생한다고 이해했습니다. 따라서 Super를 통해 이런 가능성을 차단합니다. 제가 이해한 것이 맞을까요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
임포트가 안되요 ㅠ
자바21로 맞췄는데 왜 timeunit을 못가져올까요?>
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
추상 클래스에서 showMainFeature
실행을 시켰는데 07에서했던 카메라에있는 showMainFeature이 결과값으로 같이 뜨는데 왜그런거가요?