[TIL] 추상화와 T 메모리

hyo_·2021년 1월 26일
0

JAVA 

목록 보기
14/20

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

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


예시를 통해 추상화 과정과 그에따른 T 메모리 변화를 살펴보자!

1. 애플리케이션 경계 설정

2. 쥐 클래스 설계(추상화)

  • 쥐 클래스의 논리적 설계 (UML 클래스 다이어그램) ➡ 추상화 결과(모델)

🔽 클래스 설계, 즉 모델링에서 제일 중요한것은 바로 추상화이다. 애플리케이션 경계 내에서 관심있는 특성들만 뽑는다. 추상화는 주관적이며, 결과가 설계자 마다 다를 수 있다.

👉 추상화의 결과물은 모델!!

3. 논리적 설계 ➡ 물리적 설계

  • 쥐 클래스의 물리적 설계 (UML 클래스 다이어그램)

4. 설계 내용을 자바 코드로 변환

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() 메서드 스택 프레임을 종료하는 닫는 중괄호를 만나 프로그램 종료



🌞 Check it!! 🌞

  • 클래스 설계, 즉 모델링에서 제일 중요한것은 바로 추상화

  • 추상화의 결과물은 모델!!

  • 객체에 속한 속성은 스태틱 영역이 아닌 힙 영역에 동적으로 공간 할당이 됨

  • 클래스 멤버는 static 키워드를 사용하여 표시!!

profile
🎓의지적인 삶을 살자!😊

0개의 댓글