[TIL] 클래스 멤버VS. 객체 멤버 = static 멤버vs. 인스턴스 멤버

※ 본 글은 아래 도서를 공부한 후 정리한 내용입니다.

📚 스프링 입문을 위한 자바 객체지향의 원리와 이해


클래스와 객체 구분법

🐕 생물인 경우 "나이가 어떻게 되나요?"
👕 무생물인 경우 "제조일자가 어떻게 되나요?"

클래스 : 분류체계 ➡ 속성값 없음 ❌
객체 : 유일무이하게 존재하는 실체 ➡ 속성값 있음⭕(위의 질문에 대답 가능)

But!!

🐭 미키마우스의 꼬리는 몇 개인가요?
제리의 꼬리는 몇 개인가요?
쥐의 꼬리는 몇 개인가요?

위의 세가지 질문의 답은 한 개다. 미키마우스, 제리는 객체로 볼 수 있다. 그런데 쥐는 클래스인데 꼬리 개수에 답이 있다. 꼬리 개수는 객체의 속성이지만 모든 객체가 같은 값을 가지고 있기에 클래스를 통해 질문해도 한개라는 답을 알 수 있다. 이런경우에 정적 속성을 사용한다.

T 메모리를 살펴보면서 이해해 보자. Mouse의 객체가 모두 같은 값인 countOfTail 속성을 각각 공간을 가지고 있다.

이렇게 같은 유형(클래스)의 모든 객체가 같은 값은 가지고 있다면, 그 값을 클래스에 저장 할 수 있다. 그럼 그 속성은 정적 속성이 되는것이고, 이로인해 객체 수 만큼 생성되었던 메모리 공간도 아낄 수 있게된다.

전 게시물에서 다뤘던 Mouse.java 코드는 4번째 줄의 코드는 이렇게 바뀌게 된다.

public int countOfTail = 1;public static int countOfTail = 1;

1 public class Mouse{
1    public String name;
3    public int age;
4    public static int countOfTail = 1;
5    
6    public void sing() {
7    	System.out.println(name + "찍직!!");
8    }
9} 

countOfTail 속성은 T 메모리의 스태틱 영역에 단 하나의 저장 공간을 갖게되고, countOfTail 속성에 접근 시 객체_참조_변수.countOfTail 또는 클래스명.countOfTail을 사용하게 된다.


정리

👉 정적 속성은 해당 클래스의 모든 객체가 같은 값을 가질 때 사용하는 것이 기본!!
UML 표기법에서 정적 멤버에 대해서는 밑줄을 사용한다. 클래스 멤버 = 정적 멤버 = 스태틱 멤버는 모두 같은 말이고, 객체 멤버 = 오브젝트 멤버 = 인스턴스 멤버도 같은 말이다. 필드 = 속성 = 프로퍼티(Property)



🌞 Check it!! 🌞

  • 클래스는 속성값 ❌

  • 객체는 속성값 ⭕

  • 하나의 클래스에 모든 객체가 같은 값을 가질 때 정적 속성을 사용!

  • 클래스 멤버 = 정적 멤버 = 스태틱 멤버

  • 객체 멤버 = 오브젝트 멤버 = 인스턴스 멤버

좋은 웹페이지 즐겨찾기