객체지향
절차지향
초기프로그램은 절차지향으로 코드가 순서대로 진행됐다.
그러나 프로그램이 복잡해지니 관리하기가 어려워졌다. (순서대로 진행하다보니 윗부분을 수정하면 아랫부분까지 모두 영향을 받게 됨)
이것을 보완하기 위해 나타난것이 객체지향
클래스와 객체
-클래스: 객체를 만들기 위한 설계도
-객체: 설계도로부터 실제로 생성해낸 것, 현실세계의 물건이라고도 생각할 수 있다.
객체는 속성과 메서드로 되어있다.
객체가 자동차라면
속성은 색상, 제조사, 모양 등
메서드는 자율주행, 운행속도 등
객체지향의 장점
-재사용성: 한 번 정의된 객체는 여러 곳에서 다 사용할 수 있다.
-유지보수의 용이함: 각 부분이 독립적이므로 한 곳을 수정해도 영향을 받지 않음 ex) 자동차를 수정해도 사람은 영향을 받지 않는다
-확장성: 새로운 기능을 추가하기 쉽다. 기존 객체를 그대로 물려받은 다음 새로운 특성과 행동을 추가할 수 있음
-모듈화: 복잡한 프로그램을 작은 단위로 나눠서 관리할 수 있게 되었다
객체지향 프로그래밍의 핵심 원칙
캡슐화: 보안성->객체의 속성과 메서드를 외부에서 건들 수 없음
상속: 이미 만든 코드를 물려받아 재사용하고 수정하거나 확장하여 새로운 코드를 쉽게 만들수있다
다형성: 동일한 이름의 메서드, 연산자가 서로 다른 방식으로 동작함->유연한 코드 작성, 코드의 간결화
추상화: 복잡한 시스템에서 필요한 부분만 보여주는것 ex)사람이 팔을 움직일때는 무수히 많은 신경전달물질의 이동과 에너지의 사용과 근육과 신경의 작동이 필요하지만, 겉으로 보기에는 팔을 움직이는 단순한 동작만 보이는것과 비슷하다.
이 중 다형성을 조금 더 살펴보겠다.
다형성의 대표적인 예시는 overriding과 overloding
Method overriding
- 부모 클래스의 매서드를 자식 클래스에서 재정의하여 사용
- 자식 클래서는 부모 클래스 메서드를 활용하면서도 독자적인 기능을 추가할 수 있다.
- 확장성에 유리
Method overloading