[Java] 객체지향 4대 특성 - 추상화
- 2 mins추상화란?
구체적인 것(사물)을 분해해서 관심 영역에 대한 특성만을 재조합한것
구체적인 것(사물) : 사람
병원의 관심영역 : 시력, 몸무게, 혈액형, 키, 먹다, 자다
은행의 관심영역 : 나이, 직업, 연봉, 일하다, 입금하다, 출금하다
- 같은 사람을 추상화 하더라도 관심있는 부분에 따라 특성이 달라진다.
쥐 캐릭터들이 공통적으로 갖는 것을 추상화
Java는 class
라는 키워드로 객체들 중에 공통적으로 관심이 가는 영역을 추상화 한다.
쥐는 이름, 나이, 꼬리수를 갖고있으며 울수있다.
- Mouse
public class Mouse { public String name; public int age; public int countOfTail; public void sing() { System.out.println(name + " 찍찍!!!"); } }
- MouseDriver
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
객체의 T 메모리 매핑과정
JVM의 메모리를 추상화한 T 메모리란 용어에 대해 알고 싶으면 이 글을 읽어볼 것
main()
Stack Frame의mickey
변수는heap 영역
의Mouse
객체를 참조하고 있다.
heap 영역
을 참조하던 변수가 null이 되면, 참조되지 않는 객체를 GC(garbage collections)가 없애줌mickey = null;
Tip : stack 영역
과 static 영역
은 GC 가 정리하는 것이 아니다. stack 영역
은 “}”을 만나 메소드가 끝날 때 자동으로 해제되고, static 영역
은 프로그램이 끝날 때 정리가 된다.
- Mouse
public class Mouse {
public String name;
public int age;
public static int countOfTail = 1; // static 영역으로 변경
public void sing() {
System.out.println(name + " 찍찍!!!");
}
}
- countOfTail은
Mouse
class로 생성하는 모든 객체가 동일한 값(1)을 가진다. 때문에static 영역
에 변수를 두면heap 영역
의 중복을 피할 수 있다.