본문 바로가기
320x100
320x100

앞의 글들을 보고 왔다면 자바에서의 Call By Value때문에 특정 메서드 내에서 지지고 볶아도 값이 바뀌지 않는다는 것을 알 수 있을 것이다

Call by Value with primitive type - 잘못된 사용

Call by value

- 실행결과

실행결과

두 값이 바뀔 수 있도록 해보자!!

 

Custom Wrapper Class 사용(Call by Value with mutable reference type)

가변 객체 클래스

임시로 값을 담을(Wrapping) 클래스를 정의하자

메인, 함수
실행결과

잘 바꼈다!!

근데 뭔가 좀 아쉽다.. 더 개선할 수 있는 부분이 없을까??

 

IntegerWrapper를 GenericWrapper로 변환

자바의 Generic을 활용해 어떤것이든 담을 수 있게 해보자

Generic Class
Generic Method
메인메서드
실행결과

Generic으로 담았기 때문에 Integer, Long타입 둘 다 값이 바뀌는 것을 확인해봤다

 

몇 가지 값을 바꿀 수 있는 추가적인 방법을 알아보자

 

Collections.swap() 사용

swap 메서드

Collections.swap(List, index1, index2)을 사용해서 바꿀 것이다

그럼 당연히 예상가능한건, List에 값을 담고, 참조한 값을 primitive value로 사용하면 된다는 것!

메인 메서드
실행결과

 

여기부터는 재밌는 방법들에 대해서 알아본다

 

값 복사와 재할당, 반환을 이용한 방법

swap 함수

이 swap 함수는 일반적이다. 그럼 이 함수를 호출하는 부분을 상상해보자..

main 메서드
실행결과

이게 어떻게 된걸까? 주석 + 코드로 설명해봤다

로직 설명

 

함수에서 바꾸지 않고, 값 계산식으로만 사용해서 바꾸기 (Single-line Swap)

전체 코드
실행결과

아래에 주석으로 설명을 달아놓았다

로직 설명

 

bitwise XOR(^) 연산자 사용하기

이전 식에서 ( )를 사용해서 변수 초기화와 값으로 변경할 수 있다는 것을 알았다

bitwise 연산자 활용
실행결과

두근두근.. 로직을 설명해본다

먼저 XOR 연산자(^)는 여러 특징을 갖고 있다

XOR 특징

위에처럼 아래에 주석으로 설명을 달아놓았다

로직 설명

이해가 됐길 바란다 끗!!

320x100

댓글