

절차지향은 함수 호출 개념의 프로그래밍 기법입니다.
위에서 아래로 순차적인 처리를 하므로 프로그램 전체가 하나의 문장을 만듭니다.
익숙해지면 빠르고 간결하며 버그가 적은 코드를 작성하기 좋으나 순서가 엄격하게 정해져 있고,
프로그램이 커지면 복잡해져 알아보기 힘들어 유지보수가 어렵다는 단점이 있습니다.
하드웨어의 발전 속도에 비해 소프트웨어의 개발 시간이 눈에 띄게 더뎌 이 문제를 해결하고 만들어진 것이 객체지향입니다.
객체지향은 프로그램을 다수의 객체로 만들어 서로 상호작용 하도록 만드는 기법입니다.
재사용성이 뛰어나 개발 속도가 빠르며 협업이 잦고 생산성이 중시되는 프로젝트에 적합합니다.
절차지향 방식보다 프로그램의 용량이 크고 속도가 느리다는 단점이 있습니다.
캡슐화(Encapsulation)
객체(object)들의 속성(property)과 메소드를 하나로 모은 것을 캡슐화라고 합니다.
접근점(interface)을 외부에 공개할 수도, 드러나지 않게 할 수도 있는 정보 은닉의 특성을 가집니다.
상속(Inheritance)
클래스에 들어있는 데이터를 다른 클래스에서 사용하는 것이 상속입니다.
상위 클래스에서 작성한 변수나 메소드를 하위 클래스에서 그대로 이용이 가능하기 때문에 생산성이 높고 유지보수가 좋다는 점이 특징입니다.
추상화(Abstraction)
객체들의 공통적인 속성과 메소드를 간추려 도출하는 것을 말합니다.
'사람'이란 객체를 저장하고자 할 때 다양한 정보 중 (ex. 나이, 체중, 취미 등)
필요성에 의해 있어야만 하는 정보만 (ex. 이름, 주민번호 등) 간추려 구성하는 것을 추상화라고 볼 수 있습니다.
다형성(Polymorphism)
같은 자료형에 여러 가지 객체를 대입하여 다양한 결과를 얻어내는 성질을 의미합니다.
하나의 함수를 상속을 통해 기능을 확장하거나 변경이 가능합니다.
다형성을 지원하는 방법으로 중복적재(Overloading)와 재정의(Overriding)라는 것이 있습니다.