객체지향 언어(Object Oriented Language)의 장점과 객체지향 프로그램이 등장한 이유에 대해 설명하세요.
객체지향 언어의 장점은 코드의 재생산성이 높아 코드를 작성할 때 기존의 코드를 이용해 쉽게 작성할 수 있다는 것입니다. 코드간의 관계를 이용해서 적은 노력으로 코드를 쉽게 관리할 수 있습니다. 객체지향 언어는 제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한 오작동을 방지할 수 있습니다.
객체 지향 프로그래밍은 컴퓨터 프로그래밍 패러다임 중 하나로, 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.
기본구성 요소
- 클래스
- 객체
- 메서드
프로그래밍 패러다임이란 프로그램을 설계하는 중심 관점이라고 볼 수 있다. 객체지향 언어는 명령형 프로그래밍의 한 종류로 절차지향 언어의 단점을 보완하기 위해 순차적인 로직의 흐름(절차)가 아닌 객체를 관점으로 보기 시작하면서 등장한 프로그래밍 언어다. 절차지향 언어는 순차적인 실행 순서에 따라 빠르게 프로그램을 실행시킬 수 있는 장점이 있지만 프로그램이 커질수록 분석이 어려워져 유지보수가 힘들다는 단점이 있다. 객체지향 언어는 그런 단점을 극복하기 위해 클래스, 객체 개념을 도입한다.
객체지향 언어의 시작은 1960년 시뮬라67이 클래스라는 개념을 도입하면서부터이다. 메서드를 통해 반복되는 로직을 그룹핑하고 수행을 줄여나갔던 것과 같이 그 메서드와 변수 등의 멤버들을 묶어서 그룹핑(추상화
)하여 만든 개념이 클래스이다.(이를 캡슐화
라고도 말한다) 객체지향 언어에서는 이렇게 그룹핑되고, 다른 것들과 구분할 수 있는 것들을 객체
라고 본다.
이렇게 객체가 분리되는 것은 즉, 프로그래밍이 부품화 된다는 것이다. 각각의 부품들이 상호작용하여 하나의 완성품을 만들어내는 것과 같이 객체지향 언어는 각각의 객체가 상호작용하여 하나의 프로그램을 완성시키는 것이다.
부품화는 다음과 같은 효과를 가져온다.
부품화 (캡슐화 혹은 추상화)
- 은닉화
- 재사용성
- 유지보수 유연화
로직에 필요한 객체들을 캡슐화 시키면서 정보 은닉의 장점을 갖게된다. 프로그램밍에서 은닉이란 정보 접근에 대한 제어가 가능하다는 것이고, 동시에 내부 로직을 알지 못하더라도 접근하여 코드를 재활용할 수 있다는 것이다. 우리가 모니터의 동작원리를 알지 못하더라도 사용법만 알면 사용할 수 있는 원리와 유사하다.
캡슐 내부의 로직을 모르더라도 사용할 수 있기 때문에 재사용성은 높아진다. 이것은 프로그램이 커졌을 때, 같은 행위를 반복하는 상황에서 생산성을 높여주는 장점이 된다. 이것이 아마도 객체지향의 가장 큰 장점이고 지향하는 바 일 것이다.
부품화를 통해 수정이 필요하거나, 보완이 필요한 객체에만 접근해서 수정/보완 하면 되기 때문에 이는 유지보수를 훨씬 쉽게 만들어준다. 이 과정에서 유지보수성을 높이기 위해 객체의 형태나 형식 등을 통일시켜주어야 하기 때문에 프로그래밍 난이도가 올라가는 단점이 되기도 한다.
객체지향 언어(Object Oriented Language)의 장점과 객체지향 프로그램이 등장한 이유에 대해 설명하세요.
객체 지향 언어는 큰 프로젝트에서 유지보수에서 어려움을 겪을 수 있는 절차지향 언어의 단점을 보완하기 위해 등장한 언어입니다.
객체지향 언어는 클래스 단계로의 객체 추상화를 통해 재사용성을 높입니다. 따라서 상대적으로 적은 노력으로 코드를 사용하고, 유지보수할 수 있습니다. 코드의 캡슐화는 객체의 데이터를 보호하고, 불일치를 방지하는 은닉화의 효과도 누릴 수 있게합니다.
참고
- 면접용 객체지향형 프로그래밍 질문
https://jeong-pro.tistory.com/95- 객체지향 프로그래밍 개념
https://opentutorials.org/course/1223/5399- 객체지향 프로그래밍 역사
https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D- 프로그래밍 패러다임
https://velog.io/@younoah/programming-paradigm