What is the object-oriented-programming??
- OOP(object-oriented-programming)는 객체 지향적인 프로그래밍으로서, 절차지향인 C언어와는 달리 객체의 관점에서 이루어지는 것을 말합니다.
- 객체란 클래스, 함수, 인스턴스등이 될 수 있다.
- 기존의 절차지향적인 프로그래밍이 있음에도 불과하고 객체지향이 등장한 이유는 객체들을 육적으로 연결하여 프로그래밍을 할 수 있으며, 일반적으로 사람의 사고방식과 더 가깝기 때문에 실제로 머리속에서 떠올릴 수 있는 것을 프로그래밍 한다는 것이 OOP의 중요한 점이다.

- 위의 사진을 보면 절차지향의 경우 위 단계에서 넘어오지 않으면 할 수 없다는 특징이 있다. 즉, 윗단계에서 에러가 걸리면 아래단계가 실행이 되지않는다 반면, 오른쪽에 있는 객체지향의 경우 위에서 말했던것 처럼 각각을 객체로서 유기적으로 연결되어있기때문에 따로 실행이 가능하다.
- 하지만 객체지향의 경우 기능별로 객체가 재사용가능하도록 분리되어야 하기 때문에 설계가 중요하다.
OOP의 특징
캡슐화(Encapsulation)

- 하나의 객체에 대해서 그 객체가 특정한 목적을 위한 함수나 메소드를 하나로 묶는것을 의미한다.
- 따라서 나중에 클래스로부터 만들어진 객체가 목적을 이룰수 있게 하도록 사용해야할 변수와 그 변수가 가지고 특정한 액션 즉 메서드를 관련성 있게 클래스에 구성해야한다.
추상화

- 추상화는 목적과 관련이 없는 부분을 제거하여 필요한 부분만을 표현하기 위한 개념(핵심적인 개념 및 기능을 요약하는것)이다.
- object의 기능에 따라 추상클래스(상위클래스)를 상속받아 개별적으로 클래스(하위클래스)를 생성한다.
- 기본적으로 추상메소드를 선언하며 실제 실행되는 기능은 보여지지 ㅇ낳는다.
- 실제 실행되는 기능은 선언된 추상클래스를 상속받은 다른 클래스이 메소드에서 확인할 수 있다.
- Why using this??
- 규모가 큰 프로젝트를 진행하는 경우 혹은 프로그램이 복잡해질 경우 1차적인 설계를 위해서 기능을 추상화 시켜놓고, 활용여부를 나중에 결정하기 위해서이다.
다형성

- 다형성은 상속을 통해 기능을 확장하거나 변경하는 것을 가능하게 해준다. 즉, 다형성은 형태가 같은데 다른기능을 하는 것을 의미한다(같은 동작이지만 다른 결과물이 나올때 다형이라고 생각하면 된다.)
- 예를들면, 고양이 클래스에는 '울음' 이라는 속성이 정의되어 있다고 하면, 사자는 고양이 계열이기 때문에 사자 클래스는 고양이 클래스를 상속받는다고 하면, 사자 클래스에도 '울음' 이라는 속성이 자동으로 추가된다. 이는 상속이라고 한다.
- 그런데 고양이와 사자의 우름소리는 다르다. 같은 '울음' 속성임에도 실제 울음소리는 다르죠. 이런것이 다형성이라고 말할 수 있다.
Overriding & Overloading
OOP에서 다형성의 개념을 녹여내는 방법은 두가지인데, 바로 오버라이딩(Overriding)과 오버로딩(Overloading)이다.
- Overriding
- 부모 클래스에서 상속받은 자식 클래스에서 부모클래스에서 만들어진 메서드를 자식 클래스에서 자신의 입맛대로 다시 재정의해서 사용하는것이다
- Overloading
- 같은 이름의 메서드를 사용하지만 메서드마다 다른 용도로 사용되며 그 결과물도 다르게 구현할 수 있게 만드는 개념
- 오버로딩이 가능하려면 메서드끼리 이름은 같지만 매개변수의 갯수나 데이터 탕비이 다르면 오버로딩이 적용된다.
- 멧드 이름이 같아도 문법에러 X