객체지향 프로그래밍이란? - 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만이 제어 가능