※ 본 글은 아래 도서를 공부한 후 정리한 내용입니다.
📚 스프링 입문을 위한 자바 객체지향의 원리와 이해
🔽 클래스 설계, 즉 모델링에서 제일 중요한것은 바로 추상화이다. 애플리케이션 경계 내에서 관심있는 특성들만 뽑는다. 추상화는 주관적이며, 결과가 설계자 마다 다를 수 있다.
👉 추상화의 결과물은 모델!!
Mouse.java
1 public class Mouse {
2 public int age;
3 public int countOfTail;
4
5
6 public void sing(){
7 System.out.println(name + "찍찍!!!");
8 }
9 }
🔎 Mouse 클래스의 객체를 생성해 보고 객체의 특성을 활용할 수 있도록 main()메서드를 가진 테스트 클레스 생성해 보자. (그에 따른 T 메모리 변화도 살펴보자)
MouseDriver.java
1 public class MouseDriver {
2 public static void main(String[] args){
3 Mouse mickey = new Mouse();
4 mickey.name = "미키";
5 mickey.age = 85;
6 mickey.countOfTail = 1;
7
8 mickey.sing();
9
10 mickey = null;
11
12 Mouse jerry = new Mouse();
13
14 jerry.name = "제리";
15 jerry.age = 73;
16 jerry.countOfTail = 1;
17
19 jerry.sing();
20 }
21 }
① MouseDrover.java의 4번째 줄 직전의 T 메모리 스냅샷
🔼 java.lang 패키지와 모든 클래스(Mouse,MouseDriver)이 T메모리 스태틱 영역에 배치!
Mouse의 name, age, countOfTail의 변수 저장 공간이 없음.
➡ name, age, countOfTail은 Mouse의 클레스에 속한 속성이 아닌 Mouse 객체에 속한 속성
➡ 객체 생성 시 속성값을 저장하기 위한 메모리 공간이 힙 영역에 할당
➡ MouseDriver의 main() 메서드에는 밑줄이 Mouse의 sing()에는 밑줄이 없다.
🔰 UML 표기법
- 클래스 멤버에는 밑줄 표현
- 객체 멤버에는 밑줄 없이 표현
➡ 클래스 멤버와 객체 멤버를 구분하는 자바 키워드
static
② 3번째 줄 Mouse mickey = new Mouse()
;
③ 4~6번째 줄 실행 시 힙 영역 Mouse 객체 공간의 name, age, countOfTail에 각각 값을 대입
( String은 약식으로 그림)
④ 8번째 줄 실행시 "미키 찍찍" 출력!
⑤ 10번째줄 mickey = null;
을 실행하면 객체 참조 변수인 mickey가 더이상 힙 영역의 Mouse 객체(:Mouse)를 참조하지 않음 ( 이후 가비지 컬렉터가 다녀갔다고 가정 )
⑥이후 jerry 변수도 mickey와 동일한 방식으로 생성
⑦ 19번째 줄에서 "제리 찍찍"을 출력한 뒤 mai() 메서드 스택 프레임을 종료하는 닫는 중괄호를 만나 프로그램 종료
클래스 설계, 즉 모델링에서 제일 중요한것은 바로 추상화
추상화의 결과물은 모델!!
객체에 속한 속성은 스태틱 영역이 아닌 힙 영역에 동적으로 공간 할당이 됨
클래스 멤버는 static 키워드를 사용하여 표시!!