main에서 반환형 메서드를 독립적으로 쓸 수 있나요?

조회수 443회

main함수에서 특정 값이나 특정 객체를 반환하는 메서드를 호출할 때,

보통 그 메서드를 해당 타입의 변수나 객체에 대입하지 않습니까?

어떻게 독립적으로 쓸 수 있는건지 궁금합니다.

가령 다음과 같은 코드가 있다고 합시다.

package javaStudy;

public class Pet {
    private String name;
    private String eyeColor;
    private int hungryLevel;

    public Pet setName(String name) {
        this.name = name;
        return this;
    }

    public Pet setEyeColor(String eyeColor) {
        this.eyeColor = eyeColor;
        return this;
    }

    public static void main(String[] args) {
        Pet p1 = new Pet();
        p1.setName("Kitty");
        System.out.println(p1.setName("Kitty"));
    }
}

반환이란 말은 입력된 값을 특정연산을 통해 결과값을 구하여 돌려보낸다는 것이지 않습니까?

위 코드에 setName은 this, 즉 p1 자기 자신을 반환하지 않습니까?

여태까지는 메서드 사용을 통해 그 객체를 사용하기 위해

그 주소를 받아주는 변수에 대입을 해서 사용해왔었습니다.

그래서 당연히 메서드의 반환값을 받아주는 변수가 무조건 있어야 한다고 생각했기에

위와 같이 setName을 호출하는 경우 syntax error 및 runtime error 없이

정상수행되는 것이 이해가 가질 않습니다.

자바에서 return이 어떻게 동작되는지 알고 싶습니다.

2 답변

  • 자바는 잘 모르지만, 답변을 해 볼께요.

    1. 반환값을 받아주는 변수가 없어도 됩니다.
    2. this 를 반환하는 메소드는 다음과 같이 여러 메소드를 연이어 한줄에 호출할 수 있기 때문에 편리합니다. ( method chaining )
      • mypet.setName("바둑이").setEyrColor("갈색");
    • 답변 감사합니다 :) 임지훈 2021.10.9 01:23
  • 반환값을 받아주는 변수가 없어도 되는 이유

    설#1) 메서드들은 메인함수부터 하나씩 스택으로 쌓여서 실행됨 메서드가 실행되고 리턴값이 있어도 변수로는 할당이안되고 그냥 지나가는거라는 설.

    설#2) return 값을 줘도 결국에 작성한 사람이 안 담거나 사용하지 않으면 쓰레기 값으로 처리할 것임. return 3이라고 주면 결국에는 사용안하면 3이라는 상수는 그냥 쓰레기 값. 메소드에서 값은 주는데 변수를 사용하지 않으면 컴퓨터가 메모리를 쓰지 않을 것임. 혹은 가비지 컬렉션에 의해 반환된 객체의 메모리를 비운다거나.

    method chaining

    String str2 = new StringBuffer().append("hello").append(" ").append("world").toString();

    설#1) String 참조변수인 str2에 계속해서 this를 반환하므로서 동일한 객체에 연속적인 메소드를 호출할 수 있음

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)