Notice
Recent Posts
Recent Comments
Link
«   2024/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
반응형
Archives
Today
Total
관리 메뉴

슈프림 블로그

객체지향 프로그래밍에 대하여.. Class & Object & Instance 본문

iOS_Swift

객체지향 프로그래밍에 대하여.. Class & Object & Instance

_슈프림 2020. 8. 4. 08:25
728x90

객체지향 프로그래밍(OOP)

객체지향 프로그래밍이란 프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 프로그램을 수많은 객체라는 기본 단위로 나누고 이 객체들의 상호작용으로 서술하는 방식이다.

 

프로그래밍 방법론의 진화

  • 절차지향 프로그래밍

    초기 프로그래밍 방식이었던 절차지향 프로그래밍은 그 프로그램이 가지는 논리적인 기능만을 중점적으로 구현을 했으며, 어떤 데이터를 취급하는지에 대해서는 별로 관심이 없었다. 하지만 이 방식은 조금만 코드가 복잡해지면 이해하기 어려워지고, 유지보수도 힘들어진다.

  • 구조적 프로그래밍

    이 문제를 해결하기 위해 거대한 로직을 함수와 프로시져 단위로 프로그램을 구성하는 구조적 프로그래밍이 등장하였지만, 이 방식은 데이터의 처리 방법을 구조화했을뿐, 데이터 자체는 구조화하지 못했다.

  • 객체지향 프로그래밍

    다음 해결방안으로는 객체지향 프로그램이 등장하였다. 큰 문제를 작게 쪼개는 것이 아니라, 먼저 작은 문제들을 해결할 수 있는 객체들을 만든 뒤, 이 객체들을 조합해서 큰 문제를 해결하는 상향식(Bottom-up) 해결법을 도입하였다. 이 객체란 것을 일단 한번 독립성/신뢰성이 높게 만들어 놓기만 하면 그 이후엔 그 객체를 수정 없이 재사용할 수 있으므로 개발 기간과 비용이 대폭 줄어들게 된다.

 

객체지향 프로그래밍의 특징 3가지

  • 캡슐화

    프로그램(객체)의 상세 내용은 외부에서 알지 못하도록 감싸는 것을 말한다. 모듈 내의 응집도는 높이고, 모듈간의 결합도는 떨어트려 유지보수를 용이하게 한다. 클래스의 프로퍼티와 메소드에 **접근제한자(public, protected, private)**를 사용하여 캡슐화할 수 있다.

  • 상속

    부모 클래스의 특징을 자식 클래스가 그대로 물려받을 수 있다. 기능의 일부분을 변경해야 할 경우, 자식 클래스에서 부모클래스의 프로퍼티 또는 메소드를 Overriding 해야 한다.

  • 다형성

    여러가지 형태를 가질 수 있다는 특성. 하나의 객체를 여러 개의 타입으로, 하나의 타입으로 여러 종류의 객체를 여러 가지 모습으로 해석될 수 있는 것을 말한다. 상속과 추상화, 오버로딩과 오버라이딩을 통해 다형성을 제공한다.

 

Class & Object & Instance 차이

클래스의 정의는 너무나도 명확하다.

  • 객체 지향 프로그래밍(OOP)에서 **특정 객체를 생성하기 위한 일종의 틀(설계도)**이다.
  • 객체를 정의 하기 위한 상태(멤버변수)와 메서드(함수)로 구성된다.

클래스를 사용하여 객체(Object)를 만든다고도 하고, 인스턴스(Instance)를 만든다고도 한다.

그렇다면, 객체와 인스턴스의 차이는 무엇일까?

  • 객체는 실세계에 존재하는 실체를 말한다. 어떤 방법으로든 만들어진 모든 실체는 객체라고 할 수 있다.
  • 인스턴스관계에 중점을 두는 객체를 말한다. 클래스를 사용하여 객체를 만들면, 클래스의 특징을 모두 만족하는 객체가 생성되므로 이 객체는 인스턴스라고 할 수 있다. 객체를 실체화한 것을 말한다.

직관적으로 설명하기 위한 예시를 들자면,

var cat = Animal()

cat 이라는 변수에 Animal이라는 클래스를 사용한 실체를 만든 상황에서는 어떤 값이든 저장할 수 있는 변수 cat은 객체, Animal은 클래스라고 할 수 있으며, 클래스 생성자를 통해 변수에 저장된 객체는 인스턴스라고 할 수 있다.

반응형

'iOS_Swift' 카테고리의 다른 글

[Swift] self, super 키워드  (0) 2020.08.04
[Swift] 커스텀 객체 인스턴스를 비교하는 방법  (0) 2020.08.04
[Swift] Any, AnyObject, nil  (0) 2020.04.25
[Swift] 기본 데이터 타입  (0) 2020.04.25
[iOS/Swift] Xcode Project Setting  (0) 2020.03.18
Comments