[꼼꼼한 개발자] 꼼코더
15. 스프링 입문을 위한 자바 객체 지향의 원리와 이해 - [자바와 객체 지향] - 추상화 실습, static, 정적 메서드 본문
15. 스프링 입문을 위한 자바 객체 지향의 원리와 이해 - [자바와 객체 지향] - 추상화 실습, static, 정적 메서드
꼼코더 2022. 12. 27. 18:44🖌 추상화 실습
쥐 클래스를 추상화하여 클래스와 인스턴스를 만들어보자
아래 그림은 main() 메서드 실행 직전의 T메모리 스냅샷이다
주목할 점은 Mouse의 속성들의 변수 저장 공간이 없다.
이유는 3개 속성 모두 Mouse 클래스에 속하지 않고 Mouse 객체에 속하기 때문.
즉 객체가 생성되야만 힙 형역에 할당되어 변수 공간이 생성된다.
Mouse micky = new Mouse();라는 코드가 실행된다.
이때micky라는 참조변수가 가리키는 번지수는 100번이라고 가정한다.
그럼 아래와 같은 T 메모리 구조가 나타난다.
📌 static 예제
위에 설계도를 보면 꼬리(countOfTail)라는 속성이 보인다.
근데 ‘미키마우스’, ‘제리’, ‘찍찍이’ 모두 꼬리는 1개이다.
우리는 여기서 한 공간에 꼬리 1개 값을 고정고정하여 사용하고 싶은 욕구가 있어야 한다.(개발자라면..)
- 수정 전 선언 : public int countOfTail = 1;
- 수정 전 접근 : micky.countOfTail = 1; (객체 생성 필수)
- 수정 후 선언 : public static int countOfTail = 1;
- 수정 후 접근 1 : micky.countOfTail = 1; (객체 생성 선택)
- 수정 후 접근 2: Mouse.countOfTail = 1; (객체 생성없이 클래스로도 접근가능)
또한 static 사용 시 중요한 점 하나는 정적 속성인 경우(countOfTail 변수) T메모리의 스태틱 영역에 클래스가 배치될 때 클래스 내부에 메모리 공간이 확보되는 것을 보여준다.
이에 반해 객체 속성은 속성명만 있고 실제 메모리 공간은 확보하지 않았다.
우리는 위에 코드를 보며 알 수 있는 점은
static 키워드가 없는 속성은 ‘객체 멤버 속성’이라고 하고.
static 키워드가 있는 속성은 ‘클래스 멤버 속성’이라고 한다.
따라서 추상화 모델링시 이 또한 참고해야 할 부분이다.
📚 용어 정리
- 클래스 멤버들은 static 키워드와 함께하고 T 메모리의 stataic 영역에 상주하게 되므로 stataic(정적) 멤버라고도 한다.
- 객체 멤버들은 객체가 클래스의 인스턴스 이므로 인스턴스 멤버라고도 한다.
❓ 정적 메서드의 사용 / 언제 써야 할까?
정적 메서드는 객체들의 존재 여부에 관계없이 사용할 수 있기에 우선 main() 메서드는 정적 메서드여야 한다.
추가로 정적 변수에 대한 접근자 메서드와 설정자 메서드 (getter/setter)로 사용하는 용도 정도가 있다.
실무에서는 클래스의 인스턴스를 만들지 않고 사용하게 되는 유틸리티성 메서드를 주로 정적 메서드로 구성한다.
Math 클래스에 있는 수많은 정적 메서드를 본 기억이 있을 것이다.