심화반 특강으로 객체 지향프로그램을 다시 한번 되짚고 넘어가는 시간을 가졌다.
객체지향프로그램의 정의는 위와 같다. 말로는 어려우니 그림예시를 통해 이해해보자.
만약 우리가 Human, Dog, Cat을 만든다고 생각해보자.
물론 Human의 머리~발끝순으로 만들어도 되지만 같지는 않지만 비슷한 행위(얼굴만들기, 다리만들기 등...)를 3번이나 반복해야한다. 또한 얼굴만들기를 하다 수정을 해야하면 일일히 3번의 얼굴만들기부분을 수정해줘야하는 수고로움이 뒤따른다. 이러한 코드의 반복성을 줄이고 행위를 분리하여 코드의 재사용을 용이하게 만드는 프로그램 방법이 객체지향프로그램이다.
이러한 객체지향프로그램의 특징은 크게 4가지 추상화, 캡슐화, 상속, 다형성 이있다.
추상화
추상화란 무엇인가? 간단하게 말해서 같은역할(속성과 행위)를 찾아 모아서 정의하는 과정이다.
자동차를 예시로 들자면 아우디든 볼보든 자동차 디자인과 내부부품이 조금 다를지언정 모두가 사람이 엑셀을 밟으면 바퀴가 굴러서 자동차가 이동하는 특징은 모두 동일하다. 이러한 공통적인 특징(엑셀을 밟으면 바퀴가 굴른다)을 만드는것을 추상화라고한다. 이를 코드로 적용해보자면 공통의 자동차 특징을 포함한 자동차 설계도를 class라 생각하고 엑셀과 바퀴등을 필드, 엑셀이 눌리면 바퀴가 굴러간다의 행위를 메서드로 정의할수있다.
캡슐화
다음으로 캡슐화는 위에서 언급한 class를 만드는 과정을 생각하면 이해하기 쉽다. 엑셀,바퀴를 달고 엑셀이 어떻게 바퀴로 동력을 전달하여 바퀴가 굴러가는지에 대해서 내부구조와 시퀸스는 운전자는 알 필요가없다. 또한 접근제어자를 이용하여 정보은닉에도 사용이 가능하다.
상속
상속은 위 Animal 사진을 예로 들면 Dog 와 Cat은 pet에 속하며 Human과 펫은 Animal에 속한다. 이처럼 Animal은 공통분모로서 Human과 pet이 가지는 최소한의 속성과 행위를 자손인 Human과 pet 그리고 pet은 또 다시 Dog와 Cat에게 상속시켜주고있다. 이를 통해서 Human과 Dog와 Cat의 공통 분모 속성과 메서드를 Animal에서 정의할시 이를 자손에서 다시 작성하지 않아도 이용할 수 있다는 장점이 있다.
다형성
하나의 클래스 내부에 같은 이름의 행위를 여러개 정의하거나 상위 클래스의 행위를 하위 클래스에서 재정의하여 사용할 수 있기 때문에 다형성이라는 특징을 갖게 된다.
위에서 설명한 상속을 생각해보자 Animal에서 다리4개를 정의했다면 Human에서는 다리 2개가 손으로 바뀌어 재정의하여야한다.이 과정에서 유용하게 사용되는것이 오버라이딩이다.
또한 같은 이름의 메서드의 입력인자의 자료형,개수를 다르게 둠으로서 같은 이름이지만 다른기능을 가능하도록 하는 오버로딩이 있다.
결론
내가 생각하기에 객체지향이 기존코드와 다른점을 생각해보면 코드의 중복사용을 획기적으로 줄일수 있다는 점과 부품화(클래스)화 하여 비슷한 기능을 하는 다른 프로그래밍에 사용하는데 좋은 방법이라고 생각한다. 더 나아가서 코드를 작성후 어느 한부분을 수정하게되면 피치못하게 다른부분에 문제가 발생하여 전체를 수정해야되는 경우가 종종 발생하는데 객체지향프로그램을 제대로 다룰수있다면 이와같은 문제를 예방할수 있을뿐더러 코드의 가독성과 대형 프로젝트시 능률등에서 향상이 있을것이라 생각한다.