묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션
write(int b) 인 이유는 무엇일까요?
3장의 초반 내용중에 read() 의 반환값이 byte가 아닌 int 인 이유를 설명해주셨는데요. (EOF 을 알기위해서...) 그렇다면 write(byte b) 가 아니라 write(int b) 인 이유는 뭘까요? 어차피 4byte 중에 하위 1byte만 write될 건데 write(int b) 로 한 이유가 궁금하네요. write(-1) 이렇게 한다고 해서 read()에서 -1로 읽혀서 EOF 라고 판단되지도 않을거 같아요.
-
미해결김영한의 실전 자바 - 기본편
객체 생성에 관해 제가 이해한게 맞나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]헷갈리는 부분이 있어서요. 예시에 나온 Student 클래스를 예로 들면student1 객체를 만들었을때 student1.name = "익명" 이라고한다면 name이라는 멤버변수에 접근을 해서 "익명"이라는 값을 할당하는게 실제 Student 클래스의 name에다가 해당 값을 할당하는게 아니라 Student 클래스를 바탕으로 만들어진 메모리 x001에 있는 name 변수에다가 값을 할당한다는거 같은데 제가 이해한게 맞나요?
-
미해결김영한의 실전 자바 - 기본편
프로젝트 생성 질문 드립니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의처럼 src 패키지에 main 클래스만 있는게 아니라 이상한 패키지가 다수 생성되는데 어떻게 하나요?
-
해결됨김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
ScannerWhileEx4 Switch()
[질문 내용]Scanner scanner = new Scanner(System.in); int total = 0; while (true) { System.out.println("1 : 상품 입력, 2 : 결제, 3 : 프로그램 종료"); int option = scanner.nextInt(); scanner.nextLine(); // 이전에 입력된 개행문자 제거 switch (option) { case 1: System.out.print("상품명을 입력하세요. : "); String pName = scanner.nextLine(); System.out.print("상품의 가격을 입력하세요. : "); int pPrice = scanner.nextInt(); System.out.print("구매 수량을 입력하세요. : "); int pQuantity = scanner.nextInt(); total += pPrice * pQuantity; System.out.println("상품명 : " + pName + " 가격 : " + pPrice + "원 수량 : " + pQuantity + " 합계 : " + (pPrice * pQuantity)); break; case 2: System.out.println("총 비용 : " + total); total = 0; // // 결제 후 총 비용 초기화 break; case 3: System.out.println("프로그램을 종료합니다."); break; default: System.out.println("잘못된 접근입니다."); } }김영한 강사님께서 마지막쯤에 switch() 로 활용해서 풀어봐도 좋다고 하셔서 해보았습니다.그런데 switch문은 각 case마다 break; 를 넣어야지 해당 case 값에 속한 코드마다 수행을 할 수있는데 문제는 이게 while(true)로 무한반복중이라 3. 프로그램 종료 를 눌러봐도 콘솔에 계속 무한로딩이 끝나지 않고 있습니다. 어떻게 하면 좋을까요?
-
해결됨(2024년) 파이썬 알고리즘 트레이딩 파트2: Interactive Brokers API를 활용한 실시간 알고리즘 트레이딩
interactive brokers 로그인할 때 에러가 발생합니다.
Trader Workstation을 offline으로 설치한 이후에 로그인이 안되어서요 ㅠㅠ이상한게 아래와 같이 포탈로는 새로 만든 아이디로 접속이 되는데 동일한 아이디 패스워드로 Trader Workstation > Paper trading 접속하면 아래과 같은 메세지가 나옵니다. (조심스럽게 패스워드를 여러번 입력해 봐서 제 타이핑 실수는 아닌 거 같아요, 말씀드렸듯이 인터넷 포탈 페이지 접속은 되구요)혹시 몰라 다른 아이디를 만들어서 해 보았고가상머신에서도 시도했는데동일한 증상이 발생하네요.시간이 좀 지나면 되는지 확인하려고 3일째 이러고 있는데 역시 같은 문제입니다. 혹시 이런 문제 생기는 분 계실까요?
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
문제와 풀이2 제 풀이에 오류를 알고 싶습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]풀이를 보니 풀이가 훨씬좋은 방법인건 인지가 되지만 제가 생각했을때 제 코드도 실행은 되어야 맞는데 자꾸 출금을 할때 출금 후 while문 처음으로 되돌아가지 않고 다시 출금액을 입력하라고 나옵니다 이유가 뭘까요..? 입금 시에는 정상적으로 while문 처음으로 돌아갑니다.
-
미해결스프링 핵심 원리 - 기본편
logback.xml 설정파일을 자동으로 읽을수있는 이유가 궁금합니다.
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]springboot 3.xx 이상에선 로그설정을 바꿔야되서 resource에 logback.xml을 추가해서 로그를 볼수있게 해결하는 방법이 왜 작동하는건지 궁금합니다. 예를들어 genericxmlapplication으로 ApplicationContext 컨테이너에 등록한다면 해당 파일의 경로를 입력해서 bean 구성파일을 넣는데 Annotation~Context일지라도 xml로 설정정보를 넘겨주는것도 의문이고, 애초에 경로지정도 따로 하지않았는데 어디에서 어떻게(어느 단에서) 자동으로 설정이 되는건지 궁금합니다. 감사합니다.
-
해결됨김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
Scanner scanner = new Scanner(System.in);
[질문 내용]사용자의 입력을 받을려면Scanner scanner = new Scanner(System.in); 코드를 넣어줘야 하는데 여기서 궁금한 것은제가 만약 int i = 1; 이라고 했다면 i라는 int타입의 변수를 선언과 동시에 초기화를 했다. 라고 볼 수 있습니다.그렇다면 Scanner scanner라고 잘라서 보면 scanner변수를 선언한 것인데 그 뒤에 = new Scanner(System.in);를 붙이면scanner라는 변수로 = new Scanner(System.in);를 초기화했다. 라고 읽어도 되는 걸까요? 아니면 따로 클래스 객체를 초기화하는 것을 뭐라고 부르는 명칭이 있나요?
-
해결됨김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
Casting3 클래스에서 maxIntValue 값
[질문 내용]2147483647이 int 타입의 최고값이라고 설명하는 부분에서 long maxIntValue = 2147483647; 이라고 long 타입으로 maxIntValue변수에 값을 초기화하였는데요.여기서 2147483647을 제가 예시로 int intValue = 2147483647; 라고 초기화를 하면 정상적으로 오류없이 되는데문제는 maxIntValue를 intValue에 저장할 때 왜 형변환을 해야 하는지 잘 모르겠습니다.정상적으로 intValue에 2147483647값을 초기화를 했을때는 문제없이 잘 되는데, 어짜피 maxIntValue가 long타입으로 int보다 크고, 애초에 2147483647값이 int의 값 범위 안에 충분히 들어오는 값인데도 불구하고, 저장된 maxIntValue를 intValue안에 넣으면 당연히 정상일 텐데 왜 형변환을 해야 하는지 궁금합니다.
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
정적 팩토리 메서드의 위치는 어딜까요?
안녕하세요 강사님. 강의 잘듣고있습니다. 다름이 아니라 정적 팩토리 메서드는 어디쯤 위치하느게 좋을까요? 우테코 컨벤션이나, 구글 컨벤션을 보면, public, private, ... static.. etc.. 순으로 정의하라고 나와있는데요 생성자에 의미를 부여하는 팩토리 메서드 public static 은 어디쯤 두는게 좋을까요? 컨벤션상으로는 하단이 맞는데.. 저는 개인적으로 생성자 바로 밑에 둬야할 것 같아요. 강사님 의견은 어떠실까요?
-
해결됨C개발자를 위한 최소한의 C++
nullprt vs null
안녕하세요. 마지막 주소록 예제를 따라하면서 궁금한 부분이 있어 질문드립니다. 두 가지 예제를 비교했을 시, 포인터를 초기화 시, NULL / nullptr 두 가지 방식을 모두 사용되고 있습니다. NULL로 초기화와 nullptr 초기화 방식에 있어, 어떠한 기준이 있는지 궁금합니다 ~ int MyList::addNewNode(const char* pName, const char* pPhone) { UserData* pNewUser = nullptr; // nullptr로 초기화 if (findNode(pName) != nullptr) return 0; pNewUser = new UserData; strcpy_s(pNewUser->name, sizeof(pNewUser->name), pName); strcpy_s(pNewUser->phone, sizeof(pNewUser->phone), pPhone); pNewUser->pNext = NULL; // NULL로 초기화 return 0; }void CMyList::releaseList(void) { CUserData *pTmp = m_Head.pNext; CUserData *pDelete = NULL; while (pTmp != NULL) { pDelete = pTmp; pTmp = pTmp->pNext; delete pDelete; } m_Head.pNext = NULL; }
-
미해결스프링 핵심 원리 - 기본편
Appconfig에대해서
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.MemberService memberService; @BeforeEach public void beforEach(){ Appconfig appconfig = new Appconfig(); memberService = appconfig.memberService(); } @Test void join(){ Member member = new Member(1L,"memberA",Grade.VIP); memberService.join(member); Member findMember = memberService.findMember(1L); Assertions.assertThat(member).isEqualTo(findMember); }public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } public OrderService orderService(){ return new OrderServiceImpl(memberRepository(), discountPolicy()); } public MemberRepository memberRepository(){ return new MemoryMemberRepository(); } public DiscountPolicy discountPolicy(){ // return new FixDiscointPolicy(); return new RateDiscountPolicy(); }이코드에서 memberService _ appconfig.memberService();Appconfig클래스에서 memberSerivce()를 호출하고return MemberSergiceImpl로가서 this.memverRepository = MemoryMemberRepository()가되서 MemberServiceImpl클래스에서 memberRepository가 save하고 findby를 사용할수 있게되는건가요?
-
해결됨김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션
ClientV6 코드를 조금 변경해보았는데,,, 질문드립니다.
안녕하세요, 영한님뒤에 있을 채팅 프로그램을 직접 만들어보려다가 난관에 봉착해 질문드립니다.ClientV6 코드 내의 while문을 Thread에 넣는 작업을 진행하였습니다.아직 클라이언트에서 입력 값을 넣기 전임에도 불구하고 서버에서 EOFException이 나는데 그 이유를 모르겠습니다. 혹시 제가 코드를 잘못 짠 것인지아님 놓치는 부분이 있는 것인지 한 번 봐주실 수 있나요?public class ClientV6_1 { private static final int PORT = 12345; public static void main(String[] args) throws IOException { log("클라이언트 시작"); try ( Socket socket = new Socket("localhost", PORT); DataInputStream input = new DataInputStream(socket.getInputStream()); DataOutputStream output = new DataOutputStream(socket.getOutputStream()); ) { log("소켓 연결: " + socket); new Thread(new ClientHandler(socket), "ClientHandler").start(); } catch (IOException e) { log(e); } } }public class ClientHandler implements Runnable { private final Socket socket; private final DataInputStream input; private final DataOutputStream output; public ClientHandler(Socket socket) throws IOException { this.socket = socket; this.input = new DataInputStream(socket.getInputStream()); this.output = new DataOutputStream(socket.getOutputStream()); } @Override public void run() { Scanner scanner = new Scanner(System.in); try { while (true) { System.out.print("전송문자: "); String toSend = scanner.nextLine(); // send output.writeUTF(toSend); log("client -> server: " + toSend); if (toSend.equals("exit")) break; // receive String received = input.readUTF(); log("client <- server: " + received); } } catch (IOException e) { e.printStackTrace(); } finally { close(socket); } } }
-
미해결김영한의 실전 자바 - 중급 2편
List 생성할때
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요!문제와 풀이를 해보다 문득 궁금해졌는데,혹시 ArrayList 생성할때List<Integer> list = new ArrayList<>(); ArrayList<Integer> list = new ArrayList<>();두개의 차이가 있을까요 ..?
-
미해결김영한의 실전 자바 - 중급 1편
불변객체 질문있습니다
public class ImmutableMain1 { public static void main(String[] args) { ImmutableObj obj1 = new ImmutableObj(10); ImmutableObj obj2 = obj1.add(20); //계산 이후에도 기존값과 신규값 모두 확인 가능 System.out.println("obj1 = " + obj1.getValue()); System.out.println("obj2 = " + obj2.getValue()); } }public class ImmutableMain2 { public static void main(String[] args) { ImmutableObj obj1 = new ImmutableObj(10); obj1.add(20); //계산 이후에도 기존값과 신규값 모두 확인 가능 System.out.println("obj1 = " + obj1.getValue()); // System.out.println("obj2 = " + obj1.add(20).getValue()); //Q.이렇게 하면 안되는지?? } } Main1에서 했던것처럼 obj2를 하나 새로 만들지 않고 2에서 obj1.add(20).getValue() 이렇게 해도 원하는 결과값이 나오는데 새로 obj2를 만드는것과 어떤 차이가 있나요?? Main2에서 저렇게 코드를 쳤을때 인스턴스값을 확인해보니 1과 2가 각각 다른 값이 나오더라고요 ImmutableObj에서 이미 return new ImmutableObj(result);을 사용하고 있어서 이때 인스턴스가 이미 생성되어서 그렇다고 생각하는데 맞을까요?? 그러면 이미 생성되었는데 또 obj2를 다시 만드는 이유는 무엇인가요??
-
미해결Java/Spring 주니어 개발자를 위한 오답노트
의존하는 객체 final 선언 질문드립니다.
안녕하세요, '서비스란 무엇인가' 강의를 보고 질문드립니다. 서비스는 불변으로 만들기 위해 서비스에서 쓰고 있는 리포지토리를 final로 선언하라고 강의를 통해 배웠습니다. 컨트롤러에서 쓰는 서비스나 리포지토리에서 쓰는 것들도 final로 선언해도 될까요? 불변이면 생성된 객체가 변경할 수 없는 것 이라는 정도만 이해하고 있는데 다른 레이어도 final로 선언하면 더 안정적인 애플리케이션이 되는 거 아닌가? 라는 생각이 들어 질문드립니다! 감사합니다.
-
해결됨김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
리터럴과 상수
[질문 내용] 리터럴은 개발자가 직접 입력한 고정된 값이라, 리터럴 자체는 변하지 않는다고 강의에서 배웠는데, 그러면 상수값도 변하지 않는 값이라고 하면 리터럴과 상수의 차이는 무엇인지 궁금합니다.
-
미해결스프링 핵심 원리 - 기본편
의존관계주입 OCP, DIP
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]자동의존관계 주입시 중복되는 빈이 2개일때파라미터 이름, Qualifier 를 쓴다고 하는데 쓰는거는 이해가 가는데 들으면거 의문이 든게 만약 이런걸 붙여서 Impl 코드를 수정해야된다면 예를들어 파라미터이름을 rateDiscountpolicy 로 쓰다가 fixDiscountPolicy로 바꾼다면 예전에 배운 DIP와 OCP 를 지켜지는게 맞는가 싶더라고요, 만약 중복을 분리하기위해 그렇게한다면 new RateDiscountPolicy 에서 new FixDiscountPolicy 로 바꾸는것과 큰차이가 잇을까였습니다.결국 구현체를 바꾸고싶을때 직접적으로 코드를 수정해야된다면 이러한 규칙이 잘맞는지 굳이 써야할이유가 있는지 궁금합니다
-
해결됨김영한의 실전 자바 - 기본편
상속에서 this 질문있습니다.
결론부터 말씀드리면 자식 클래스 에서 아무런 멤버변수를 초기화하지 않을 때,생성자에서 this.[변수명]으로 멤버변수를 초기화 할 수 있는걸로 압니다.그런데 아래 이미지는 this로 접근한 동일 이름의 변수에서 왜 부모 변수가 변경되는건가요?자기자신의 멤버 변수가 생성자에서 초기화되는 개념이 아닌가요? 부모의 price 100으로 고정 자식 클래스에서 price를 생성자에서 초기화 자식 인스턴스의 printCar() 메서드 호출 결과. 둘다 1000인 이유가는 무엇인가요? 부모는 100이 아닌
-
미해결김영한의 실전 자바 - 중급 1편
private 인데 static 을 붙인이유
강사님 답변을 부탁드려봅니다 왜 private인데 static 을 붙여뒀는지 알수있을까요?어차피 NetworkMessage클래스를 Network클래스 안에서만 쓰려고 private 을 붙여뒀는데 왜 static 을 붙여둔건가요? public class Network { public void sendMessage(String text) { NetworkMessage networkMessage = new NetworkMessage(text); networkMessage.print(); } private static class NetworkMessage { private String content; public NetworkMessage(String content) { this.content = content; } public void print() { System.out.println(content); } } }