코드 그라데이션

[보충] 객체 지향에 대한 이해 - 객체 변수는 공유되지 않는다. 본문

Java/Mega

[보충] 객체 지향에 대한 이해 - 객체 변수는 공유되지 않는다.

완벽한 장면 2023. 3. 29. 11:43

객체 변수는 공유되지 않는다.

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");

        Animal dog = new Animal();
        dog.setName("happy");
    }
}

 

cat객체에는 "boby"라는 이름을 대입하고 dog객체에는 "happy"라는 이름을 대입했다.

이렇게 하면 setName 메서드에 의해 다음과 같은 문장이 두번 실행될 것이다

cat.name = "boby"; dog.name = "happy";

 

 

이럴 경우 dog.name = "happy" 라는 문장이 나중에 수행되므로

cat.name의 값도 "happy"라는 값으로 변경되지는 않을까?

 

Animal 클래스의 객체변수 name이 cat객체와 dog객체간 서로 공유되는 변수라면 아마도 그럴 것이다.

 

시도해 보기

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");  // 메서드 호출

        Animal dog = new Animal();
        dog.setName("happy");

        System.out.println(cat.name);
        System.out.println(dog.name);
    }
}

 

실행 결과

boby
happy

 

결과를 보면 name 객체 변수는 공유되지 않는다는 것을 확인할 수 있다.

 

클래스에서 가장 중요한 부분은 그 뭐라해도

객체 변수의 값이 독립적으로 유지된다는 점이다.

사실 이 점이 바로 클래스 존재의 이유이기도 하다.

객체 지향적(Object Oriented)이라는 말의 의미도 곱씹어 보면

결국 이 객체 변수의 값이 독립적으로 유지되기 때문에 가능한 것이다.

객체 변수의 값은 공유되지 않지만 static을 이용하게 되면 객체 변수를 공유하도록 만들 수도 있다.

728x90
Comments