묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결김영한의 실전 자바 - 중급 1편
Enum 과 null object pattern
public enum HttpStatus { NONE(-1, "정의되지 않은 상태코드입니다."), OK(200, "OK"), BAD_REQUEST(400, "Bad Request"), NOT_FOUND(404, "Not Found"), INTERNAL_SERVER_ERROR(500, "Internal Server Error"); ... public static HttpStatus findByCode(int code) { for (HttpStatus status : HttpStatus.values()) { if (status.getCode() == code) { return status; } } return HttpStatus.NONE; } public boolean isSuccess() { return code >= 200 && code < 300; } } public class HttpStatusMain { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("HTTP CODE: "); int httpCodeInput = scanner.nextInt(); HttpStatus status = HttpStatus.findByCode(httpCodeInput); System.out.println(status.getCode() + " " + status.getMessage()); System.out.println("isSuccess = " + status.isSuccess()); } }안녕하세요 김영한 강사님. 먼저 항상 양질의 강의를 제공해주셔서 감사하다는 말씀을 전해드리고 싶습니다.HttpStatusMain 에서 null 체크하는 일이 발생하여 이를 제거해보면 어떻게 해야할까 에 대한 고민이 들었습니다.그래서, Enum 에 null object pattern 을 적용해보면 어떨까 하여 HttpStatus.NONE(-1, "정의되지 않은 상태코드입니다.") 와 같이 정의해봤습니다.이렇게 적용했을 때, 1. 다른 사이드 이펙트가 있을까요? 1-1. findByCode() 에서 return HttpStatus.NONE 이 아닌 throw new IllegalArgumentException("해당하는 상태코드가 없습니다."); 와 같이 RuntimeException 을 날리는 것이 더 나은 방법일까요? 2. 현업에서는 enum 타입의 null check, null object pattern 를 어떻게 구현하는지 궁금합니다.긴 글 읽어주셔서 감사합니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
main에서 start 호출 시
public class HelloThreadMain { public static void main(String[] args) { System.out.println(Thread.currentThread().getName() + ": main() start"); HelloThread helloThread = new HelloThread(); System.out.println(Thread.currentThread().getName() + ": start() 호출 전"); helloThread.start(); System.out.println(Thread.currentThread().getName() + ": start() 호출 후"); System.out.println(Thread.currentThread().getName() + ": main() end"); } } 개인적으로 궁금한 부분이 있는데요. main에서 start를 호출할 때 main 스택 프레임 위에 start 스택 프레임이 쌓이나요? 쌓이고 바로 삭제되는 건가요?
-
미해결김영한의 실전 자바 - 중급 2편
자료구조 제네릭 타입
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Set, List, Map 등 자바에서 제공하는 자료구조에 제네릭 타입을 특정해서 정하지 않고, Object로 사용하면 하나의 자료구조에 여러 가지 데이터 타입을 저장하고 관리할 수도 있을 것 같은데선생님 수업에서는 거의 Integer 혹은 String으로 제네릭 타입을 정하고 사용을 하시는 부분이 많더라구요.궁금한 점은 제네릭 타입을 Object로 사용하는 것이 타입 안정성 때문에 보통은 사용을 안 하는 건지 만약 사용을 한다고 할때 자료구조의 메서드 사용에는 문제 없는지 알고싶습니다.
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
ArrayEx5에 대한 질문입니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]12분51초 기점으로예제5번에서 선생님께서는 16행,22행에 count를 사용하셨습니다만, 저는 number.length를 사용해서 결과를 얻었습니다...; number.length를 사용하면 어떤게 좋지않을까요..?
-
미해결김영한의 실전 자바 - 중급 1편
질문
예외 처리 1강을 보면 NetworkClient, NetworkService 를 다른 클래스에 만드셨는데,NetworkClient 는 NetworkService 안에서만 이용이 되는데 그러면 내부 클래스, 정적 중첩 클래스, 지역 클래스를 이용하는게 더 낫지 않나요 ?
-
해결됨파이썬 알고리즘 트레이딩 파트1: 알고리즘 트레이딩을 위한 파이썬 데이터 분석
선생님 ㅠㅠ 뭐가 문제일까요 spot검색후.ㅠ
선생님.. 이렇게 떠서 연필모양 클릭이 안되요 ㅠㅠ..뭐가 문제일까요
-
해결됨파이썬 알고리즘 트레이딩 파트1: 알고리즘 트레이딩을 위한 파이썬 데이터 분석
선생님 안녕하세요!.. 오류 문의드립니다.
승인된 LowPriorityCores 할당량을 초과하므로 작업을 완료할 수 없습니다. 추가 세부 정보 - 배포 모델: Resource Manager, 위치: KoreaCentral, 현재 제한: 3, 현재 사용량: 0, 추가 필요: 16, (최소) 새 제한 필요: 16. 할당량이 임계값에 도달할 때 경고를 설정합니다. https://aka.ms/quotamonitoringalerting에서 자세히 알아보세요. 배포가 성공할 수 있도록 '세부 정보' 섹션에 나열된 매개 변수를 지정하여 https://aka.ms/ProdportalCRP/#blade/Microsoft_Azure_Capacity이게.. 저도 클라우딩 컴퓨터가 처음이라 익숙하지가 않는데 ㅠ 이렇게 오류가 뜹니다.. 계정이 유료?로 전환되었는지도 모르겠고요 ㅠㅠ 일단 앞의 강의 에서 spot이게 검색해도 아무것도 뜨지 않아서 지금 강의 부터 진행 하는데 역시 안되네요 ㅠㅠ 뭐가 문제일까요
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
print와 printf의 차이
System.out.printf()와 System.out.print()의 차이를 알고 싶습니다. int i = 10;System.out.printf(i); 라고 하면 printf를 print로 바꾸라고 하더라구요..
-
미해결스프링 핵심 원리 - 기본편
CoreApplicationTests 오류
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]테스트코드 확인할 때 돌려보니까 저는 되게 긴 오류가 나타나더라구요... 어디서 오류가 난 건지 잘 모르겠습니다.. :(
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
섹션 3. 교안에 @Override가 빠진 것 같습니다.
섹션 3. 스레드 제어와 생명 주기1[스레드의 생명 주기 - 코드] 파트 첫 번째 코드에서MyRunnable 정적 클래스의 run() 메서드 위에 @Override가 빠진 것 같습니다.물론 코드를 실행하는 점에 있어 문제는 없지만 혹시나 하고 글 남깁니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
자바에서 스레드풀을 생성한다면 어떻게되나요?
질문이 몇가지 더 있어 질문남깁니다.1.톰켓을 실행했을때 톰켓의 스레드풀에 있는 스레드에 의해war의 클래스파일 로직들이 실행된다고하셨는데 만약 자바 로직에서 forkjoinpool같은 스레드풀을 또 생성하면 톰켓의 스레드풀과 별도로 스레드풀이 하나 더 만들어지는건가요? 수업외 질문이라면 죄송합니다 ㅠㅠ
-
해결됨오브젝트 - 기초편
영화가 정책을 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 메서드를 상속받아 사용합니다.