Java 메소드 체이닝

별의개발자커비·2023년 2월 11일
0

Java

목록 보기
25/66
post-thumbnail

메소드 체이닝이란?

여러 메서드 호출을 연결해 하나의 실행문으로 표현하는 문법

방법

체이닝으로 연결하고 싶은 메서드의 반환 값으로 this를 반환하기

: setter 메소드에서 해당 객체를 this를 통해 리턴하면 해당 객체가 리턴이 되고 해당 객체에 다시 메소드를 호출하게 되면 리턴값을 this를 통해 객체를 리턴하는 방식을 계속하면 .메소드().메소드()......를 방식으로 한번에 메소드를 이어 나갈 수 있다.

차이점은 setter() 메소드에서 void가 아닌 해당 객체를 리턴을 하고 있고 그 아래에서는 해당 객체에 set을 하고 나서 return 값으로 this 즉, 해당 변수가 세팅된 값을 가지고 있는 객체를 리턴하게 된다.


그래서 코드에서 setHeight의 리턴값은 객체(ChainingPeple)이고 해당 객체에 다시 setWeight를 해도 객체(ChainingPeple)이고 다시 해당 객체에 setResidence()를 해도 객체 값이 리턴이 된다.

그래서 생성된 해당 객체에는 정상적으로 getter를 사용하여 값을 반환해보면 정상적으로 값이 세팅이 되어있는 형태를 볼 수 있다.

출처 https://dreamcoding.tistory.com/60

package lesson6;

public class Staff {
	// 변수: name, age
	// 메소드 : sayHello 리턴타입 없고 내용 없는
	
	private String name;
	private int age, height, weight ; 
	
	public String getName() {
		return name;
	}
	
	// 메소드 체이닝을 위한 준비도 해보자 
	public Staff setName(String name) { // 1. 오잉? void, int 자리에 Staff를 넣고?
		this.name = name;
		return this;  // 2. 그리고 자기 자신을 리턴? -- 원래 버전과 다르게 장점 바꾸길, 추가하길 원하는 값만 설정해놓고 나머지는 비워놔도 되기 때문
	}
	public int getAge() {
		return age;
	}
	public Staff setAge(int age) {
		this.age = age;
		return this; 
	}


	
	public Staff() {
		
	}
	
	

	
	void sayHello() {
		System.out.printf("안녕 나는 %s이고 %d살이야. 반가워!\n", getName(), getAge() );
	}

}
package lesson6;

public class StaffDemo {

	public static void main(String[] args) {
		Staff s = new Staff();

		// 버전1
//		s.setAge(20);
//		s.setName("현");
//		s.sayHello();

		// Demo에 오잉 과정이 추가되어야하는 버전2 = 체이닝 연속
		// 장점: 
		s.setName("현").setAge(25).sayHello();
		
		s.setName("kim").sayHello();


	}

}

0개의 댓글