OOP (Object Oriented Programming)
객체 지향 프로그래밍(OOP)
- 객체의 관점에서 프로그래밍 하는 것
- 반대의미로는 '절차 지향 프로그래밍'이 있다 : 프로세스가 함수 단위로 순서대로 진행되는 것
- OOP는 객체들의 유기적인 관계를 통해 프로세스가 진행된다
- 애플리케이션을 구성하는 요소들로 객체를 바라보고, 객체들을 유기적으로 연결하여 프로그래밍 하는 것
특징
1. 추상화
- 목적과 관련이 없는 부분을 제거하여 필요한 부분만을 표현하기 위한 개념
- 지도에는 위성지도와 등고선지도 등 여러가지가 있는데, 이 중 등고선 지도는 목적에 맞지않는 부분을 제외하고, 지형의 높낮이만 표현한다.
- 객체들은 실제 그 모습이지만, 클래스는 객체들이 어떤 특징들이 있어야 한다고 정의하는 추상화된 개념이다.
- 즉, 추상화는 객체들의 공통된 특징을 파악해 정의해 놓은 설계 기법이다
2. 캡슐화
- 자바에서 접근 제어자(public, protected...)가 있다. private으로 정의된 것은 외부에 노출시키지 않고 자신의 클래스에서만 사용할 수 있다.
- 즉, private으로 정의된 속성은 알약의 실제 내용물이라고 생각하면 된다. 이 속성은 외부에 알려줄 필요가 없다. 즉, 정보은닉이 가능하다.
- 정보은닉과 캡슐화가 동일한 기능은 아니다. 예를들어, TV리모콘을 사용하는데 리모콘의 내부 회로(private으로 정의된 속성)를 알 필요가 있을까? 아니다. 사용자 입장에서는 리모콘으로 조작하는 기능, 즉 public으로 정의된 속성만 알면된다.
3. 상속
- 고양이 클래스, 강아지 클래스가 있다고하자. 고양이와 강아지는 포유류이다. 포유류는 여러 속성들이 정의되어있는데, 고양이와 강아지는 이런 속성들을 갖고있기때문이다. 하지만 아주 많은 속성이 다르기때문에 좀 더 디테일하게 고양이,강아지로 종을 나뉘게 된 것이다.
- 즉, 포유류라는 클래스(부모 클래스)는 고양이와 강아지 클래스(자식 클래스)에 속성들을 물려준다.
- 이것을 상속이라고 하고, 포유류와 고양이, 포유류와 강아지 클래스는 상속관계에 있다고 한다.
- 상속이 필요한 이유 : 중복을 없애기 위함 -> 코드 중복이 많아지면, 개발 단계에서도 피곤하고 유지 보수에서도 많은 비용이 든다.
- 포유류 클래스에 여러 속성들을 정의해 놓고, 포유류에 해당하는 종, 예를들면 강아지 클래스가 필요할 경우 포유류 클래스와 상속 관계를 맺는다. 상속관계를 맺으면 자식 객체를 생성할 때 부모 클래스의 속성들을 자동으로 물려받기때문에 자식 클래스에서 또 정의할 필요가 없다.
4. 다형성
- 형태가 같은데 다른 기능을 하는 것
- 예를 들어, 고양이 클래스에 '울음'이라는 속성이 정의되어있다고하자. 사자는 고양이과이기 때문에 사자 클래스는 고양이 클래스를 상속 받는다. 따라서 '울음'속성도 자동 추가된다. : 상속
- 그런데, 고양이와 사자의 울음소리는 다르다. 이게 다형성이다.
- 부모 클래스로부터 상속을 받은 속성에 대해, 자식 클래스에서 물려받은 속성을 재정의할 수 있다. = 오버라이딩
- 장점 : 같은 이름의 속성을 유지함으로서, 속성을 사용하기 위한 인터페이스를 유지하고, 메서드 이름을 낭비하지 않는다.
- 예를 들어, 고양이와 사자의 울음소리를 호출하기 위해서는 각 객체에서 roar() 메서드를 호출하면 된다. roarCat() roarLion()으로 각각 정의할 필요가 없는것이다.
- API가 많아질수록 복잡성은 증가하기 때문에 다형성은 유용하다.
참고사이트
https://victorydntmd.tistory.com/117