본문 바로가기

개발언어/Java _ Spring

자바_this의 활용

 

자바언어의 클래스에서 특히Mo클래스에는 빠지지 않고 등장할만큼 익숙하고 많이 쓰이는 this

기본생성자에 변수 구분을 위해 자주 쓰이는this는 그 이외에도 클래스와 메서드를 넘나들며 데이터 입출력과 클래스간 상호작용 등 다양한 쓰임새가 있다.

알고나면 더 높은 활용도로 간결한 코드에 도움이 될 수 있는 this의 활용법에 대해 소개하고자 한다.

 

 

This활용법 4가지

  1.  클래스의 기본생성자에서 매개변수의 변수명과 클래스의 변수명을 구분
  2.  체이닝(Method Chaining) 활용
  3.  생성자에서 기본생성자 호출
  4. 클래스간 호출시 인자로 변수 값 전달

 

1.클래스의 기본생성자에서 매개변수의 변수명과 클래스의 변수명을 구분

가장 일반적인 경우이다. 인수를 전달된 값으로 생성자에서 값을 지정하고 싶다

public ConstructorTest(int age) {
this.age = age;

여러 클래스를 통해 변수를 주고 받는 자바언어의 특성 상,

각 변수의 의미를 명확하게 두어 의미를 전달 하곤 한다. 타 클래스를 통해 받은 매개변수의 이름을 다르게 설정하면 코드야 더 간결해 질 수 있겠지만 변수명에 차이를 두면 코드리뷰에 혼란이 가중된다.

 

이처럼 클래스명 뒤로 받는 인자의 변수명과 , 해당 클래스의 변수를 구분하기 위해 사용되는

가장 보편적이고 많은 이들이 알고 있는 활용법이다

 

2. 체이닝(Method Chaining) 활용

왜 체이닝을 하는가? : 함수를 호출할 때 연계되어있는 함수들이 있기도 하다

함수간의 연계가 되어, 이것을 임의로 수정했을때 클래스가 본래 의도하였던 부분과는 다른 내용이 더해져 코드의 기능이 수정될 수 있다.

이럴때 체이닝을 사용하며 호출되는 중간에 다른 메시지를 삽입할 수 없게 되어, 이러한 수정을 방지할 수 있다.

또한 체이닝을 통한 메소드 호출 연결 리스트에서 독립적으로 수행하기 때문에, 오버 플로우가 발생해도 수행 시간과 메모리 측면에서 효율적이다.

 

oner.t1().f2().f3();//   체이닝 - 코드난입이 되지 않는다.
		
		oner.t1();
		oner.f2();
		oner.f3(); //     임의의 내용이 들어가 내용이 바뀔 수 있다

 

3. 생성자에서 기본생성자 호출

하나의 클래스에 변수가 2개 이상 있다고 가정하자.

일부는 해당 클래스에서 직접 지정할텐데, 몇몇의 변수는 기능을 통해 사용자에게 값을 받은 인자로 지정하고 싶다.

 

이럴경우 생성자는 두개 이상이 생성되는데, 간단한 경우라면 직접 지정하면 될테지만,

기본생성자로 지정한 변수들의 갯수들이 많아진다면... 이야기가 달라진다.

	public Facker() {
		x = 100;
	}
	Facker(int y){
//		this.x = 100;	//지정할 변수가 한개는 즉시지정이 가능하나.. 갯수가 많아진다면??...





		this();			//기본생성자가 호출된다. 많은 기본변수가 있다면 this();로 코드 중복이 방지된다
		this.y = y;
	}

위 코드처럼 변수x 하나만 있다면, 인자를 받아오는 생성자에서 재정의 할 수 있다.

하지만 위의 변수의 갯수가 많아진다면? this() 메서드로 기본 생성자를 호출할 수 있게된다.

 

위의 방법을 응용하여 기본생성자에 매개변수로 값을 넣어 지정할 수 있다.

	public Facker() {
		
	}
	Facker(int y){

		this(100);			//기본생성자가 호출된다. 많은 기본변수가 있다면 this();로 코드 중복이 방지된다
		this.y = y;
	}

 

이로서 코드 중복이 방지된다

 

4.클래스간 호출시 인자로 변수 값 전달

두개의 클래스가 서로 상호작용할때,

메서드를 호출하는 매개변수로서 값을 보내고자 할 때, 각 클래스의 변수를 지정할 수도 있겠지만,

this를 명시함으로써 해당 클래스의 변수나 혹은 조건문의 결과값, 리턴값을 바로 되돌려줄 수 있다.

 

메서드의 매개변수로 클래스를 지정 / 해당 메서드를 호출할때 매개변수에 this 지정

 

이것으로 두 클래스의 상호작용을 이끌어낼 수 있다.

 

class Gumausi {

	 boolean penta(Zeus us) {
		if( us.money < 200 ) {
			return false;
		}
		if( us.cham.equals("제이슨")) {
			return true;
		}
		return false;
	}
	
}
class Zeus{
	int money = 1000;
	String cham = "제이슨";
	void f1() {
		Gumausi gus = new Gumausi();
		if( gus.penta(this) == true ) {
			System.out.println( "t1 가자!!" );
		}else {
			System.out.println( "다음경기 잘 준비하겠습니다" );
		}
		gus.penta(this);		//Gumausi 클래스의 penta()의 인자에 this를 넣어 Zeus클래스의 변수의 값을 넘겨준다					
	}
	
}

위 코드는 간단한 변수와 조건문이 있는 코드로

Gumausi 클래스의 penta()의 인자에 this를 넣어 Zeus클래스의 변수의 값을 넘겨준다  

메서드의 매개역시  boolean penta(Zeus us)으로, 받는 자료형을 모두 지정해주는 일반적인 메서드들과 다르게 코드가 간결해진 느낌이다.

 

 

 


결론

this와 this()의 활용에 대해 알아보았다.

흔이 쓰이지만 생각보다 다양한 활용법으로 광범위하게 사용할 수 있고,

사용빈도가 많은만큼 손에 익으면 코드에 활용도가 높은 방법이다.

자바의 기초소양으로 this을 알아가면 어떨까

 

'개발언어 > Java _ Spring' 카테고리의 다른 글

HashMap()의 간단한 개념과 주요 메서드 와 설명  (0) 2023.01.31
스프링 입문 _ 섹션2. 스프링 웹 개발 기초  (0) 2022.12.05
다형성(Polymorphism)  (0) 2022.08.16
for문  (0) 2022.08.03
조건문 if  (0) 2022.08.02