본문 바로가기
학습/Java

[java] 객체지향 프로그래밍의 4가지 특징

by KKambi 2019. 5. 25.

특징


1. 추상화 (Abstraction)

불필요한 정보는 숨기고, 중요한 정보만을 표현함으로써 프로그램을 간단히 만드는 것

  • 현실의 사물들은 다양한 정보를 가지고 있다.
  • 구체적인 사물들로부터 공통적인 특징을 뽑아낸다.
  • 우리에게 쓸모있는 정보만을 추출하고 나머지는 생략한다.

추상화를 통해 정의된 자료형을 추상 자료형이라고 한다.

추상 자료형은 자료형의 data와 operation을 캡슐화한 것으로, 접근 제어를 통해 이를 은닉할 수 있다.

 

추상 자료형 = class

class를 실제로 구현한 것 = instance

class 내의 data = member variable

class 내의 operation (function) = method

 

 

2. 캡슐화 (Encapsulation)

class의 data와 operation을 외부에서 직접 접근하지 못하도록 은닉하는 것

  • data & operation -> 접근 제어자 설정
  • private < default < protected < public
  • getter / setter함수를 통해 간접적으로 접근할 수 있다.

 

3. 상속성 (Inheritance)

상위 클래스의 자료와 연산을 하위 클래스가 물려받아 이용할 수 있게 하는 것

  • 여러 클래스의 공통특징을 뽑아 상위 클래스로 만든 것.
  • 코드의 재사용성을 높여줌.
  • 현실세계의 relationship을 보다 직관적인 방법으로 따라한다.

 

4. 다형성 (Polymorphism)

하나의 메소드나 클래스가 다양한 방법으로 동작하는 것

  • 일반적으로 오버라이딩이나 오버로딩을 의미
  • 오버로딩 : 같은 이름의 메소드가 파라미터의 개수나 타입에 따라서 다른 기능을 하는 것
  • 오버라이딩 : 같은 이름의 메소드가 여러 클래스에서 다른 기능을 하는 것
  • 상속과 연계된다.
  • 부모 클래스를 extends할 때, 부모의 메서드를 오버로딩하여 다르게 사용한다.
  • 인터페이스를 implements할 때, 인터페이스에서 헤더만 존재했던 메서드를 오버라이딩하여 다르게 사용한다.

 

 

보충


1. Inheritance = generalization + realization

  • generalization은 부모 클래스를 '상속'받는 것이고, realization은 인터페이스를 '상속'받아 구현하는 것이다.
  • 즉 '상속'이란 개념은 부모 클래스와 인터페이스 둘 다에 쓰일 수 있다.

 

2. 캡슐화가 필요한 이유

  1. 문법적 일관성을 제공한다.
    • 멤버변수의 read/write할 때, getter/setter함수를 사용하면 된다.
    • 모든 개발자들은 일관적인 함수를 통해서 접근할 수 있다.
  2. getter / setter함수의 존재여부로 멤버변수에 대한 read / write 권한을 구별할 수 있다.
    • getter함수만 있다면, 이 멤버 변수는 읽기만 가능하다는 뜻!
  3. 구현의 유연성
    • 멤버변수를 read / write하기 전에 precondition이 있다면 getter / setter에서 이를 구현할 수 있다.
    • public한 멤버 변수에 직접 접근한다면 이렇게 할 수 없다. 일일히 호출해야 함.
  4. 유지보수 용이
    • 캡슐화가 없다면, public으로 제공되는 어떤 클래스의 멤버변수와 멤버함수가 수정이 되었을 경우 이를 사용하는 외부의 모든 코드를 수정해야 한다.
    • student.score처럼 직접 접근한다고 했을 때, 변수 score이름이 바뀌는 경우를 상상해보자. 끔찍하다.
    • 캡슐화를 통해, 외부로부터 은닉한 멤버변수, 멤버함수의 수정이 발생하더라도 외부의 코드를 수정할 필요가 없어진다.

 

 

 

 

출처

https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D#%ED%8A%B9%EC%A7%95

 

https://d-yong.tistory.com/21

댓글