오늘은 짝프로그래밍 하면서 느낀 점들을 써보려고 한다. 오늘 짝프로그래밍으로 만드는 주제는 마카오뱅크였다.
매일 하는 짝프로그래밍이지만 오늘 짝프로그래밍은 동료분의 끝없는 질문이 나의 말문을 막히게 했다.
"이거는 왜 이렇게 쓰이죠?", "이거는 왜 그런가요?" 등등 코드에 대해 이해를 할 수 있어야만 대답할 수 있는 질문들을 계속 받았다. 사실 마카오뱅크의 코드를 이해하기보다는 외웠기 때문에 저 질문에 답을 명확하게 할 수 없었다.
만약 동료분이 질문을 해주지 않았다면 나는 매일 반복 인출 학습으로 코드를 외웠기 때문에 코드를 치면서 안다고 착각했을것이 분명하다.
하지만 동료분이 질문을 해서 질문에 대한 대답을 못하는 나를 보고 이 코드에 대해서 모르고 있다는 것을 인지할 수 있었다. 우리가 매일 짝프를 하는 이유 중 하나도 서로 질문을 함으로써 알고 있는지 모르고 있는지 계속 메타인지를 하는 게 핵심이라고 생각한다.
모르는걸 인지했으면 공부를 해야지!
equals메서드에 대한 개념 정리
우선 내가 기존에 알던 equals메서드는 두 객체의 내용이 같은지 비교를 해서 같으면 true 다르면 false를 리턴한다.
String name1 = "seungjun";
String name2 = "seungjun";
System.out.println(name1.equals(name2));
// 실행 결과
true
name1의 값도 "seungjun"이고 name2의 값도 "seungjun"이라 같은 것으로 판단해 true를 반환한다.
결국 비교하는 값이 똑같은 모양이면 같다고 판단한다고 볼 수 있다.
근데 마카오뱅크의 equals는 내가 아는 equals랑 달라서 약간 혼돈을 일으켰다.
밑에 마카오 뱅크의 사용 예시를 보자
transaction1과 transaction2는 "잔액",1000으로 똑같다.
그래서 equals를 써서 둘이 비교하면 당연히 같다고 나올 줄 알았는데..
둘이 다르다고 나온다.
transaction1은 models.Transaction@1e1a0406
transaction2는 models.Transaction@3cebbb30 이 나와서 둘의 주소 값이 다르다는 것을 볼 수 있다.
근데 equals는 주소 값을 비교하는 게아니라 값 그자체를 비교하는게 아니었나??
그래서 찾아보니까 Object클래스의 equals메서드와 String클래스의 equals메서드가 다르게 작동하는 것을 알 수 있었다.
Objcet.equals()
Object클래스의 equals메서드는 객체의 주소를 비교한다.
위 예시처럼 같은 값을 가진 객체를 비교해도 생성할 때 주소가 다르게 부여되기 때문에 주소가 달라서 테스트는 실패한다.
String.equals()
String 객체를 비교할 때 쓰는 equals 메서드는 값 자체를 비교하기 때문에 주소가 달라도 문자열이 같으면 같다고 판단한다.
그 이유는 String을 비교할때 쓰는 equals메서드는 객체의 값이 같으면 같다고 판단하게 Override(재정의)되어 있기 때문이다.
결국에는 Object 클래스에서 equals메서드를 사용할 때 주소 값을 비교하고 싶은 게 아니라 값 그 자체를 비교하고 싶을 때는 Override를 해줘야 한다. 그래서 마카오 뱅크에서도 주소값을 비교하는게 아니라 값 자체를 비교하기 위해 Override를 해주는 것을 알 수 있다.
만일 오늘 짝프할때 동료분이 equals에 대해서 물어봐주지 않았다면 알고 있다고 착각해서 따로 시간 내서 equals를 공부하지 않았을 것이다.
계속해서 내가 알고 있는지 모르고 있는지 메타인지를 하는 게 정말 중요한 것 같다.
의미 없이 완성물만 만드는 짝프를 하지말고 알고있다고 생각하는 것들도 다시 한번 확인하는 시간으로 활용을 하자
내일도 짝프를 할텐데 동료분들에게 많은 질문 던져가면서 짝프를 하자!
'성장이야기 > TIL' 카테고리의 다른 글
220715 TIL 어렵다. 코딩 (0) | 2022.07.15 |
---|---|
220714 TIL 네이밍, 창작의 고통 (0) | 2022.07.14 |
220712 TIL 할 수 있다. 아니 해야 한다. (0) | 2022.07.12 |
220711 TIL 문제의 핵심을 파악하기 (0) | 2022.07.11 |
220710 TIL 걸어서 객체 속으로 (0) | 2022.07.10 |