코드 그라데이션

[보충] 객체 지향에 대한 이해 - 메소드(1) 본문

Java/Mega

[보충] 객체 지향에 대한 이해 - 메소드(1)

완벽한 장면 2023. 3. 29. 10:41

이제 객체 변수에 값을 대입하는 방법에 대해서 알아보자.

객체 변수에 값을 대입하는 방법에는 여러가지가 있지만

여기서는 가장 보편적인 메서드를 이용하는 방법에 대해서 알아보자.

 

클래스에는 객체 변수와 더불어 메서드(Method)라는 것이 있다.

메서드는 클래스 내에 구현된 함수를 의미하는데 보통 함수라고 말하지 않고 메서드라고 말한다.

 

메서드 추가하기

class Animal {
    String name;

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

public class Sample {
    public static void main(String[] args) {
        Animal cat = new Animal();
        System.out.println(cat.name);
    }
}

 

속성

  • 입력: String name
  • 출력: void (리턴값 없음)

 

여기서 잠깐,

this.name = name;

이건 무엇일까?

 

일단,

setName(String name) 을 호출하도록, 조금 수정하자.

cat.setName("boby");

 

여기서 setName 메서드의 입력으로 "boby"와 같은 문자열을 전달해야 한다.

왜냐하면 setName메서드는 입력항목으로 문자열을 필요로 하기 때문이다.

 

setName메서드를 호출할 수 있도록 main메서드를 다음과 같이 수정.

class Animal {
    String name;

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

public class Sample {
    public static void main(String[] args) {
        Animal cat = new Animal();
        cat.setName("boby");  // 메서드 호출
        System.out.println(cat.name);
    }
}

이렇게 수정하면 cat.name을 출력하기 전에 setName 메서드가 먼저 호출 될 것이다.

 

-------------

다시...

this.name = name;

여기로 와보자.

 

main메서드에서 cat.setName("boby") 와 같이 "boby"라는 입력값으로 setName 메서드를 호출했기 때문에

setName함수의 입력항목 name에는 "boby"라는 문자열이 전달될 것이다.

 

따라서 setName 메서드의 this.name = name; 문장은 다음과 같이 해석될 것이다.

this.name = "boby";

 

setName 메서드 내부에 사용된 this

Animal 클래스에 의해서 생성된 객체를 지칭한다.

 

만약 Animal cat = new Animal() 과 같이 cat이라는 객체를 만들고 

cat.setName("boby") 와 같이

cat객체에 의해 setName 메서드를 호출하면

setName 메서드 내부에 선언된 this는 바로 cat 객체를 지칭한다.

만약 Animal dog = new Animal()로 dog 객체를 만든 후 dog.setName("happy") 와 같이 호출한다면
setName 메서드 내부에 선언된 this는 바로 dog 객체를 가리킨다.

따라서 this.name = "boby"; 문장은 다시 다음과 같이 해석된다.

cat.name = "boby";

 

------------

 

정리하자면

객체 변수에 값을 대입하는 방법은 아주 쉽다. 그냥 변수에 값을 대입하는 것과 마찬가지 방법이다.

객체.객체변수 = 값

따라서 cat.name = "boby"라는 문장은 객체 cat의 객체변수 name에 "boby"라는 값을 대입

 

 main 메서드를 다시 실행해보면

null 값이 아닌,

boby
728x90
Comments