
객체지향프로그래밍 방식은 청사진을 그려놓고, 그 청사진을 토대로 다양한 제품을 만드는 것이라고 할 수 있다.
이런 OOP방식의 특징으로는 크게 4가지가 있다.
캡슐화, 추상화, 상속성, 다형성
데이터와 기능을 하나의 단위로 묶는 것
예를 들어, 마우스 구동을 보면
스위치 클릭 -> 전기신호 발생 -> 전선을 통해 신호 전송...
이러한 과정을 여기저기에 작성하는 것이 아니라, 마우스의 상태를 속성으로 정하고 이동과 같은 행위를 메소드로 정하여 캡슐화된 하나의 코드만 보고도 기능을 직관적으로 이해할 수 있게 해주는 코드 작성법이다.
이를 통해, 유지보수의 용이함과 재사용성을 높힐 수 있다.
또한, 캡슐화는 데이터를 은닉시켜 사용자가 불필요한 데이터에 접근하지 못하도록 해준다는 특징이 있다.
내부 구현은 복잡하지만, 실제로 노출되는 부분은 단순하게 만듦.
전화기를 보면 내부에는 복잡한 전자모듈이 뒤엉켜있지만, 외관상 봤을 때는 버튼만 있는 단순한 모양으로 되어있다.
이처럼 추상화는 기능에 대한 내부 구조는 복잡하게 구현되어있지만, 노출되는 부분은 단순한 형태로 되어있다는 것을 말한다.
이를 통해 사람들이 사용하지 않는 메소드는 노출 시키지 않고, 단순한 이름으로 정의한다.
이렇게 클래스 정의 시 속성과 메소드만 정의해 놓은 것을 인터페이스라고 한다.
기본클래스의 특징을 파생클래스가 상속받는다.
만약, 사람이라는 클래스를 정의했다.
사람에는 키, 몸무게, 혈액형과 같은 속성이 정의되어있고, '걷다, 말하다, 밥먹다'와 같은 메소드가 정의되어있다.
이때, 학생이라는 클래스를 추가로 정의한다면, 사람 클래스의 특징은 모두 가지면서 '공부하다, 학교가다'와 같은 메소드를 추가로 가질 것이다.
만약, 사람클래스의 특징을 다시 정의하고 학생의 특징을 추가한다면 매우 비효율적일 것이다.
그렇기 때문에 사람클래스를 상속받고, 학생의 특징에 해당하는 메소드만 추가 정의하는 방식이 더 효율적이라고 할 수 있다.
이러한 부분이 상속성에 해당한다.
같은 메소드여도 다양한 형태로 쓰인다.
우리가 '말하다'라는 메소드를 정의했을 때 이를 사람에게 적용하는냐, 고양이에게 적용하느냐에 따라 출력값은 다를 것이다.
이처럼 동일한 메소드를 다양한 형태를 쓰는 것을 다형성이라고 한다.
HTML에 적용시켜보면, 화면에 요소를 출력해주는 render라는 메소드를 정의했을 때, Textbox냐 button이냐 selector냐에 따라 다르게 동작할 것이다.
이러한 것들이 다형성에 해당하는 예이다.