TIL - 항해99 9일차

스브코·2021년 11월 10일

오늘은 기본 문제 40 + 첼린지 문제 14 까지 모두 완료 하였다. 사실 52문제는 미리 풀어둔 문제라 2문제만 풀었다. 역시 문제를 잘 못 이해하여 한 문제를 푸는데 거의 5시간 가까이 걸렸는데, 잘못된 방식으로 풀긴했지만 재귀 + 완전 탐색 연습이 되어서 나름 성과가 있었다고 생각한다.

팀원분이 풀이 중 해결되지 않는 부분을 설명해주셨는데 Java의 call by referece, call by value 개념을 찾아 보라고 하셔서 확인해보니 학교에서 1학년때 배운것 같은데 생각이 가물가물 하여 다시 복습해보았다.

Integer [] int [] 다른 것

오늘 배운 부분

Call by reference, Call by value 또는 Pass by reference, Pass by value

Call by reference는 함수의 인자를 전달할 때 '주소를 전달하는 방식'이고 Call by value '값을 전달하는 방식이다.

Call by value 방식을 수행할 때는 값을 넘겨 받은 메소드에서 값을 복사하여 새로운 지역변수에 저장합니다. 이 말은 즉 새로운 메소드에서 똑같은 복사된 값으로 새롭게 지역 변수가 생성된 것입니다. 그래서 값을 넘겨준 메소드의 값에는 아무런 영향을 끼치지 않습니다.

하지만, Call by reference 방식으로 수행을 하면 값을 넘겨 받아 복사하는 것이 아니라 주소를 공유하는 것이기 때문에 주소를 넘겨준 메소드의 값들에 영향을 끼칠 수 있습니다. 이러한 방식은 Heap memory 영역에 생성된 객체의 주소값을 참조하기 때문에 '참조타입' 이라고 불립니다.

자세한 출처는 여기에서 ---> https://velog.io/@ahnick/Java-Call-by-Value-Call-by-Reference

Java 배열은 Call by reference

int arr [] = {1, 2, 3, 4};
int[] arrCopy = arr;
arrCopy[2] = 0;
System.out.println(arr[2]) ----> 0이 나옴

arrCopy가 arr의 주소값을 가져왔으므로 실제 Copy를 통해 새 배열을 생성하려면 Arrays.copyOf를 사용해야 한다.

Integer 와 int

코딩 문제를 풀다가 다르다는건 알지만 정확히 몰라 찾아보게 되었다.

출처에 유용한 기본 지식들이 많았다. ------> https://includestdio.tistory.com/1

int

  • primitive 자료형
  • 산술연산 가능
  • null로 초기화 할 수 없다.
  • 사이즈가 작다(4 byte)

Integer

  • Unboxing을 하지 않으면 산술 연산이 불가능
  • null 값 처리 가능, SQL과 연동하여 처리 용이
  • 사이즈가 크다(16 byte + 참조하는데 4 byte) = 20 byte

boxing / unboxing 예제

Integer integer = i; // int -> Integer (Auto boxing)
int i2 = integer; // Integer -> int (Auto unboxing)

valueOf와 parseInt 차이

  • Integer.valueOf(String)

    Integer 클래스를 리턴하기 때문에 산술 연산을 할 수 없다.

  • Integer.parseInt(String)

    int 형을 리턴하기 때문에 산술 연산을 할 수 있다.

회고

  • 두 문제를 풀어도 깊이 들여다 보면 배울게 많다.

  • 역시 문제는 같이 풀어야 더 열심히 한다.(주변 사람들이 잘 하면 정신 바짝 차리게됨)

  • 코테는 역시 갈길이 멀다....

profile
익히는 속도가 까먹는 속도를 추월하는 그날까지...

0개의 댓글