묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
Member 클래스와 HashMap에 관하여 질문 있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]안녕하세요. 스프링 강의를 잘 듣고 있는 사람입니다. 회원 만들기 예제1을 따라 만들던 도중 궁금한 점이 생겨 문의 드립니다. 문의 사항은 아래와 같습니다.Member 클래스를 만들때 Member를 Entity라고 표현을 하시고 클래스 다이어그램에선 Member에 대한 내용이 없어서 이 부분이 궁금합니다. 각 클래스마다 Member를 따로 객체로 생성하지 않고 main문에서 member 객체를 생성하기에 클래스 다이어그램에 들어가진 않은거 같은데, 이 Member 클래스를 왜 Entity라고 표현하시는지 궁금합니다. MemberRepository를 구현하는 MemoryMemberRepository의 해쉬맵의 put을 보면 Long 타입 하나와 Member 하나를 저장할 수 있는 해쉬맵인데요, 근데 Member엔 이미 ID를 저장할 수 있는 private Long id가 있고 main문에서 객체를 생성할때 값을 집어 넣어주는데, 굳이 Member.getId()를 통해 Id 값을 저장해주었는지가 궁금합니다.
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
입출력 테스트 관련 질문 있습니다!
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요. 우선 강의로 너무 많은 도움을 받았습니다! 감사합니다. 다름이 아니라 로드맵을 따라 해당 강의와 테스트 코드 작성 강의를 모두 수강했는데 현재 지뢰찾기와 스터디카페에서는 콘솔에서 입출력을 받게 되는데 입출력에 대한 예외처리를 InputHandler가 하는 것처럼 다가왔습니다.이부분에서 테스트를 작성하려고 하는데 입출력에 대한 테스트를 작성하기 어려워서 과연 InputHander가 입력에 대한 검증 책임까지 가지고 있는가에 대해서 궁금하고 만약 분리해야 한다면 어떻게 분리하는 것이 좋을 지도 궁금합니다. 또한 현재의 경우 콘솔로 입출력을 받아 테스트가 어렵게 다가오는데 이런 경우이때 만약 전체 서비스가 외부에서 유저의 입력을 문자열을 받는 형태로 분리해야하는데 이 경우에 외부에서도 입출력을 하고, 내부에서도 입출력을 하게 되어 어떻게 하면 좋을지 고민이 되고혹은 현재 그대로 콘솔로 테스트 하는 것이 좋을지 궁금합니다. 콘솔에서 입출력을 받을 때 테스트 코드를 작성하는 방법도 알 수 있을까요?? 그리고 테스트 강의의 테스트 환경의 독립성을 보장하자 강의에서 테스트 코드에서는 객체를 생성할 때 생성자로 생성해서 테스트해야한다고 말씀을 하셨는데 만약 특정 필드가 기본값을 가져야 해서 생성자를 private로 막은 후 정적 팩토리 메서드를 이용해 생성된다면 이러한 경우 기본값을 가지는 특정 필드를 어떻게 특정 값으로 세팅해서 테스트 할 수 있을지도 궁금합니다. 이런 경우 생성자, getter 같은 테스트만을 위한 코드를 넣어도 된다고 하셨는데 이런 경우 원하는 객체의 불변성이 깨지는 것 같아서 어떻게 하면 좋을지 궁금합니다. 감사합니다
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
지역변수 인라인화
안녕하세요 우빈님! 강의 너무 잘 보고 있습니다:) 강의를 보다가 사소한 부분이지만 궁금증이 생겨 여쭤봅니다! 강의 시간 30:58초쯤 위 사진처럼 findCell을 지역변수로 뽑아내셨는데 이렇게 하면 가독성 측면에서 유리한가요?! 지역변수를 인라인화 시키는게 좋다고 들은것 같아서 여쭤봅니다!
-
미해결김영한의 실전 자바 - 중급 1편
동등 연산자 (==) 객체 비교 질문
안녕하세요, 다름이 아니라 동등연산자에서 객체비교중 의문이 있어 질문드립니다.아래 이미지에서 다른 객체 인스턴스 끼리는 동등연산 자체가 컴파일 에러나는데 이유가 무엇인가요?동작은 해야 정상이 아닌가 싶은데,,, 다형적 참조가 가능한 객체끼리만 가능한가요?
-
미해결김영한의 실전 자바 - 중급 2편
직접 구현하는 배열 리스트1- 시작의 MyArrayListV1 구현 질문이요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]직접 구현하는 배열 리스트1- 시작의 MyArrayListV1 구현문제를 예외 처리하고 싶은데 아무리 해도 안돼는데 해결책좀 try { list.add("f"); System.out.println(list); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("배열의 범위를 벗어났습니다"); System.out.println("예외 발생 위치: " + e.getMessage()); e.printStackTrace(System.out); }그리고 아래 MyArrayListV1에 이렇게 작성하면 되긴 돼는데 저는 유지보수를 위해서 try~catch를 하고 싶거든요. 그래서이렇게 질문 남겨요public void add(Object e) { if (size >= elementData.length) { // 배열이 가득 찼는지 체크 throw new ArrayIndexOutOfBoundsException("용량을 초과했습니다. 현재 크기: " + size + ", 최대 용량: " + elementData.length); } elementData[size] = e; size++; }
-
미해결스프링 핵심 원리 - 기본편
조회되는 빈이 2개 이상이더라도 문제가 없는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]AllBeanTest에서 DiscountService에 의존 관계를 주입할 때, Map과 List를 사용했기 때문에, RateDiscountPolicy, FixDiscountPolicy 두 가지 빈이 등록되어 있어도 문제가 없는 건가요??
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
인텔리제이 설정 문제로 빌드가 안됩니다.
수동으로 빌드하면 잘 실행되는데 인텔리제이의 빌드 기능을 사용하면 첨부한 사진처럼 찾을 수 없다고 뜹니다.소스 경로와 컴파일 경로 설정 해주었고, configurations도 확인해봤는데 뭐가 문제인지 모르겠습니다.아예 삭제하고 다시 프로젝트를 만들어도 계속 같은 에러가 발생하는데 뭐가 문제인걸까요??
-
미해결김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션
ReadFileV2 클래스 실행시 무한 루프 현상
public static void main(String[] args) throws IOException { FileInputStream fis = new FileInputStream(FILE_NAME); long startTime = System.currentTimeMillis(); byte[] buffer = new byte[BUFFER_SIZE]; int fileSize = 0; int size; while ((size = fis.read(buffer)) != 1) { fileSize += size; } fis.close(); long endTime = System.currentTimeMillis(); System.out.println("File name: " + FILE_NAME); System.out.println("File size: " + fileSize / 1024 / 1024 + "MB"); System.out.println("Time token: " + (endTime - startTime) + "ms"); } } CreateFIleV1, 2, readFileV1 까지는 결과가 나오는데readFileV2는 결과가 나오지 않습니다 인텔리J에서 뭐 설정 해야 할게 있을까요? 추가로 BUFFER_SIZE를 8192 -> 100으로 줄여봐도 결과는 결과가 나오지 않네요..ㅠpublic static final int BUFFER_SIZE = 100;buffered.dat 파일에 에디터에서 설정 해라 라는거 같은데 인텔리제이 초기설정이 따로 있을까요..?This document contains very long lines Soft wraps were enabled to improve editor performance.This file explicitly re-assigned ot plain text
-
미해결김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션
오타 제보드립니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]단순 오타 제보드립니다.IO 기본1 pdf 에 HDD, SSD 인데, HDD, SDD 라고 되어있습니다.
-
미해결김영한의 실전 자바 - 기본편
static 파트의 MathArrayUtil 문제에 대해 질문있습니다
밑에 동일한 질문이 있긴한데 이해를 못하겠어서요저는 이런식으로 sum이라는 private static으로 선언된 변수를 만들고 해당 변수를 사용해서 sum,average 메소드에 사용 했는데요 이렇게 비슷하게 사용하신분의 질문글의 답글을 보니까 클래스 변수를 쓰면 안되고 이유는 여러곳에서 해당 클래스를 사용하게 될 경우 sum의 값이 손상될 수 있다는 이유였는데요 private static을 쓰는데 어떻게 여러곳에서 sum 변수에 접근할 수 있는지 궁금합니다 private은 해당 클래스 내에서만 사용할 수 있는거 아닌가요? 만약 사용할 수 있다고 해도 private 이라는 접근제어자가 다른 곳에서 사용 하지 못하게 하려는 목적이라고 알고있는데 그럼 private을 이용하여야 하는 이유를 모르겠습니다package static2.ex; public class MathArrayUtils { private MathArrayUtils(){} private static int sum; static int sum(int[] values){ for (int v : values) { sum += v; } return sum; } static double average(int[] values) { return (double)sum / values.length; }
-
미해결스프링 핵심 원리 - 기본편
관심사의 분리 테스트 코드 수정 - BeforeEach 사용 이유
1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]관심사의 분리 강의 24분 20초대에 MemberServiceTest 테스트 코드 수정 부분입니다. 강사님께서 AppCofig를 바로 사용하시는게 애매하다고 말씀하시고 "BeforeEach"를 통하여, 각 테스트 진행 전 memberService를 새롭게 정의하는 방식으로 알려주셨습니다궁금한점이, 생성된 memberService 인스턴스가 일부 테스트 함수에서, 멤버 변수로 값을 대입 받는다거나 그런 로직이 있는 경우들 때문에 애매하다고 말씀을 해주신 것일까요? (좀 더 상세하게 알려주시면 감사드리겠습니다)현재 강의에서 사용되는 MemberServiceImpl 클래스에서 정의되어있는 메서드들은 재활용 되어도 별 문제 없다는 생각이 들어, MemberServiceTest-테스트 클래스 상단에 AppConfig 정의해주고 memberService도 초기화하지 않은 이유에 대해 좀 더 상세하게 알고 싶어 질문 드리게 되었습니다
-
해결됨Readable Code: 읽기 좋은 코드를 작성하는 사고법
질문 제목을 뭐라 적어야할지 모르겠습니다. 죄송합니다
우선 강의 너무 재밌게 잘 보고있단 말씀 드리고 싶습니다. 일단 새로운 도메인에서 혼자 리팩토링을 하고있었는데요, List<StudyCafeLockerPass> 를 일급 컬렉션으로 감싸 StudyCafeLockerPasses 를 만들었습니다. 여기서 StudyCafeLockerPass 에게 type 과 duration 이 같은지 비교하는 질문을던질 때 StudyCafePass 자체를 인자로 넘길지, 아니면 StudyCafePass 로부터 type 과 duration 을 꺼내서 넘길지 고민입니다. public class StudyCafeLockerPasses { private final List<StudyCafeLockerPass> lockerPasses; public StudyCafeLockerPasses(List<StudyCafeLockerPass> lockerPasses) { this.lockerPasses = lockerPasses; } public static StudyCafeLockerPasses of(List<StudyCafeLockerPass> lockerPasses) { return new StudyCafeLockerPasses(lockerPasses); } // TODO V1. 여기 (StudyCafeLockerPass 에게 질문을 던질때 StudyCafePass 자체를 넘길지) public StudyCafeLockerPass findOneBy(StudyCafePass selectedPass) { return lockerPasses.stream() .filter(option -> option.isEqualWith(selectedPass)) .findFirst() .orElse(null); } // TODO V2. 여기 (StudyCafeLockerPass 에게 질문을 던질때 StudyCafePass 에서 type 와 duration 을 getter 로 꺼내서 넘길지) public StudyCafeLockerPass findOneBy2(StudyCafePass selectedPass) { return lockerPasses.stream() .filter(option -> option.isEqualWithV2(selectedPass.getPassType(), selectedPass.getDuration())) .findFirst() .orElse(null); } } V1 같은 경우의 StudyCafeLockerPass 메서드는 아래와 같습니다.public class StudyCafeLockerPass { private final StudyCafePassType passType; private final int duration; private final int price; public boolean isEqualWith(StudyCafePass studyCafePass) { return isSamePassType(studyCafePass.getPassType()) && isSameDuration(studyCafePass.getDuration()); } public boolean isSamePassType(StudyCafePassType passType) { return this.passType == passType; } public boolean isSameDuration(int duration) { return this.duration == duration; } } V2 경우의 StudyCafeLockerPass 메서드는 아래와 같습니다.public class StudyCafeLockerPass { private final StudyCafePassType passType; private final int duration; private final int price; public boolean isEqualWithV2(StudyCafePassType passType, int duration) { return isSamePassType(passType) && isSameDuration(duration); } public boolean isSamePassType(StudyCafePassType passType) { return this.passType == passType; } public boolean isSameDuration(int duration) { return this.duration == duration; } }제가 느끼기에는 Getter 를 사용하지 않으려면 V1 이 맞는거같고.., 의존성을 생각한다면 V2 가 맞는거같은데 강사님의 기준이 있으실까요 (질문이 제가 봐도 이상한것같은데.. 죄송합니다)
-
미해결김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션
백로그에 대한 질문이 있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]서버에서는 서버 소켓으로 PORT 번호 지정해서 열어놓고클라이언트가 TCP 연결을 완료하면 서버에서 백로그큐에 연결 정보를 저장하고, 서버에서 accept()를 하면 큐에서 꺼내 소켓을 생성한다고 설명하셨습니다. 근데 GPT나 다른 사람의 내용을 종합하면 클라이언트의 TCP 연결이 요청되면 해당 연결 정보를 syn 큐에 저장하고 연결이 완료되면 os에서 백로그에 저장한 뒤, 서버에서는 accept()를 하면 단순히 백로그에 대한 정보를 꺼내서 소켓을 만든다고 합니다. 내용을 정리하던 중 헷갈려서 어떤 것이 정확히 맞을지 궁금해서 질문드립니다!
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
[16강] 확장함수 관련 질문입니다!
안녕하세요 강사님 확장함수 관련하여 질문이 있습니다. 강의 중에 확장함수는 원본 클래스의 private, protected 멤버 접근이 안된다.라고 말씀해주신 부분이 있습니다. 제가 확장함수를 이해하기로는 특정 클래스에 내가 사용할 특정 로직을 심는 함수라고 이해를 했습니다. 이렇게 이해를 하고 나니어짜피 외부에서는 확장함수로 추가할 원본 클래스의 private 혹은 protected 멤버에 접근이 불가능할텐데,확장함수는 원본 클래스의 private, protected 멤버 접근이 안된다. 내용은 어디에 어떻게 적용이 되는 것인지 이해가 잘 가지 않습니다. 혹시 어떠한 경우에 적용이 되는 내용인지 조금 더 구체적인 예시를 들어주실 수 있으실까요 ?
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
스캐너 사용하는 문제풀이중 에러코드
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]스캐너 사용한 여러 문제풀이시 전부 같은 에러코드로 컴파일이 되지 않는데요.강사님이 쓰신 코드와 완전히 같은데도 말이죠.어떻게 해결 하나요?
-
해결됨김영한의 실전 자바 - 기본편
this 사용에 관한 질문 드립니다.
[질문 내용]안녕하세요 항상 좋은 강의 감사드립니다.영한님께서는 this를 무조건 붙이는 방법론에 대해서 추천하시지 않는다고 하셨는데, 그럼 this의 사용을 피하기 위해 의도적으로 변수명을 다르게 지으시는지 여쭤보고 싶습니다. 코드는 깔끔해지겠지만 오히려 헷갈리는 상황이 발생할수도 있겠다는 생각이 들어 여쭤봅니다! 감사합니다!
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
선생님 감성적이시네요 MBTI 가 뭔가요 궁금합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
스레드 대기 집합에는 대기 목록의 개수 제한이 따로 없나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]스레드 대기 집합에는 대기 목록의 개수는 제한이 따로 없나요?
-
해결됨진짜! 자바스크립트(Javascript) - 기초부터 고급까지
Global 스코프 질문
브라우저 환경에서 window객체가 Global 스코프 역할까지 한다고 이해했습니다.그런데 let,const로 정의한 함수들을 this, window를 명시하지 않고 실행하면 잘 실행되는 이유를 말씀하시면서 'let,const로 정의하면 Global스코프라고 볼 수 있는 Script스코프에 올라간다' 라고 하셨는데여기서 말하는 Global 스코프는 window객체를 말하는 Global스코프와 다른건가요?그럼 Global스코프(브라우저의 window보다 포괄적인 범위)는 내부에서 또 Script스코프와 Global스코프(브라우저환경에선 window객체)로 나눠지는거라고 이해하면 되는게 맞을까요...?
-
해결됨iOS Clean Architecture & MVVM: RxSwift 완전 정복
강의 질문있습니다.
질문강의 중 스냅킷을 사용하여 이미지 뷰의 제약을 설정하셨는데make.leading.top.bottom.equalToSuperview().inset(20) make.width.height.equalTo(80).top과 bottom을 상위 뷰에 걸어 상대적 높이를 설정했으나, 절대적 높이 height도 별도로 걸어주신 이유가 있을까요?