객체지향 프로그래밍이란? - Object Oriented Programming
객체란? : 주체가 아닌 것, 주체가 활용하는 것
- 우리 주변에 있는 모든 것으로 프로그래밍의 대상 : 사물, 개념, 논리…
객체지향 프로그래밍 - 주변의 많은 것들을 객체화 해서 프로그래밍 하는 것
- 객체지향은 객체를 많이 만드는 것을 추천한다?
객체지향 프로그래밍의 장점
블록 형태의 모듈화된 프로그래밍
- 신뢰성 높은 프로그래밍이 가능하다
- 추가/수정/삭제가 용이하다
- 재사용성이 높다
현실 세계 객체, 클래스, 프로그램의 객체(instance, object)의 관계
현실의 객체가 갖는 속성과 기능은 추상화(abstraction)되어 클래스에 정의된다!
클래스는 구체화되어 프로그램의 객체(instance, object)가 된다.
현실의 객체는 우리가 만지고 느낄 수 있는 것 -> 실생활에 구체화 되어있는 내용
- 이런 객체를 필요할 때마다 매번 처음부터 새로 만들어야한다면?
- 실생활에서는 붕어빵 틀, 설계도(blueprint) 사용
- 설계도는 제품을 만들기 위해 꼭 필요하지만 이를 사용하지는 않고 설계도로 만든 제품 사용
- 설계도는 하나의 종류(Type)가 되고 설계도를 통해 나온 제품을 객체라고 부르며 주체가 사용
- 현실의 객체가 갖는 속성과 기능은 추상화(abstraction) 되어 클래스에 정의된다!
- 클래스는 구체화되어 프로그램의 객체(instance, object)가 된다.
프로그램의 클래스와 객체
클래스
- 객체를 정의해 놓은 것 즉 객체의 설계도, 틀
- 클래스는 직접 사용할 수 없고 직접 사용되는 객체를 만들기 위한 틀을 제공할 뿐
객체(instance, object)
- 클래스를 데이터 타입으로 메모리에 생성된 것
객체 생성과 메모리
JVM의 메모리 구조
- class area
- 클래스 원형 로딩
- Field 정보
- Method 정보
- 타입 정보
- 상수 풀
- 클래스 원형 로딩
- method stack
- 메서드들의 실행 공간
- thread 별로 별도 관리
- 메서드 호출 순서대로 쌓이는 구조
- 메서드 프레임에 로컬변수도 쌓이는 구조
- 로컬변수는 선언도니 영역을 벗어나면 삭제
- 메서드들의 실행 공간
- heap
- 객체를 저장하기 위한 영역
- thread에 의해 공유
- 생성된 객체는 프로그래머가 삭제할 수 없고 GC만이 제어 가능
- 객체를 저장하기 위한 영역