객체 지향 프로그래밍
은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 객체
들의 모임으로 파악하고자 하는 것이다. 데이터(속성)
와 기능(메서드)
을 따로 정의하는 것이 아닌, 하나의 객체
안에 넣어서 묶는 것입니다. 데이터(속성)
와 기능(메서드)
들이 느슨하게 결합되는 것느슨한 결합
은 코드 실행 순서에 따라 절차적으로 코드를 작성하는 것이 아니라, 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것을 의미한다. 은닉화
는 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것이다. 따라서 디테일한 구현이나 데이터는 숨기고, 객체 외부에서 필요한 동작(메서드)
만 노출시켜야 한다.
은닉화의 특징을 살려서 코드를 작성하면 객체 내 메서드의 구현만 수정하고, 노출된 메서드를 사용하는 코드 흐름은 바뀌지 않도록 만들 수 있다.
내부 구현은 복잡하지만 노출되는 부분은 단순하게 만드는 것으로, 추상화를 통해서 인터페이스를 단순화할 수 있다.
너무 많은 기능들이 노출되지 않은 덕분에 예기치 못한 사용상의 변화가 일어나지 않도록 만들 수 있다.
class 정의 시, 메서드와 속성만 정의한 것을 인터페이스 부르고 추상화의 본질이다.
예를 들어 사람(Human)이라는 클래스
가 있다고 가정해 보면 사람은 기본적으로 이름, 성별, 나이
와 같은 속성, 그리고 먹다, 자다
등과 같은 메서드가 있다고 볼 수 있다.
추가적으로 학생(Student)이라는 클래스
를 작성한다고 생각해보자
그런데 이때 앞서 구현했던 사람(Human) 클래스의 속성과 메서드를 다시 구현한다면 비효율적일 것이다.
학생의 본질은 결국 사람이므로, 상속을 이용하여 학생(Student) 클래스는 사람(Human) 클래스를 상속받을 수 있다.
말하다 라는 동작의 본질은 소리를 내다"를 의미하는데 각기 다른 동물들이 말할 때 제각각의 소리를 내는 것처럼 객체 역시 똑같은 메서드라 하더라도, 다른 방식으로 구현될 수 있다.
동일한 메소드를 다양한 형태를 쓰는 것을 다형성
이라고 한다.
HTML에 적용시켜보면 화면에 요소를 출력해주는 render
라는 메소드를 정의했을 때 Textbox
checkbox
selector
에 따라 다르게 동작할 것이다.