20190717 백업
객체 지향 프로그래밍이란?
Object Oriented Programming → OOP 코드의 모든 것을 객체(Object)로서 표현하고자 하는 프로그래밍 패러다임
- 프로그래밍에서 필요한 데이터를 추상화시켜,
- 상태와 행위를 가진 객체로 만들고,
- 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법
객체 지향 프로그래밍의 장점
- 재사용 및 생산성 향상
- 상속 등을 통하여 한 프로그램 내에서의 코드를 재사용할 수 있음
- 다른 사람이 만든 클래스를 이용할 수 있으며 상속을 통해 확장이 가능함
- 유지 보수의 용이성과 안정성
- 기존 기능 수정 혹은 신규 기능 추가가 용이하며 경제적임
- 캡슐화로 인해 다른 기능에 미치는 영향이 최소화됨
- 대형 프로젝트에 적합
- 클래스 단위의 모듈화를 통해 업무 분담이 용이하다
객체 지향 프로그래밍의 단점
- 절차지향에 비해 속도가 느리다.
❓ 그럼에도 객체 지향을 사용하는 이유
→ OOP의 재활용성과 유지, 보수, 편의성과 신뢰성 때문에 → 소프트웨어 위기 : 과거, 하드웨어의 발전을 소프트웨어가 따라잡지 못한 상황이 발생한 적 있음
객체 지향 프로그래밍의 특징
- 객체
- 세상의 모든 대상을 지칭
- 상태(property - 프로퍼티) 데이터와 동작(method - 메서드) 을 하나의 논리적 단위로 묶는 복합적 자료구조
- 클래스 : 어떤 객체들의 집단이 공통적으로 갖는 속성(attribute) 과 기능(behavior) 을 모아 변수와 메소드로 정의내린 것
- 인스턴스 : 클래스에 정의된 것을 토대로 실제 메모리에 할당되어 프로그램에서 사용되는 데이터
- 추상화
- 공통의 속성이나 기능을 묶어내어 목적에 맞는, 필요한 부분만을 표현한 새로운 데이터 유형을 만드는 것
- 다양한 속성 중에서 필요한 속성만 간추려 내어 표현하는 것
- ex) 클래스를 정의하는 것
- 캡슐화
- 데이터와 기능을 하나로 묶어서 관리하는것
- 외부에서 내부의 데이터에 접근하는 것을 제한, 보호하는 의미로도 쓰임
- 재사용을 용이하게 해주며, 정보를 보호할 수 있게 해줌 - 정보은닉
- 상속
- 코드의 불필요한 중복을 없애기 위하여 필요 --> 코드의 재사용
- 상위 개념의 특징(데이터, 함수)을 하위 개념이 물려받을 수 있게 해줌
- 부모 클래스의 속성과 기능은 이어받으나 기능의 일부분만 변경해야 할 경우, 상속받은 자식 클래스가 해당 기능만 다시 정의하여 사용할 수 있도록 해줌
- 유지 보수 비용을 줄여줌 → 코드의 이원화 문제 해소
- 다형성
- 형태는 같으나 다른 기능을 하는 것 → 하나의 변수명 혹은 함수명이 상황에 따라 다르게 해석될 수 있다
- 같은 호출이라도 호출된 객체에 따라 다른 동작을 하도록 함
- 오버라이딩 : 부모 클래스의 같은 이름과 매개변수의 메소드가 다르게 기능하도록 재정의 하는 것
- 오버로딩 : 같은 이름의 메소드가 매개변수의 타입과 개수에 따라 다르게 기능하도록 정의하는 것