묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
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); } } }
-
미해결김영한의 실전 자바 - 중급 1편
static 붙인 이유
왜 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); } } }
-
해결됨김영한의 실전 자바 - 중급 2편
직접 구현하는 연결 리스트2- 데이터 추가 삭제1, 코드 리뷰 좀요.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 영상 강의를 보면서 영상에 나온 그림을 보면서 코드를 만들어봤습니다.그래서 코드 리뷰 좀 받고 싶게 되더군요.좀 부족하지만 올립니다.힌트는 동영상에 나오는 그림에 나오는 노드 연결 했을때 나오는 코드(초록색 으로 칠해져 잇는 그림 들) 를 보고 영상을 돌려보면서 만들었습니다.메인이 된것은 NodeMain3에서 스테틱 메서드 입니다.반환이 안되면 값이 똑같이 나와서 반환을 해주었습니다.(이유를 모르겠음)메인 코드 결과추가1인덱스 리무브에서, 맨마직꺼 리므브는 안되겟네요. 올리고나서 발견..추가2설명 하라고 하신다면 솔직히 못 하겠습니다. sout로 node 값 찍어 보고, 어찌저찌 하다가 된거 라서요. 답변 부탁 드립니다.
-
미해결스프링 핵심 원리 - 기본편
Appconfig관련질문입니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]MemberAppzmf래스에서 MemberService memberService = appconfig.memberService(); 여기서 appconfig.memberService()을 호출합니다 public MemberService memberService(){ return new MemberServiceImpl(new MemoryMemberRepository()); } 여기서MemberServiceImpl로가서 그다음에 어떻게해서 MemoryMemberRepository()가 어떻게 실행되느건가요? public MemberServiceImpl(MemberRepository memberRepository){ this.memberRepository = memberRepository; } MemberServiceImpl(MemberRepository memberRepository)->MemberServiceImpl() 괄호안에 new MemoryMemberRepository()이 코드가 들어가는건가요?
-
해결됨오브젝트 - 기초편
2-4-예제, 절차에서 객체로 코드 오타 제보드립니다.
안녕하세요 강사님2-4-예제. 절차에서 객체로 강의를 수강하고 있습니다.해당 내용이 강의를 수강하는데 불편함은 없지만 제보 드립니다. 강의시간 7:01에 isSatisfiedBy() 함수에 새로운 조건문 추가시if () {} else if() {} if() { //if로 코드가 추가 되어 있습니다.} https://github.com/eternity-oop/object-basic-02-04/blob/main/src/main/java/org/eternity/reservation/domain/DiscountCondition.java샘플 코드도 확인해 보았는데 if로 된 부분을 확인 하였습니다. 감사합니다.
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
단축키 질문드립니다
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 14분쯤 getSelectedRowIndex 메서드 추출하실때두 줄을 한번에 선택하시는데 단축키가 뭘까요..
-
미해결스프링 핵심 원리 - 기본편
coreApplication은 실행 시 debug레벨로 찍히는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]OrderApp 이나 MemberApp실행 시 로그가 출력되지 않는 경우는 logback.xml 파일 추가해서 해결하였지만,logback 설정을 하지 않더라고 CoreApplication 실행 시에는 debug 레벨로 로그가 찍히는 이유가 궁금합니다.