객체지향

프로그램을 객체라는 기본 단위로 나누고, 객체들의 상호작용을 통해 프로그램을 작성하는 방식

 

발전과정

SW가 점점 더 복잡해지고 거대해지면서, 기존의 절차지향 방법으로는 설계 및 구현에 어려움이 생기게 되었고, 해당 문제를 해결하기 위해 구조적 프로그래밍 방법이 대두 되었다.

 

구조적 프로그래밍 방법은 상위->하위로 쪼개는 Top-Down 방식이라고도 하며, 데이터를 처리하는 함수는 구조화 할 수 있었지만, 데이터는 구조화하지 못해 전역 네임스페이스 포화 문제 발생 또한 데이터의 상태에 따라 다르게 동작하는 함수가 늘어나면서, 함수들로 전달되는 변수들의 값을 확인하는 코드가 늘어났고, 규모가 커질수록 유지보수가 어려워졌다 이러한 문제를 해결하기 위해 등장한 것이 객체지향 프로그래밍이며 큰문제를 작은문제로 쪼개는 Top-Down 아닌 작은 문제를 해결하는 객체를 모아 큰 문제를 해결하는 Bottom-up 방식 지향한다.

 

장점/단점

- 코드 재사용성의 증가

- 상속을 통해 코드의 재사용성을 높일 수 있다.

- 개발속도/실행속도가 느리다

- 코딩 난이도가 상승한다.

- 생산성 향상/유지보수 우수성

  →  잘 설계된 독립적인 객체를 이용하여 생산성을 높였다.

독립적이라는 것은 의존성이 낮다는 의미이며, 이는 하나의 객체 코드를 수정했을 때 해당 객체를 사용하는 객체의 코드를 수정하지 않아도 되는 등 유지관리 비용을 낮출 수 있다.

 

특징

캡슐화

데이터(속성)과 함수(처리로직)을 하나로 묶는 것, 이때 중요한 정보들은 접근이 필요한 부분을 제외하고 내부로 숨길 수 있다. (정보은닉)

  • 접근제한자private: 클래스 외부에서 접근 불가(내부에서만 접근 가능)
  • protected : 상속한 하위 글래스에서만 접근 가능
  • public : 누구나 접근 가능

추상화

여러 객체들의 공통적인 특징(속성과 기능)을 도출해내는 것 (스피커, 디스플레이, 메모를 한다.)등의 속성과 기능을 정의한다.

 예) 아이패드 갤럭시탭 두가지를 만들어내는 태블릿 객체가 있다고 한다면, 두 객체의 공통점을 추출한다.

 

상속성

상위클래스(부모)의 속성과 연산을 하위클래스(자식)가 물려받는 것이며, 부모 클래스의 속성과 연산을 이용하여 코드의 중복을 없애기 위해 사용한다.

 

다형성

객체가 상속을 통해 기능을 확장하거나 변경하여 다른 여러 객체로 재구성 되는 것 생성할 수 있다.

같은 부모의 속성을 물려받지만 부모의 속성들을 자식클래스에서 재정의하여 다양한 객체를 생성할 수 있다.

► 오버라이딩

- 상위클래스의 매서드를 하위클래스가 재정의하는 것

► 오버로드

- 매서드 이름은 같고 매개변수의 갯수나 타입이 다른 함수를 정의하는 것

► 업캐스팅 (Parent p = new Child() )

- 자식클래스의 객체가 부모 클래스 타입으로 형변환 되는 것을 말한다.

- 자식클래스는 부모클래스를 상속받기 때문에 부모클래스로 취급될 수 있다!

► 다운캐스팅 ( Child c = (Child)p )

- 자신의 특성을 잃어버린 자식클래스를 다시 복구시켜 주는 것이다.

- 즉 업캐스팅을 다시 원상태로 되돌리는 작업이다.

복사했습니다!