※ 본 글은 아래 도서를 공부한 후 정리한 내용입니다.
📚 스프링 입문을 위한 자바 객체지향의 원리와 이해
🐕 생물인 경우 "나이가 어떻게 되나요?"
👕 무생물인 경우 "제조일자가 어떻게 되나요?"
클래스 : 분류체계 ➡ 속성값 없음 ❌
객체 : 유일무이하게 존재하는 실체 ➡ 속성값 있음⭕(위의 질문에 대답 가능)
🐭 미키마우스의 꼬리는 몇 개인가요?
제리의 꼬리는 몇 개인가요?
쥐의 꼬리는 몇 개인가요?
위의 세가지 질문의 답은 한 개다. 미키마우스, 제리는 객체로 볼 수 있다. 그런데 쥐는 클래스인데 꼬리 개수에 답이 있다. 꼬리 개수는 객체의 속성이지만 모든 객체가 같은 값을 가지고 있기에 클래스를 통해 질문해도 한개라는 답을 알 수 있다. 이런경우에 정적 속성을 사용한다.
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)
클래스는 속성값 ❌
객체는 속성값 ⭕
하나의 클래스에 모든 객체가 같은 값을 가질 때 정적 속성을 사용!
클래스 멤버 = 정적 멤버 = 스태틱 멤버
객체 멤버 = 오브젝트 멤버 = 인스턴스 멤버