메소드에 객체를 입력받기

김민영·2023년 1월 22일
0

Java

목록 보기
7/14

목표

  • cat의 status를 sleep으로 만들기

과정

  • ChangeAnimalState라는 클래스를 만든다.
    • 클래스에 Animal이라는 객체를 멤버변수로 만들고 cat.state를 바꾸는 방법이 있고,
    • 클래스의 sleep 메소드에만 매개변수를 받아서 cat.state를 바꾸는 방법이 있다.
      • 이 방식을 사용한다.
      • ChangeAnimalState 클래스는 cat의 상태만 변화시킬 것이기에 Animal 값이 남지 않아도 된다.

Animal 클래스

public class Animal {
    // 멤버 변수(필드)
    private int age;
    private String name;
    private String state;

    public Animal(String name, int number) {
    
        this.name = name;
        age = number;
        state = "awake";
    }
}

ChangeAnimalState 클래스

public class ChangeAnimalState {
//    private Animal animal;

    public ChangeAnimalState() {
//        this.animal = animal;
    }

    public void sleep(Animal animal) {
        animal.setState("sleep");
        System.out.println(animal.getName() + " is " + animal.getState());
    }

}
  • 주석 처리된 부분은 클레스에 Animal 멤버변수를 남겨놓는 방식이다.

메인 클래스

public class test {

    public static void main(String[] args){

        Mammalia cat = new Mammalia("happy", 10);

        ChangeAnimalState changeCatState = new ChangeAnimalState();
        changeCatState.sleep(cat); // happy is sleep
        System.out.println(cat.getState()); // sleep

주의사항

  • 객체 자체를 받지 않고, 메소드에 객체의 멤버변수를 넘겨주게 되면, 객체 자체의 멤버변수는 변하지 않는다.
  • 아래 예제 코드에서는 eatingState가 그러하다.

ChangeAnimalState 클래스

public class ChangeAnimalState {

    public ChangeAnimalState() {
    }

    public void sleep(Animal animal) {
        animal.setState("sleep");
        System.out.println(animal.getName() + " is " + animal.getState());
    }

    public void eatingState(String state) {
        state = "eating";
    }
}

메인 클래스

public class test {

    public static void main(String[] args){

        Mammalia cat = new Mammalia("happy", 10);

        ChangeAnimalState changeCatState = new ChangeAnimalState();
        changeCatState.sleep(cat); // happy is sleep
        System.out.println(cat.getState()); // sleep
        
        changeCatState.eatingState(cat.getState());
        System.out.println(cat.getState()); // sleep
  • 기대하는 출력값은 eating이지만 sleep으로 출력됨을 볼 수 있다.
profile
노션에 1차 정리합니당 - https://cream-efraasia-f3c.notion.site/4fb02c0dc82e48358e67c61b7ce8ab36?v=

0개의 댓글