객체 지향 프로그래밍 (Object Oriented Programming)

Java

Posted by kwon on 2020-05-06

객체 지향 프로그래밍 (Object Oriented Programming)

객체, 클래스, 인스턴스 개념

객체

  • 실제로 존재하는 것. 사물 또는 개념, 구현할 대상
  • 클래스에 선언된 모양 그대로 생성된 실체
  • 객체는 모든 인스턴스를 대표하는 포괄적 의미를 갖는다.
  • oop관점에서 클래스 타입으로 선언되었을 때 객체라고 부른다.

클래스

  • 객체를 정의해 놓은 것 (설계도, 틀)
  • 객체를 생성하는데 사용

인스턴스

  • 설계도를 바탕으로 구현된 구체적인 실체
  • 객체를 소프트웨어에 실제화하면 그것을 인스턴스라고 부른다.
  • oop관점에서 객체가 메모리에 할당되어 실제로 사용될 때 인스턴스라고 부른다.
  • 인스턴스는 어떤 원본(추상적인 개념)으로부터 생성된 복제본을 의미한다.

객체지향의 네 가지 특징

추상화

  • 추상화는 객체들의 공통된 특징을 파악해 정의해 놓은 설계 기법
  • 추상화는 모델링이라고 표현한다. 어떤 실체들에서 관심있는 공통적인 특성을 뽑아내어 하나의 분류로 만드는 것이다.

캡슐화

  • 비슷한 속성과 메소드를 하나의 클래스로 묶는 것.
  • 객체의 내용 중 숨기고 싶은 부분을 외부에서 접근하지 못하도록 할 수 있다.(정보 은닉이 가능)
  • 접근제어(public, private, protected)와 같은 내용에 의해 구현된다.
    • 접근 권한을 통해 제공되며 원하지 않는 외부의 접근으로부터 내부의 데이터, 함수를 보호

상속

  • 클래스의 멤버와 함수를 다른 클래스에 물려주거나 물려받는 것.
  • 코드의 재사용을 증대시킬 수 있다. (코드의 중복을 없앤다.)

다형성

  • 서로 다른 클래스의 객체가 같은 메시지를 받았을 때, 각자의 방식으로 동작하는 능력.
  • 형태가 같지만 다른 기능을 하는 것을 의미
  • 오버라이딩으로 구현 가능

참조
https://gmlwjd9405.github.io/2018/09/17/class-object-instance.html
https://victorydntmd.tistory.com/117
https://gmlwjd9405.github.io/2018/07/05/oop-features.html