묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
isLandMineCell() 메서드 질문
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 리팩토링한 MinesweeperGame.open() 메서드에 대해서 질문있습니다! private static void open(int row, int col) { if (row < 0 || row >= BOARD_ROW_SIZE || col < 0 || col >= BOARD_COL_SIZE) { return; } if (BOARD[row][col].isOpened()) { return; } if (isLandMineCell(row, col)) { return; } BOARD[row][col].open(); if (BOARD[row][col].hasLandMineCount()) { return; }수업을 따라오면서 isLandMineCell()은 Cell이 지뢰인지 확인하는 메서드이기 때문에 MineSweeperGame 클래스의 메서드가 아닌, Cell 클래스의 메서드가 되어야 open 메서드가 동일한 추상화 레벨을 갖는게 아닌가 하는 의문이 들었습니다. if (BOARD[row][col].isOpened()) ... if (isLandMineCell(row, col)) ...위 두 조건문의 추상화레벨이 통일되지 않다는 생각도 들었구요. isLandMineCell이 Cell 클래스의 메서드로 작성하지 않은 이유가 뭔지 궁금하고, 제가 가지고 있는 생각(추상화레벨 관련)이 잘못된 이유도 궁금합니다. 항상 친절한 설명 감사합니다 많이 배우고 있습니다:)
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
Cell[][]BOARD 매개변수받기
강의 질문 있습니다![섹션4.객체지향패러다임] - SRP: Single Responsibility Principle 강의 - 14분38초경 코드28번줄 cosoleOutputHandler.showBoard(BOARD); 이 부분에서 해당 Cell[][]BOARD를 매개변수로 받고 showBoard(Cell[][] board) 사용되는 부분이 이해가 잘 안갑니다..! 흐름이 어떤식으로 진행되며, 어떤 과정으로 코드가 진행되는지 궁금합니다!
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
ConsoleInputHandler에서 왜 final붙여야 하는지
18줄 코드인 final을 붙여야하는 이유가 있을까요?
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
정적 생성자 메서드 of, from
정적 생성자 메서드의 메서드 명을 정하실 때 of 혹은 from 그 외 추가로 create 등등... 몇 가지 더 있는걸로 아는데, 그 차이가 제 입장에서는 되게 미세하기도 하고 잘 와닿지 않는데 강사님은 어떤 기준을 두고 메서드 명을 정하시나요??
-
미해결TS/JS 디자인 패턴 with Canvas: 제로초에게 제대로 배우기
React 환경에서 클래스형 디자인 패턴 활용에 관한 질문
안녕하세요, React 환경에서 다음 강의를 보며 예제연습중인 수강생입니다. 먼저, 함수형 컴포넌트가 주류가 된 현대 React 생태계에서도 클래스형 디자인 패턴이 많이 활용되는지 궁금합니다. 특히 싱글톤, 팩토리, 빌더와 같은 클래스 기반 디자인 패턴들이 여전히 실무에서 많이 사용되고 있는지 알고 싶습니다. 또한 이러한 클래스 기반의 디자인 패턴 사용 시, React의 재렌더링 측면에서 성능 이슈가 발생하지는 않는지, 실제 개발 경험에서 어떤 장단점이 있는지 궁금합니다.
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
Getter관해서
수업을 통해 무분별한 Getter/Setter 사용을 지양해야 한다는 내용을 들었습니다.저는 Entity를 만들 때 @Getter를 자주 사용했는데, 수업에서는 "필요한 경우에만 추가하라"고 설명하더라고요.그런데 여기서 말하는 "필요한 경우"가 어떤 상황을 의미하는지 잘 감이 오지 않습니다.예를 들어, 비밀번호 같은 중요한 정보는 Getter를 사용하기보다는 내부에서 메서드를 통해 사용하는 게 좋다는 건 이해가 됩니다.그렇다면 일반적인 경우에서 Getter는 어떤 상황에서 사용해야 하는 걸까요...?
-
미해결김영한의 실전 자바 - 기본편
배열 크기 자동으로 설정되나요?
입문편에서는 배열의 크기를 입력하지 않고 데이터를 직접 넣어서 자동으로 크기를 설정할 수 있었는데int[] students; students = new int[]{90, 80, 70, 60, 50}; 강의에서 실습했던 코드Student[] students = new Student[2]; students[0] = student1; students[1] = student2;여기에서 new Student[2]; 의 부분을 new Student[]={student1,student2}; 이렇게 고치면 자동으로 크기를 설정 해 주나요?
-
미해결스프링 핵심 원리 - 기본편
ComponentScan과 잘 맞는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]안녕하세요 선생님. 강의 중간에 @postconstruct @predestroy 를 쓰면 componentscan과 잘 맞는다고 하셨는데 이게 어떤 의미인지 이해가 안됩니다..
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
메인 메모리 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]volatile를 통해 메인 메모리에서 값을 바로 확인 하는건데 그러면 메모리는 어떻게 값이 변경 되는 것을 알 수 있는 건가요?메인 메모리에서 값이 변경이 안되면 volatile을 사용해도 변경 된 걸 알 수 없는거 아닌가요?제가 너무 깊게 들어간걸까요...ㅜㅜ... 운영체제?를 공부해야 되는 부분일까요??,,
-
미해결김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션
SessionV3 객체 예제는 실제 HttpSession 처럼 동작하는 객체일까요?
[질문 내용]여기서 작성한 Session 객체도 혹시 HttpSession 객체랑 비슷하게 동작하는 방식일까요?
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
[오타 제보] pdf 13장 정리 부분
[오타 제보]대상 강의록: 13. 스레드 풀과 Executor 프레임워크2.pdf위치: p.49대상 문단: 밑에서 3번째 "그래서 일반적인 상황이라면 ~ ..."수정 전(1): 한번에 처리할 수 있는 수를 제안하고 안정적으로 처리하고 싶다면 ...수정 후(1): 한번에 처리할 수 있는 수를 제한하고 안정적으로 처리하고 싶다면 ...--수정 전(2): 그러다가 일반적인 상황을 벋어날 정도로 ~ ...수정 후(2): 그러다가 일반적인 상황을 벗어날 정도로 ~ ... 이번 강의도 잘 들었습니다. 양질의 강의 제공에 감사드립니다! 저랑 너무 잘 맞는 강의스타일 입니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
interrupt() 호출 질문 입니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요! interrupt() 호출 시점에서 TIMED_WAITING → RUNNABLE로 전환될 때 "run 작업중" 로그가 찍히는 건가요?"작업 중단 지시"가 찍히지 않는 이유는 sleep() 실행 중 InterruptedException이 발생해서 catch를 타는건가요?
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
이름 바꾸기
23번째줄에서 for문 i 말고 지뢰라는 이름으로 (예를들어, mines 등 ) 바꿔도 되지 않을까요 ..?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
try-catch-finally를 사용해서 finally { notify() } 를 하지 않는 이유?
예제 3번 코드를 보다 의문이 들어 질문드립니다.코드를 보면,@Override public synchronized void put(String data) { // 버퍼가 가득 찬 경우, 빌 때까지 주기적으로 체크 while (queue.size() == max) { log("[put] 큐가 가득 참, 생산자 대기"); try { wait(); log("[put] 생산자 깨어남"); } catch (InterruptedException e) { throw new RuntimeException(e); } } queue.offer(data); log("[put] 생산자 데이터 저장, notify() 호출"); notify(); // WAIT -> BLOCKED }에서 인터럽트 예외가 발생하면 밑의 notify() 코드가 호출이 되지 않습니다.이 문제 상황에서 한 스레드라도 notify()문을 호출하지 않게되면 영원히 대기 중인 스레드가 생겨서 정상적인 프로그램 종료가 일어나지 않을 것 같습니다. 그래서 제 생각은 notify() 메서드를 finally문으로 감싸줘야 한다고 생각하는데 이게 맞는지 궁금합니다.
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
stack 대신 queue 를 사용해 bfs 로 변경해도 되나요??
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 아래처럼 Stack 대신 Queue 를 사용해 BFS 로 변경해도 문제가 없을까요? private void openSurroundedCellsBFS(CellPosition cellPosition) { Queue<CellPosition> queue = new LinkedList<>(); queue.add(cellPosition); while (!queue.isEmpty()) { openAndEnqueueCell(queue); } } private void openAndEnqueueCell(Queue<CellPosition> queue) { CellPosition currentCellPosition = queue.poll(); // 큐에서 꺼냄 if (isOpenedCell(currentCellPosition)) { return; } if (isLandMineCellAt(currentCellPosition)) { return; } openOneCellAt(currentCellPosition); if (doesCellHaveLandMineCount(currentCellPosition)) { return; } List<CellPosition> surroundedPositions = calculateSurroundedPositions(currentCellPosition, getRowSize(), getColSize()); for (CellPosition surroundedPosition : surroundedPositions) { queue.add(surroundedPosition); } }
-
미해결스프링 핵심 원리 - 기본편
2개의 빈 등록 오류
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요. https://drive.google.com/file/d/1xmVgaw7U85V7WRYzRUU36ayWkFBmjSZ2/view?usp=sharing CoreApplicationTests 에서 주석 처리 후에도 오류가 발생합니다. 에러 메시지를 읽어보니 같은 이름의 스프링 빈이 두 개 등록되어서 일어난 오류 같은데, 아무리 찾아봐도 어디서 빈이 두 개 등록되었는지 찾을 수 없어 질문 드립니다.
-
미해결스프링 핵심 원리 - 기본편
AI 말고 지식공유자님의 답변 부탁드립니다
https://www.inflearn.com/community/questions/1525242https://www.inflearn.com/community/questions/15265171주일이 지나도 답변이 안 달려서 다시 올려봅니다.
-
미해결스프링 핵심 원리 - 기본편
이 경우는 왜 그런 것일까요?
아래와 같은 AppConfig를 설정 정보로 컨테이너를 생성했을 때@Configuration class AppConfig { @Bean public BeanA beanA1() { return new BeanA(); } @Bean public BeanA beanA2() { return beanA1(); } @Bean public BeanA beanA3() { return new BeanA(); } }빈 이름이 beanA1, beanA2 인 것 끼리는 같은 객체고 beanA3 혼자 다른 객체로 빈이 등록되었는데요결국에는 메서드 beanA2() 의 return문에 쓰인 beanA1() 은메서드 beanA3() 의 return문에 쓰인 new BeanA() 과 다를 게 없다고 생각하였으나 결과는 다르게 나오더라고요. @Configuration 을 적용함으로써beanA2 가 등록될 때, return문에 있는 beanA1() 를 따라갔을 때 있는 new BeanA() 를 만나도CGLIB 를 통해 조작된 바이트코드로 인해 정말 new를 다시 하지 않고 (원래 자바 코드라면 new를 했겠지만)메서드 beanA1() 에서 이미 등록된 빈을 참조하여 등록됩니다. 여기서 의문인 점은 beanA3 가 등록될 때는 왜 원래 자바 코드 그대로 new 를 실행하게 되나요?바이트코드를 조작할 때, return 문에 들어가는 게 '메서드'인지 'new ~' 인지 등의 분기가 또 들어가는 건가요?만약 제 테스트가 틀린 거라면 아래 테스트 코드를 참고해주시기 바랍니다.public class AppConfigTest { @Test void test1() { ApplicationContext ac = new AnnotationConfigApplicationContext(Appconfig.class); BeanA beanA1 = ac.getBean("beanA1", BeanA.class); BeanA beanA2 = ac.getBean("beanA2", BeanA.class); BeanA beanA3 = ac.getBean("beanA3", BeanA.class); System.out.println(beanA1); // BeanA@e54303 System.out.println(beanA2); // BeanA@e54303 System.out.println(beanA3); // BeanA@e8df99a (혼자만 다름) } @Configuration static class Appconfig { @Bean public BeanA beanA1() { return new BeanA(); } @Bean public BeanA beanA2() { return beanA1(); } @Bean public BeanA beanA3() { return new BeanA(); } } }
-
미해결김영한의 실전 자바 - 중급 2편
hashCode() 오타? 질문
강의 자료 보면, 전부 다 해시코드 만들 때, Object.hashCode()를 사용한다고 되어있는데, 막상 equals()와 hashCode() 오버라이딩된 것을 보면, Objects인데, 둘은 서로 다른 것 아닌가요? 오타 아닌가요?
-
미해결김영한의 실전 자바 - 중급 1편
catch 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]예외가 터지면서 객체가 생성이 됐지만 참조값 대입을 안했는데 어떻게 catch (NetworkClientExceptionV2 e)에서 참조값을 가지고 있는 건가요?