* 목차
메서드를 공부하게 된 이유
contain 메서드에 대하여
contain 메서드를 공부하게 된 이유
개인 과제를 진행하면서 List< String[] >에서 String[]이 포함되어 있는지 확인해야 하는 작업이 필요했는데, 다른 문서에서 작업을 해 보고 코드를 옮겨오려고 테스트로 코드를 짜보고 있는 와중에
public static void main( String[] args ) {
String[] a = { "a", "b", "c", "d" };
ArrayList< String[] > list = new ArrayList<>();
list.add( new String[] { "a", "b", "c", "d" } );
System.out.println( list.contains( a )); // false
}
이렇게 했을 때 false가 뜬다!
하지만 나는 저 return 값이 true 인 contain메서드가 필요한데. 일단 과제 제출해야 하는 기한이 정해져 있었으므로 메서드에 대해서 찾아보지 않고 return값이 true가 나오게끔 메서드를 따로 구현했다.
개인 과제 제출을 완료했기 때문에 왜 contains 메서드에서 왜 false가 나왔을까 공부해보기로 했다.
contain 메서드에 대하여
인텔리제이에서는 내가 쓰는 이미 구현되어 있는 메서드의 구현 방식을 찾아보려면 메서드를 클릭하고 Ctrl+T를 눌러주면 구현 방식을 짜라락 보여준다.
indexOf()
indexOfRange()
elementData
..? 여기서부터 어려워지기 시작했다. elementData가 뭐지? 빨간색으로 되어 있으니까 전역변수인가? 하고 문서위에 올려보니 나와있었다.
transient? array buffer..? 대충은 알겠는데 확실히 모르겠어서 한 번 구글링을 해보았다.
java ArrayList source code 살펴보기
궁금하기도 하고 평소에 자주 쓰는 자바의 자료구조 클래스인 ArrayList를 한번 살펴보고자 한다. (사실 할일이 없어서가 맞다. 월급 루팡~) 소스코드는 여기를 참고 했다. 자바의 구현 구조를 보면
hoonzi-text.tistory.com
이 글을 보니 ArrayList를 할당하기 위한 Object 배열인가 보다..!
equals()
그러니까 결국 다시 거꾸로 생각을 해보면 하나하나 탐색을 했을 때 equals인 애가 하나라도 있어야 contain() 메서드에서 true를 return함을 알 수 있다. 그러면 코드로 한 번 실험을 해보자.
String[] a = new String[] { "a", "b", "c", "d" };
String[] b = new String[] { "a", "b", "c", "d" };
System.out.println( a.equals( b ) ); // false
두 개는 다르다. 왜? a와 b의 주소값이 다르기 때문이다. 나는 여기서 음..? 싶었다. String은 equals()메서드를 썼을 때 값만 같으면 같다고 해주던데..? 싶어서 찾아보니
[자바JAVA] 참조형 변수의 주소값 비교 , 값 비교 equals
안녕하세요 자바칩 프라푸치노 입니다. 오늘은 아주아주 중요하고 앞으로도 많이 활용될 개념을 배워보겠습니다. 참조형 변수의 주소값 비교, 값 비교 입니다. 메모리상에서 어떻게 작용되는지
sso-feeling.tistory.com
JVM(Java Virtual Machine)이 String의 경우에 같은 값을 가지면 같은 주소를 참조하게끔 해놨다고 한다.
그렇구나.. equals()는 원래 주소값을 비교하는 거구나.. 나는 반대로 아 String은 값이 같으면 true가 나오니까 얘는 값을 비교하는 메서드이구나! 하고 생각했는데 그게 아니었다..! 어쨌든 그래서 contain이 false가 나온거구나.. 그 때 바로 내가 구현을 해버려서 다행이다.. 아니면 시간이 제법 걸릴 번 했네.
오늘은 한 메서드에 대해서 한 번 파봤는데 메서드 구현 방식을 보는 것은 굉장히 흥미로웠다! 생각보다 한 메서드에 여러 메서드가 얽혀 있어 신기했다.
알고리즘 시간에 LinkedList를 구현 문제가 나왔었는데 내가 아직 제네릭 문법도 모르고 element에 관해서도 잘 몰라서 못해봤었다. 나중에 강의 진도가 나가게 되면 한 번 구현해보면 재밌을 것 같다!
'STUDY > JAVA' 카테고리의 다른 글
[TIL] I/O Study - ByteArrayInputStream 예제 01 (0) | 2023.06.08 |
---|---|
[TIL] 잘못 알았던 재귀함수 (0) | 2023.06.05 |
[TIL] 실무에서 Stream은 어떻게 쓰이고 있을까? (0) | 2023.05.30 |
[TIL] 추상클래스와 인터페이스의 차이. (0) | 2023.05.30 |
[TIL] 프로그래머스 - 신규 아이디 추천 (0) | 2023.05.28 |