코틀린

11. 객체 지향 프로그래밍

mks160615 2025. 1. 29. 16:01

클래스를 본격적으로 시작하기 전에 객체 지향 프로그래밍을 간략하게 정리해 보았다.

 

정의

OOP(Object-Oriented Programming)는 프로그램 설계 방법론의 일종이다. 프로그램을 단순히 데이터와 차리 방법으로 나눈 것이 아닌, 프로그램을 수많은 객체(Object)라는 기본 단위로 나누고 이들의 상호 작용으로 서술하는 방식이다.

 

탄생

초기 프로그래밍 방식은 절차적 프로그래밍 방식이었다. 입력을 받아 명시된 순서대로 처리한 다음 그 결과를 내는 것을 중점으로 두었다. 그러나 알고리즘이 조금만 복잡해지면 스파게티 코드를 만들어 코드 가독성과 유지보수를 크게 어렵게 하였다. 이를 해결하기 위해 1968년 에츠허르 다익스트라가 제시한 <GOTO문의 해로움>이라는 논문을 통해 구조적 프로그래밍 방식을 제안하면서 문제를 해결하게 된다.

* 스파게티 코드: 스파게티처럼 코드가 난잡하여 유지보수를 어렵게 하는 코드를 말한다.

 

그러나 구조적 프로그래밍 방식은 데이터 처리 방법을 구조화했을 뿐 데이터 자체를 구조화하지 못한 단점을 가지고 있었다. 구조체나 지역 변수로 제어를 한다 하여도 한계는 분명했다.

 

이를 극복하기 위해 탄생한 것이 바로 객체 지향 프로그래밍이다. 작은 문제들을 해결할 수 있는 객체를 만든 뒤 이 객체들의 조합과 상호 작용으로 큰 문제를 해결하는 상향식 방법(Bottom-Up)을 도입하였다. 이를 통한 독립성/ 신뢰성이 향상되면 그 이후엔 객체를 수정할 일 없이 재사용할 수 있어 개발 기간과 비용을 크게 절감하였다.

 

특징

 객체 지향 프로그래밍은 크게 네 가지 특징을 가진다.

        • 추상화 : 공통으로 사용하는 변수나 함수를 추출하여 파악하는 것이다.
        • 상   속 : 부모 클래스에서 사용 중인 변수나 함수를 자녀 클래스에서 재사용하는 것이다.
        • 다형성 : 하나의 변수 또는 함수가 상황에 따라 다양한 역할을 가진다.
        • 캡슐화 : 변수와 함수를 하나의 단위로 묶는다. 주로 클래스를 통해 구현된다.

클래스

특정 종류의 객체 내에 있는 변수와 메서드를 정의하는 일종의 틀을 의미한다.

 

객체

클래스에서 정의한 것을 토대로 메모리에 할당된 것이다.

  • 속성 (Field) : 객체가 가지고 있는 정적 성질이다.
  • 메서드 (Method) : 객체가 가지고 있는 동적 성질이다.

* 언어에 따라 함수를 메서드라고 부를 때가 있다. Java가 대표적이다.

인스턴스

실체가 있는 객체이다.

 

 

클래스와 객체, 인스턴스를 강아지로 비유를 하자면

  • 클래스 - 강아지
  • 속성 - 골드 리트리버, 네 개의 다리, 눈, 코, 입, 꼬리
  • 메서드 - 짖는다, 달린다, 먹는다
  • 인스턴스 - 뭉치

라고 보면 된다.

'코틀린' 카테고리의 다른 글

13. 클래스 - 상속  (0) 2025.01.29
12. 클래스 - 기본  (1) 2025.01.29
10. 자료 구조  (0) 2025.01.29
09. 함수  (1) 2025.01.29
08. String Template  (0) 2025.01.29