[3단원]추상화와 T 메모리

쥐 캐릭터를 통한 추상화

쥐 캐릭터의 특성

  • 제리
    • 객체명: 쥐 캐릭터의 이름 → 제리
    • 성명: 제리
    • 국적: 미국
    • 나이: 75
    • 종교: 기독교
    • 친구: 톰
    • 여자친구: null
    • 꼬리: 1개
  • 미키마우스
    • 객체명: 쥐 캐릭터의 이름 → 미키마우스
    • 성명: 미키마우스
    • 국적: 미국
    • 나이: 87
    • 종교: 무교
    • 신장: 70cm
    • 여자친구: 미니마우스
  • 행위 기준
    • 미키마우스
      • 달리다
      • 먹다
      • 휘파람…
    • 제리
      • 달리다
      • 먹다
      • 장난치다…

추상화의 기준?

  • 클래스 설계나 모델링에서 중요한 것이다 추상화입니다
  • 애플리케이션 경계 내에서 중요한 특성만을 선택하는 것은 주관적입니다.
    • 이로 인해 설계자마다 다른 결과물이 나올 수 있습니다.
  • 추상화를 통해 얻어진 결과물을
    • 모델
  • 자바 언어에서는
    • 클래스

    라고 합니다

T메모리 그려보기

public class Mouse {
    public String name;
    public int age;
    public int countOfTail;
    
    public void sing() {
        System.out.println(name + " 찍찍!!");
    }
}
public class MouseDriver {
    public static void main(String[] args) {
        Mouse mickey = new Mouse();
        mickey.name = "미키";
        mickey.age = 85;
        mickey.countOfTail = 1;
        
        mickey.sing();
        
        mickey = null;
        
        Mouse jerry = new Mouse();
        jerry.name = "제리";
        jerry.age = 73;
        jerry.countOfTail = 1;
        
        jerry.sing();
    }
}
  1. public static void main(String[] args){ 까지의 메모리 구조
    • static Area == MethodArea == MetaSpace == Class Area
      • 에 java.lang 패키지와 모든 클래스들이 배치된다.
      • Mouse 의 3개의 속성들은 이름만으로만 존재한다.
        • 왜?
          • Mouse 클래스에 속한 Static 한 속성이 아니라, Mouse 객체에 속한 속성이다.
          • 객체가 생성되어야 속성의 값을 저장하기 위한 힙 영역 에 값을 할당할 수 있기 때문이다.
      • main 메서드는 밑줄인데, 왜 sing 메서드는 밑줄이 아닐까?
        • main 메서드는 static 한 메서드로서 ⇒ 스태틱 영역에 속해있기에

          밑줄로 구분하기로 UML 상으로 약속되어있다.

        • sing 메서드는 객체에 대한 메서드로 객체가 생성될때 힙 영역에 할당되는 메서드이기에,

          밑줄이 표시되어있지 않다.

  1. Mouse mickey = new Mouse(); 실행시의 T 메모리 구조
    • 3가지 명령문이 포함되어있다.
      1. Mouse mickey
        • Mouse 객체에 대한 참조변수 mickey 를 선언
        • mickey ⇒ Mouse 타입의 객체를 참조할 수 있는 객체 참조변수 mickey 가 스택영역에 샐성됩니다.
        • 아직은 어떠한 것도 참조하고 있지 않습니다.
      1. new Mouse()
        • Mouse 클래스의 새로운 인스턴스를 생성
        • 힙 메모리에 Mouse 객체가 생성된다.
      1. 대입문
        • 생성된 Mouse 객체의 주소(포인터) 를 mickey 참조 변수에 할당
        • Mouse 의 힙 상의 주소가 100 이라면 주소값 100 의 값이 mickey 참조변수에 담기게 됩니다.
  1. 메모리
    public class MouseDriver {
        public static void main(String[] args) {
            Mouse mickey = new Mouse();
            mickey.name = "미키";
            mickey.age = 85;
            mickey.countOfTail = 1;
    • name 은 String 객체로 취급되며
    • 문자 상수풀의 값이 생성되어, 해당 값을 원래는 참조하는 형태로 구현되어있다
    • 하지만 책에서는 String 을 간소화하여 표현중이다!
  1. mickey.sing()
    1. main 스택 프레임에 sing() 메서드의 메서드 스택이 쌓인다.
    1. sing() 메서드 안의 코드 실행(코드 실행 영역은 일단 생각에서 배제하자)
    1. sing 안의 중괄호가 닫히면서 메서드 스택에서 소멸
  1. mickey = null;
    • mickey 참조변수가 가지고 있던 주소값이
    • null 로 변경된다. (연결이 끊김)
  1. null 이후 GC 동작
    • 가비지 컬렉터
      • 프로그램에서 더 이상 사용되지 않는 메모리를 자동으로 회수하는 시스템
      • 객체를 참조하는 변수가 더 이상 해당 객체를 참조하지 않게 되면

        해당 객체는 메모리에서 제거될 수 있는 후보가 됨. (가비지)

        이러한 가비지 를 탐지하고 메모리에서 제거함

    • 예시에서 작동
      • mickey 라는 객체 참조변수가 Mouse 객체를 참조가 해제된다면,
      • Mouse 객체는 메모리에서 제거될 수 있는 대상이 됨
    • 언제 작동하나?
      • 이건 자바 버전이나, 자체 인수 설정마다 시기가 다름
  1. 이후
    Mouse jerry = new Mouse();
            jerry.name = "제리";
            jerry.age = 73;
            jerry.countOfTail = 1;
            
            jerry.sing();
    • 위에서 계속 설명한 내용과 동일하며, 주소값은 GC정리 여부에 따라 같을 수도 있고, 다를수도 있습니다.

? 궁금한점

public class MouseDriver {
    public static void main(String[] args) {
        Mouse mickey = new Mouse();
        mickey.name = "미키";
        mickey.age = 85;
        mickey.countOfTail = 1;
        
        mickey.sing();
        
        mickey = null;
        
        Mouse jerry = new Mouse();
        jerry.name = "제리";
        jerry.age = 73;
        jerry.countOfTail = 1;
        
        jerry.sing();
    }
}
  • 에서 mickey = null 이후에 만약에 GC 에서 바로 정리가 되었다면
  • Mouse jerry = new Mouse(); 시에, 이전의 mickey 참조변수가 가지고 있던 주소값과 동일한 주소를 가질 수도 있는 것인가?


Uploaded by N2T

'자바 > 스프링입문객체지향' 카테고리의 다른 글

[3단원]상속의 강력함  (0) 2023.08.22
[3단원]상속: 재사용 + 확장  (0) 2023.08.22
추상화는 모델링이다  (0) 2023.08.20
추상화: 모델링  (0) 2023.08.20
객체지향의 4대 특성 -캡상추다  (0) 2023.08.19