묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
Quiz_05 관련 질문드립니다 !
public class _Quiz_05 { public static void main(String[] args) { int size[] = new int[10]; for (int i = 0; i < size.length; i++) { size[i] = 250 + (5 * i); System.out.println("사이즈 " + size[i] + " (재고있음)"); } } }위 코드가 제가 작성한 코드이고, 아래가 선생님께서 작성하신 코드입니다.public class _Quiz_05_해설 { public static void main(String[] args) { int[] sizeArray = new int[10]; for (int i = 0; i < sizeArray.length; i++) { sizeArray[i] = 250 + (5 * i); } for (int size : sizeArray) { System.out.println("사이즈 " + size + " (재고 있음)"); } } }배열에 값을 입력해주는 반복문과 배열을 출력하는 반복문을 따로 설정하신 점에 대해 궁금한 점이 있습니다.수업 내용에 대한 복습과 활용의 다양성을 보여주기 위한 것인지, 실제 활용이나 실무에 있어 효율성이나 활용도가 더 높은 것인지 궁금합니다 !
-
해결됨기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM
문자열 비교 강좌에서 문자열 선언 방법 간에 hashCode() 값 관련한 질문입니다.
해당 강좌에서 String str1 = "java"로 선언한 객체와 String str2 = new String("java")로 선언한 객체는,다른 메모리 공간에 저장된다고 말씀하셨는데요.hashCode()로 확인한 결과 동일한 값이 출력되어 문의드립니다.String str1 = "java"; String str2 = "java"; String str3 = new String("java"); String str4 = new String("java");위 코드처럼 선언한 후 hashCode()로 출력하면 str1 ~ str4까지 동일한 값이 출력됩니다.System.out.println("str1 : str2 -> " + str1.hashCode() + " : " + str2.hashCode()); System.out.println("str3 : str4 -> " + str3.hashCode() + " : " + str4.hashCode()); 헌데 동일성 확인을 하면 str1과 str2 는 true 이고,str3과 str4는 false가 출력되고요.물론 str1과 str3도 false가 출력됩니다.이걸 어떻게 해석해야 하는지 문의 드립니다.
-
해결됨김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션
close() 메서드 사용 여부 질문 드립니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 네[질문 내용]설명해주신 예제를 보니 메모리 스트림이나 콘솔 스트림에는 close()를 사용하지 않네요.ByteArrayStream나 PrintStream 같은 경우에는 메모리를 대상으로 하는 스트림이라 GC 대상이 되어서 따로 close() 메서드를 호출하지 않아도 되는 건가요?
-
해결됨오브젝트 - 기초편
할인 조건의 구현에 대해
안녕하세요. 좋은 강의 해주셔서 감사합니다. 덕분에 많이 배우고 있습니다.SequenceCondition과 PeriodCondition 객체 구현(5-1)에 대해 궁금한 점이 있습니다. SequenceConditionpublic class SequenceCondition implements DiscountCondition { private int sequence; @Override public boolean isSatisfiedBy(Screening screening) { return screening.isSequence(sequence); } }PeriodConditionpublic class PeriodCondition implements DiscountCondition { private DayOfWeek dayOfWeek; private LocalTime startTime, endTime; public boolean isSatisfiedBy(Screening screening) { return screening.getStartTime() .getDayOfWeek().equals(dayOfWeek) && startTime.compareTo(screening.getStartTime().toLocalTime()) <= 0 && endTime.compareTo(screening.getStartTime() .toLocalTime()) >= 0; } }PeriodCondition의 isSatisfiedBy는 Screening이 알고 있는 정보에 대한 응답을 기반으로 스스로 할인 조건을 판단하고 있다고 느껴졌습니다.반면에 SequenceCondition의 isSatisfiedBy는 Screening에게 isSequence메시지를 전송함으로써 결과적으로 '할인 조건의 만족 여부를 Screening이 판단하고 있는게 아닌가?'라는 생각이 들었습니다.저는 Screening은 상영 회차(sequence)에 대한 정보를 알고 있고 이에 대답할 수 있기 때문에 Screening에게 상영 회차를 묻고 이를 바탕으로 SequenceCondition이 스스로 할인 조건을 판단하는 형태를 생각했는데요.제가 생각한 SequenceConditionpublic class SequenceCondition implements DiscountCondition { private int sequence; @Override public boolean isSatisfiedBy(Screening screening) { return sequence == screening.getSequence(); } }이렇게 설계하니 또 Screening의 getSequence가 협력의 문맥을 고려하지 못한 채 만들어진거 같다는 느낌을 받았습니다.이와 관련해 기존의 코드는 할인 조건의 여부를 SequenceCondition이 아닌 Screening이 판단하고 있다고 느껴지는데 이게 맞는건지, Screening의 isSequence는 어떤 요청에 의해 생성된 것인지, 그 외 여기에 대한 영호님의 생각과 의견이 궁금합니다!
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
studentCount 대신에
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. 강사님께서 for 문에서 i < studentCount; 를 사용하셨는데, studentCount 대신에 scores.length를 사용해도 같은 답이 나옵니다.마찬가지로 j < 3; 에서 3 대신에 scores[i].length 나 subjects.length를 사용해도 같은 답이 나옵니다. 혹시 코드가 똑같이 실행되더라도 studentCount 를 사용하시는 이유가 있는건가요? 어떤 것을 사용해야 가장 좋은지를 어떻게 판단할 수 있는지 알려주시면 감사하겠습니다.
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
강의 본문은 어디서 확인할 수 있나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]어떤 걸로 강의하시는지는 모르겠는데 강의하시는 자료 화면을 같이 띄워 놓고 수강하고 싶어서요. 혹시 어느 사이트에 들어가야 확인 할 수 있나요?
-
해결됨김영한의 실전 자바 - 중급 1편
Ex1RefMainV1 질문
[질문 내용]안녕하세요, 영상에서 영한님이 "메서드를 전달"하라고 하시기에 다음과 같이 풀어봤는데, 영한님 풀이와는 접근 방법이 조금 다른 것 같아 문의드립니다.제가 봤을 때는 영한님 풀이의 경우 "메서드를 전달"한다는 느낌보다는 "메서드를 구현해놓은 인스턴스를 전달"한다는 느낌으로 받아들여져서 질문드립니다.다음과 같이 풀이해도 익명 클래스의 목적에 부합하는 풀이일까요?추가로 강의록에 "그런데 지금까지 학습한 내용으로는 메서드를 전달할 수 있는 방법이 없다."라고 언급되었는데 이는 결국 "(아직 학습하지 않았지만) 메서드를 전달할 수 있는 방법이 존재한다."라고 해석되고, 이에 해당하는 방법이 아래 풀이와 같은 방법인지 궁금합니다. // my solution-2 package nested.anonymous.ex; import nested.local.Process; import java.util.Random; public class Ex1RefMainSOL2 { public void process(Process process) { System.out.println("프로그램 시작"); process.run(); System.out.println("프로그램 종료"); } public static void main(String[] args) { Ex1RefMainSOL2 main = new Ex1RefMainSOL2(); main.process(new Process() { int randomValue = new Random().nextInt(6) + 1; @Override public void run() { System.out.println("주사위 = " + randomValue); } }); main.process(new Process() { @Override public void run() { for (int i = 1; i <= 3; i++) { System.out.println("i = " + i); } } }); } }
-
미해결김영한의 실전 자바 - 기본편
value라는 필드가 없어도 value값이 출력되네요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용](자바 기본 - NullPointerException강의 입니다)제목 그대로 NullMain3.java파일에서 System.out.println("bigData.data.value=" + bigData.data.value);코드를 보면요. value라는 필드가 없는데 0이 출력되는 이유가 궁금합니다!
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
영한님 질문이 있습니다(자바 관련 질문 아님 - 다음 행보에 대해서)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 어제인가 그저께인가, 이 생각이 계속 떠나지 않아서 글을 쓰게 되었습니다. 말 그대로 영한 님의 개발 커리에 대해, 다음 행보가 궁금해져서 질문을 드립니다. 1. 자바 강의 및 DB강의를 끝나고 다음 강의로는 무엇을 하실 건가요? 아니면 다시 실무로 가실 건인지?2. 자바 강의를 끝나고 DB를 하신다는 기억이 있는데, DB 강의 때에, 어떤 종류의 sql을 이용할 생각 인가요? 답변 부탁 드립니다.
-
해결됨오브젝트 - 기초편
generic 패키지 money 클래스 관련 질문
최근 전체적인 강의를 한번 돌려본 후 간단한 프로젝트 과제를 구현하는 과정에서 배운 내용을 최대한 적용해보려 노력하며 복습을 하고 있습니다. 복습 중 행동을 정의한 후 객체를 선택하라 를 적용하는 과정에서 궁금증이 생겼습니다. 해당 강의와 소스코드에서는 generic 패키지에 Money 클래스를 제공해주고 있습니다.Money 클래스가 있는 generic 패키지는 보통 어떤 특성을 가지는 클래스들을 모아놓는지 궁금합니다. Money 클래스와 같은 역할을 하는 객체들 또한 행동을 정의한 후 객체를 선택하라 의 원칙에 의해 행동을 정의 한 후 필드를 결정하는 것인지 궁금합니다. Money 같은 성격의 클래스는 어떤 서비스를 설계하기 전 전 미리 작성한 후 서비스 설계를 해야하나요? Money 는 새 불변 객체를 만들어 리턴해주는 방식으로 사용하던데 Screening 등의 클래스에서는 불변 객체를 사용하지 않는 이유가 있는지, 있다면 특정 클래스를 불변 객체로 설계하는 기준이 있는지 궁급합니다.
-
미해결스프링 핵심 원리 - 기본편
테스트 할 때 왜 다른 파일의 오류에 영향을 받는건가요??
[질문 내용]RateDiscountPolicyTest를 할 때 10퍼센트로 할인율이 변경되었으니 Order.java 파일의 calculatePrice도 변경되어야 할 줄 알고 주석처리를 했는데 관련 없는 파일에서 오류가 나서 테스트 실행이 안 됩니다. calculatePrice를 주석 처리하고, 저 코드를 쓰는 모든 코드들을 주석처리 하니 오류가 안나고 테스트가 잘 돌아갑니다. 원래 테스트를 할 때 테스트와 관련 없는 파일의 오류가 있으면 테스트가 작동되지 않는 건가요?
-
미해결스프링 핵심 원리 - 기본편
프로젝트 빌드가 안되는 이유가 뭘까요??
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]현재 맥 OS를 사용하고 있습니다. 강의를 듣는 도중 인터페이스로 변경하면서 테스트를 진행했을때, 객체 주입이 안된 상태이기 때문에 NullpointException이 발생해야하는데 변경사항이 아닌 이전 버전으로 실행되가주고 테스트 성공으로 뜹니다. 이걸 해결하기 위해서는 변경사항이 있을때마다 프로젝트를 재빌드해야하는데 데스크톱에서는 바로 반영되가주고 빌드를 매번 할필요가 없는데 해결방안이 있을까요?
-
해결됨김영한의 실전 자바 - 중급 1편
또 다른 풀이 공유합니다.
질문은 아니고, 수강하시는 분들에게 도움이 되고자 제가 풀이한 또 다른 방식 공유합니다. package time.test; import java.util.Scanner; import java.time.LocalDate; import java.time.DayOfWeek; public class TestCalendarPrinter { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("년도를 입력하세요: "); int year = sc.nextInt(); sc.nextLine(); System.out.print("월을 입력하세요: "); int month = sc.nextInt(); sc.nextLine(); printCalendar(year, month); } private static void printCalendar(int year, int month) { // 사용자 입력에 따른 LocalDate 객체 생성 LocalDate ld = LocalDate.of(year, month, 1); // 요일 표지 출력 System.out.println("Su Mo Tu We Th Fr Sa"); for (int i = 0; i < ld.lengthOfMonth(); i++) { // 해당 월의 1일에 해당하는 요일을 감지하고, 이에 따라 출력 시작 위치를 지정 // ld.getDayOfWeek().getValue()는 해당 날짜의 요일 값을 int로 리턴 Sunday(0), Monday(1) if (i == 0) { for (int j = 0; j < ld.getDayOfWeek().getValue(); j++) { System.out.print(" "); } } // 다음 일을 출력. startPosition은 위에서 맞췄으므로 단순 포맷팅 출력만 하면 됨 LocalDate currentLd = ld.plusDays(i); System.out.printf("%2d ", currentLd.getDayOfMonth()); // Saturday 출력 후에는 다음 줄로 이동 if (currentLd.getDayOfWeek() == DayOfWeek.SATURDAY) { System.out.println(); } } } }
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
모니터에 한 줄로 출력
C에서는 모니터의 값을 출력할 때 printf("a = %d, b = %d",a,b) 이런식으로 적어서 한줄로 표현 할 문장을 연달아 쓸수 있는데 JAVA에서는 중간에 변수를 출력하고 싶으면 무조건 끊어야하나요?
-
미해결스프링 핵심 원리 - 기본편
인터페이스와 구현체 생성 순서
[질문 내용]안녕하세요. 이미 로드맵 1회독을 마치고 TDD관련 공부를 하다가 객체지향과 DI,IoC의 개념에 대해 복기하기 위해서 강의를 듣던중 궁금한 부분이 생겨 질문을 남깁니다. 아직 개발 경력이 짧은 대학생임을 감안해주시면 감사하겠습니다. 인터페이스와 구현체를 분리하는 것의 중요성에 대해서는 잘 인지하였지만, 구현체를 작성하기 전 인터페이스를 먼저 작성하는 것에 대해서 의문이 생깁니다. 실제 몇몇 프로젝트 진행 경험 상으로, 파라미터나 메서드의 설계에 있어서 구현을 하면서 그 스펙이 변하는 경우가 매우 많았습니다. 그래서 구현을 먼저 하고 인터페이스를 그에 맞추어 생성하는 경우가 잦게 있었는데, 이런 경우에는 기능 설계가 충분하게 되지 않은 채로 개발에 시작한 잘못의 결과인가요? 실무 개발이나 프로젝트에서 인터페이스 개발 -> 구현체 개발 의 순서가 일반적인 경우일까요? TDD관련한 개념에서도 인터페이스를 먼저 작성한 후 해당 메서드를 이용하여 TDD를 작성 -> 메서드의 기능이 검증 된 후에 구현을 하는 것으로 배웠습니다. 하지만 아무리 고민하여도 구현체를 먼저 작성하는 것이 개발 과정을 최적화하는 방법이라는 생각이 들어 질문 남깁니다. 정리하자면, 구현체 개발 후 인터페이스를 구현체에 맞게 작성하여 사용하는 방법이 잘못된 순서인지 여쭤보고 싶습니다.
-
해결됨기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM
상속과 오지랖의 콜라보 예제에서 clone() 메서드에 대한 문의드립니다.
해당 예제(22:17)의 setString(String param)에서string 필드 변수의 값을 수정하고자 아래 구문을 사용하셨는데요,string = param.getBytes().clone(); clone() 메서드를 사용하지 않아도(아래 구문) string 필드 변수의 수정이 가능한데, clone() 메서드를 사용한 이유를 알 수 있을까요?string = param.getBytes(); 해당 의문에 대해서 얇은/깊은 복사와 관련이 있는지 확인해보기 위해 디버깅을 해본 결과,두 변수는 값은 같으나, 다른 메모리 위치를 갖는 것으로 확인을 했습니다.-> clone() 메서드가 있는 코드/없는 코드 모두 위와 동일하게 동작하는 것을 확인했습니다.그래서 다른 이유로 clone() 메서드를 사용하신 거 같은데, 어떤 이유인지 문의 드립니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
MyAtomic 성능 테스트 결과 상이
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]MyAtomicInteger 와 다른 구현체 들의 성능을 테스트 하는 코드에서 강의에 결과와 다른 결과가 나옵니다...package thread.cas.increment; import java.util.concurrent.atomic.AtomicInteger; public class MyAtomicInteger implements IncrementInteger{ AtomicInteger atomicInteger = new AtomicInteger(0); // 이미 동시성 문제가 다 해결되어 있는 클래스이다. @Override public synchronized void increment() { atomicInteger.incrementAndGet(); } @Override public int get() { return atomicInteger.get(); } }package thread.cas.increment; import static util.MyLog.log; public class IncrementPerformanceMain { public static final long COUNT = 100_000_000; public static void main(String[] args) { test(new BasicInteger()); //가장 빠르다 CPU 캐시를 가장 적극 사용한다. 멀티스레드 환경에서는 사용할 수 없다. 단일 스레드일 경우 가장 효율적 test(new VolatileInteger()); // 메인메모리를 직접 사용한다. 안전한 임계영역은 없기 때문에 멀티스레드 환경에는 사용할수 없다. test(new SyncInteger()); test(new MyAtomicInteger()); } private static void test(IncrementInteger incrementInteger) { long startMs = System.currentTimeMillis(); for (long i = 0; i < COUNT; i++) { incrementInteger.increment(); } long endMs = System.currentTimeMillis(); log(incrementInteger.getClass().getSimpleName() + ": ms=" + (endMs - startMs)); } }아토믹이 그냥 synchronized보다 더 느린 결과가나오는데 제가 놓친 부분이 있을까요?
-
미해결김영한의 실전 자바 - 기본편
오디오만 나오고 화면이 안나옵니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]오디오만 나오고 화면이 안나옵니다.캐쉬도 날려보고 브라우저도 바꿔봤는데 동일하게 안나옵니다.
-
미해결김영한의 실전 자바 - 중급 1편
toString()강의부터 화면이 안보입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. toString()강의부터 소리만 나오고 검은색 화면만 보이는데 인프런측의 문제일까요..?
-
미해결김영한의 실전 자바 - 중급 2편
9강 해쉬맵 회원관리기능 연습문제 질문입니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]연습문제 회원 관리 기능을 만드는중 findByName에서 헷갈려서 질문을 남김니다. 다음은 제가 작성한 소스코드입니다/** * get 메서드는 key값을 통해서 value를 반환한다 * key-> id, value ->memeber * value의 구조는 STRING: ID, STRING NAME이므로 * value를 하나로 펼쳐서 순회한 다음, 이름에 맞는 member를 반환 * */ public Member findByName(String name) { Boolean findMember = memberMap.containsValue(name); if(findMember!=null){ for(Map.Entry<String, Member> entry: memberMap.entrySet() ){ String key =entry.getValue().getId(); String parameterName = entry.getValue().getName(); if(parameterName==name) { return memberMap.get(key); } } } return null; }다행히 결과는 문제 없이 돌아가가나 String key = entry.getValue().getId()에 디버그를 찍으면Boolean findMember = memberMap.containsValue(name);//findMember:false, name: 회원3다음과 같이 표기 되는데 분명 회원3의 값을 저장 했는데 왜 findMember가 false로 나오는 걸까요?이유가 궁금합니다. 그리고 제가 작성한 findByMember 로직이 맞을까요 ? 많은 피드백 부탁드립니다!