묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
ocp를 지키기 위해 enum vs interface
안녕하세요. 테스트 강의부터 좋은 강의 감사합니다.강의를 보던 도중에 궁금한 점이 생겨서 질문드립니다.OCP를 만족하는 GameLevel을 만들기 위해 enum도 비슷한 역할을 할 수 있는데 interface를 사용한 이유가 궁금합니다 !@Getter public enum GameLevel { BEGINNER(...), MIDDLE(...) private final int rowSize; private final int colSize; private final int landMineCount; }enum으로 구현 시 새로운 레벨의 추가가 GameLevel의 변화를 가져오기 때문인지..혹은 이를 구분하는 다른 기준이 있을지 궁금합니다.
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
의도한 예외와 의도하지않은 예외가 정확하게 무슨뜻인가요 ?
우선 강의 잘 듣고있습니다. 의도한 예외와 의도하지 않은 예외가 조금 헷갈리는데 제가 이해한 개념이 맞는지 여쭈어봅니다. 강사님께서 말씀하시는 의도한 예외는 개발자가 인지하고 Exception을 던지는 경우를 말씀하시고 의도하지 않은 예외는 개발자가 인지하지 못하고 Exception이 발생한다는 뜻일까요 ?? 그렇다면 잘짜여진 코드에서는 모두 의도한 예외가 되어야 되는건가요 ?? 의도하지 않은 예외를 사용하는 일은 없는건가요 ? 의도한 예외 - 개발자가 예상하고 처리한 예외의도하지 않은 예외 - 개발자가 놓치거나, 빼먹은 예외의도하지 않은 예외 발생시 의도한 예외로 바꾼다.이렇게 이해하면 될까요 ?
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
안녕하세요 private메소드에 대해서 질문 있습니다.
제가 헷갈려서 질문드려요!private 메소드를 만들게 된다면 무언가 책임이 이상하거나 설계가 잘못되었다는 신호로 알고 있는데요 private static void checkIfGameIsOver() { boolean isAllOpened = isAllCellOpened(); if (isAllOpened) { gameStatus = 1; }}만약 이런 메서드를 테스트 한다고 하면 어떻게 해야하는건가요?! private메소드를 현업에서도 사용하시는지 궁금합니다.그리고 제가 어디를 잘못알고 있는지도 궁금해요!
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
compareAndSet()에 대해 질문 있습니다.
private static int incrementAndGet(AtomicInteger atomicInteger) { int getValue; boolean result; do { getValue = atomicInteger.get(); log("getValue: " + getValue); result = atomicInteger.compareAndSet(getValue, getValue + 1); log("result: " + result); } while (!result); return getValue + 1; }getValue = atomicInteger.get(); 에서 조회한 값이 compareAndSet() 연산을 할때 바뀌지 않아야 바꿀려고 한 값으로 바꾸고 true를 반환한다고 이해했습니다.궁금한 부분은 getValue = atomicInteger.get(); 여기서 값을 조회하거나 중간에 스레드가 바꾼 값을 조회 한다는걸 compareAndSet()에서 구분을 할 수 있나요?
-
미해결김영한의 실전 자바 - 기본편
매개변수로 전달 되는 방식
[질문 내용]soundAnimal , flyAnimal 메서드 같은 경우 bird가 매개변수로 전달될 때 정의된 매개변수 타입에 따라 자동으로 업캐스팅이 된다고 이해하는 것이 맞을까요?
-
미해결김영한의 실전 자바 - 중급 2편
제네릭 메서드
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요. package generic.ex4; // 클래스 옆에 <> 넣으면 제네릭 타입 public class GenericMethod { public static Object objMethod(Object obj) { System.out.println("Object print: " + obj); return obj; } // 메서드 안에 <> 넣으면 제네릭 메서드 public static <T> T genericMethod(T t) { System.out.println("Generic print: " + t); return t; } public static <T extends Number> T numberMethod(T t) { System.out.println("bound print: " + t); return t; } }여기 public static <T> T genericMethod(T t) 코드를 보면 static일 때 사용이 가능한데 강의 자료에서 여기 static일 땐 사용이 불가능하다는 말이 이해가 잘 안 갑니다. 둘의 차이점이 무엇인가요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
CPU와 스레드간 상호작용에 대해 질문 있습니다.
CPU 코어와 메모리가 동작하는 이미지가 자주 나왔는데요헷갈리는 부분이 있어서 질문 합니다.스레드, 프로세스, 메모리 등 여러 개념들이 존재하지만 CPU와 직접적으로 통신(?) 하는 주체는 스레드라고 이해를 해도 될까요?1번이 맞다면 스레드는 본인이 실행한 코드 한줄 한줄을 CPU로 보내고 CPU는 해당 코드 한줄을 해석하고 그에 따라서 프로세스에 할당된 메모리 영역(힙, 데이터, 코드)이나 스레드에 할당된 메모리 영역(스택)에 접근해서 데이터를 읽거나 저장한다 라고 이해를 해도 될까요?Java의 thread는 OS의 kernel thread와 1:1로 mapping 되는걸로 알고 있는데 그러면 CPU는 kernel thread와 통신 한다고 이해하면 될까요?
-
해결됨김영한의 실전 자바 - 중급 2편
getter, setter
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. package generic.animal; public class Animal { private String name; private int size; // 생성자 만들기 // (Alt + Insert) Generate - Constructor public Animal(String name, int size) { this.name = name; this.size = size; } public String getName() { return name; } public int getSize() { return size; } // sound 메서드 public void sound() { System.out.println("동물 울음 소리"); } @Override public String toString() { return "Animal{" + "name='" + name + '\'' + ", size=" + size + '}'; } }이 코드에서 set()은 안 만들고 get()만 만드는 이유는 무엇인가요?
-
미해결김영한의 실전 자바 - 기본편
맴버 변수와 스택 영역 관계
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]맴버 메소드 호출은 은 힙 영역에 생성되지 않고 메소드 영역에서 참조 후 그걸 main 함수에서 불러올 시 스택 영역에 해당 메소드가 쌓이는걸로 이해 했습니다 그럼 힙 영역에 생성되는 맴버 변수의 경우 main 함수에서 불러올 시 스택 영역에 쌓이지 않는지 궁금합니다
-
미해결김영한의 실전 자바 - 중급 2편
T 타입 -> Integer 타입
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요. package generic.ex1; public class BoxMain3 { public static void main(String[] args) { GenericBox<Integer> integerBox = new GenericBox<Integer>(); integerBox.set(10); // integerBox.set("문자"); // integer 타입만 허용, 컴파일 오류 발생 Integer integer = integerBox.get(); } }GenericBox<integer> 이렇게 작성하면 T 타입이 Integer로 바뀐거라고 하셨는데 그러면 Integer integer = integerBox.get();을 굳이 안 해도 되고 integerBox.get();이렇게만 적어줘도 되는 거 아닌가요? 또 다시 Integer 타입으로 설정해주는 이유는 무엇인가요?
-
미해결김영한의 실전 자바 - 중급 2편
다운캐스팅
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요. package generic.ex1; public class BoxMain2 { public static void main(String[] args) { ObjectBox objectBox = new ObjectBox(); objectBox.set(10); Object object = objectBox.get(); System.out.println(object); } }이렇게 해도 잘 출력되는데 다운캐스팅을 또 해줘야 하는 이유가 무엇인가요?
-
미해결김영한의 실전 자바 - 중급 1편
람다 함수 강의 위치 (섹션9. 지역클래스-지역변수캡처3)
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]섹션9의 지역클래스 - 지역변수캡처3 강의의 2:45 구간에서,람다는 나중에 다른 강의에서 설명해주신다고 하셨는데, 혹시 그 다른 강의가 무슨 강의인지 알 수 있을까요? 다른 강의의 대시보드에서 찾을 수 없었습니다.
-
해결됨유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
개발 도서 질문
혹시 게임개발이나 개발관련 추천하시는 책이 있으실까요?최근 남는시간에 책을 읽고있는데 지식공유자님이 추천하시는 책을 읽어보고 싶어서 질문드립니다!책을 많이 읽었던편이 아니라 유명한거라도 괜찮습니다 있으시다면 2-3가지 정도 부탁드립니다 (_ _)감사합니다 추가로 섹션6에 업적/미션 Pt.2에 Resources/Textures 폴더를 누락하신 듯 합니다.때문에 IconGolds와 IconGems 텍스쳐를 불러오지 못하네요통합강의자료에는 있어서 그걸로 임포트 했습니다!
-
해결됨김영한의 실전 자바 - 중급 2편
타입 이레이저 에서 나온 코드(EraserBox<T>) 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 타입 이레이저 를 복습하는 도중에 뭔가 이상한점을 발견해서 질문을 드립니다.영한님 강의에서 보면이런식으로 하셨는데여기서 의문이 2가지 생겼습니다.이때까지 영한님의 코드를 살펴보면제네릭 클래스를 만들고,타입 매개변수(private T value or t1;)를 만들었습니다.근데 여기에서는 바로 'T'를 사용 하셨습니다.그리고 2번째 메서드 에서return new T(); 라는 코드가 이해가 안 갑니다. 즉 첫 번째 질문은첫번째 메서드 에서 바로 'T'를 사용하신 이유가 궁금하고두번째 질문은return new T() 코드가 어떤 코드인지 설명 해주실수 있으신가요?답변 부탁 드립니다.
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
참조 관계를 끊고 다시 값을 입력하는 곳에 있어 질문이 있습니다
안녕하세요 강사님 다른 학생의 질문의 답변을 보고 질문이 생겨서 이렇게 글을 작성합니다. 강사님께서 관계를 끊고 다시 값을 입력하고 싶을 때 다음과 같이 temp를 사용해서 하면 된다고 하셨는데 tempCam1 과 tempCam2를 선언할 때 cam1 과 cam2를 참조하면서 선언이 되는 것이 아닌가요? 그래서 null 값을 입력하면 tempCam도 null 값을 받을 것 같은데 tempCam은 왜 null 값이 되지 않는지 궁금합니다. 좋은 강의 만들어주셔서 정말 감사합니다.
-
미해결김영한의 실전 자바 - 기본편
교안(pdf)로만 학습해도 되나요?
학습 교안에 차트별 내용이 잘 정리되어있어 보여서 그런데, 강의 안보고 교안만 보고 공부를 해도 되나요?
-
미해결김영한의 실전 자바 - 중급 2편
메모리 손실
[질문 내용]연결 리스트에서 메모리가 하나 손실되면 그 이후의 연결된 노드들은 어떻게 찾나요?
-
미해결김영한의 실전 자바 - 중급 2편
제네릭 타입 변환
이 코드에서 E tempElement = (E) elementData[i];이 과정이 필요한 이유를 잘 모르겠습니다. 실제로 저장하는 타입은 E 타입인데 만약 제가 Object tempElement = elementData[i];이렇게 하면 E 타입 = Object 타입 ( 부모는 자식이 될 수 있어도 자식은 부모가 될 수 없다 )이게 안되기 때문인가요 ? 추가 질문 : Object 배열 안에 예를 들어 String , int 형이 다 들어 있는데, 우리는 타입을 String 을 지정했을떄저렇게 E tempElement = (E) elementData[i]; 을 해줘야 런타임이 아닌 컴파일 시점에서 에러를 발견하여 사전에 에러를 차단할 수 있는 것인가요 ?
-
미해결김영한의 실전 자바 - 중급 2편
제네릭 타입 관련 질문
@Override public int[] indexesOf(E element) { int[] arr = new int[size] ; int count = 0 ; for (int i = 0 ; i < size ; i++){ if( elementData[i].equals(element)){ arr[count++] = i ; } } return arr ; }여기에서 if 문을 if((E)elementData[i].equals(element) 로 하는게 (E) 를 넣지 않는 것보다 나을까요?그리고 누군가가 왜 낫냐고 물어보면 뭐라고 대답해줘야 하나요 ? 그리고 Objects.equals(elementData. element) equals 메서드와는 어떤 차이점이 있나요 ?
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
While1_2 질문 있습니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]count 값 증감에 대한 질문입니다 증감연산자가 헷갈려서 다시 해당 강의를 보고 왔지만 아직도 논리적으로 잘 이해를 하지 못하겠습니다.질문1. 제가 주석으로 작성한 부분이 맞는건가요? 틀리다면 이유를 맞다면 다음 질문을 확인 부탁드립니다. 질문2. 앞선 질문1이 맞다면 1번 주석은 이해가 가는데 2번 주석이 이해가 가지않습니다. 첫째로 우항 count의 값이 0이라고 가정했을때 좌항 count값은 0이됩니다. 여기까진 이해가 가는데 결국 좌항의 count값이 0이 된 후 마지막엔 count값을 증감시키는거 아닌가요? 그렇다면 밑에 sout을 한 부분에서 count 변수 값이 증감된 값이 나와야 하지 않나 싶습니다 증감 된 후에 어떠한 변수에 할당하지 않아서 그런건가 어렴풋이 생각은 해보는데 잘 모르겠어서 확실히 알고 싶어 질문드립니다