티스토리 뷰

1부: https://lsu0503.tistory.com/76

 

Today I Learned - Day 22 [객체, 그 개념에 관하여 - 1]

오늘날 프로그래밍 언어는 절차적 언어와 객체 지향 언어로 나뉘어 있다.[유니티에서 '정보 지향'이라는 새로운 개념을 꺼내어 들기는 했으나, 사실상 유니티의 단점을 우회하기 위한 것이라서

lsu0503.tistory.com

 

어제는 객체지향의 발안 배경과 Heap과 Stack을 통한 개념 정리를 작성하였다.

그렇다면 이제 객체지향에 대해서 조금 더 세밀하게 퍄고들어 보자.

 

목차

  1. 서두
    1. 프로그래밍 언어의 발전사 - 객체지향은 왜 발안되었는가.
    2. Class와 Instance, Object의 정의
  2. 객체지향의 4요소 ※
    • 캡슐화
    • 추상화
    • 상속
    • 다형성
  3. 솔리드 원칙
    • 단일 책임 원칙
    • 개방 폐쇄 원칙
    • 리스코프 치환 원칙
    • 인터페이스 분리 원칙
    • 의존 역전 원칙

 

객체 지향의 4요소

객체지향의 4요소는 객체지향을 추구함으로써 얻을 수 있는 이점을 정리한 것이다.

다만, '이렇게 개발할 수 있다'는 것이 강점이기 때문에, 객체지향에 맞춰서 개발하지 않으면 누릴 수 없는 강점이다.

물론, 작업 상으로 유리하게 구성하다 보면 자연스럽게 얻을 수 있는 요소들이기도 하지만, 이에 대한 지식이 없다면 이 단계까지 다다르는 데 걸리는 시간이 길 수 밖에 없다.

그렇기 때문에 이 요소들에 대해서 알아두고 시작하는 것이 객체 지향 프로그래밍을 공부할 때 중요한 것이다.

 

그렇다면, 이제 각 요소 별로 정리해 보자.

 

캡슐화

연관된 요소들을 하나의 집합, class 안에 모아서 작성한다는 특성이다.

관련된 요소들을 한데 모아서 관리할 수 있기 때문에 가독성과 유지보수 편의성이 크게 증가한다. 특히 모듈화와 관련해서 매우 강력한 특성으로, 캡슐화가 완벽하다면 해당 class만 따로 떼어서 다른 프로젝트에 적용해도 정상 작동이 가능하다.

[물론, 실제로는 어쩔 수 없이 발생하는 의존도와 관련된 문제로 인해서 이 정도로 완벽한 캡슐화는 거의 불가능하다.]

 

참고로, 이 캡슐화의 이점으로 데이터 보호와 데이터 은닉으로 꼽기 때문에 보안과 관련된 요소로 오해하기 좋은데, 엄밀히 말하면 각 클래스의 독립성과 관계된 요소라고 보는 것이 옳다.

 

추상화

주로 인터페이스나 추상 클래스 등에서 활용되는 개념으로,  관련된 요소를 추상적으로 뭉뚱그려서 묘사한 뒤, 실제로 활용하는 class에서 확정지을 수 있다는 특성이다.

'규격을 먼저 정하고 실 구현을 한다'는 특성으로, 각 객체들 사이의 공통 특성을 미리 선언해 둘 수 있다는 점이 큰 특징.

 

여담으로, 이에 대해서 말할 때, 역할과 구현의 분리라는 묘사를 자주 사용하는데, 개인적으로는 규격과 내용의 분리라고 하는 것이 더 이해하기 쉽지 않나 싶다.

 

상속성

간단하게 말하자면 부모-자식 클래스를 구성할 수 있는 특성으로, 기존에 작성한 내용을 기반으로 새로운 객체를 만들어낼 수 있는 특성이다.

추상화와 겹친다고 볼 수 있는데, 상속성에서 중요한 것은 '기존에 존재하는 작업물을 재활용해서 만들 수 있다'는 점이다.

즉, 겹치는 부분을 따로 빼서 정리하고, 겹치지 않는 부분 만을 별개로 제작함으로써 작업 편의성과 가독성을 높일 수 있다는 것.

 

참고로, 인터페이스를 활용하는 것도 상속이라고 부르지만, 인터페이스를 상속받는다고 해도 해당 요소들을 모두 선언, 정의해야 하기 때문에 엄밀히 말해서 상속성과는 거리가 멀다.

 

다형성

상위 클래스 타입의 참조변수로 하위 클래스의 객체를 참조할 수 있는 특성으로, 실 동작이 다른 작업이라고 해도 개발자가 같은 종류로 분류했다면 같은 방식으로 사용할 수 있음을 나타내는 특성이다.

상술한 인터페이스와 상속 이외에도 Override, Overload를 통해서 추구할 수 있는 특성으로, 이 다형성을 통해서 프로그램의 유연성이 어마어마한 폭으로 증가하기에 객체지향의 꽃이라고도 불리기도 한다.

 

 

※ 3부에서 계속.

 

 

3부: https://lsu0503.tistory.com/78

 

Today I Learned - Day 24 [객체, 그 개념에 대하여 - 3]

1부: https://lsu0503.tistory.com/76 Today I Learned - Day 22 [객체, 그 개념에 관하여 - 1]오늘날 프로그래밍 언어는 절차적 언어와 객체 지향 언어로 나뉘어 있다.[유니티에서 '정보 지향'이라는 새로운 개념

lsu0503.tistory.com

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함