JosephCha의 개발일지

객체지향 프로그래밍 본문

iOS

객체지향 프로그래밍

JosephCha 2023. 2. 8. 21:27
반응형

클래스

  • 객체마다 같은 종류의 프로퍼티와 메소드를 정의한 사용자 정의 데이터형 틀
  • 객체의 상태를 나타내는 프로퍼티와 객체의 행동을 나타내는 메소드로 구성됨
  • 비슷한 구조를 갖지만 상태가 서로 다른 많은 객체들을 만들 수 있음

객체

  • 클래스의 인스턴스(실제로 메모리상에 할당된 것)
  • 자신만의 프로퍼티의 값을 가지며 클래스에서 정의한 메소드들을 수행할 수 있음

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

  • 객체들의 상호작용으로 서술하는 프로그래밍 기법
  • 프로그램을 그저 데이터와 처리방법으로 나누는 것이 아닌, 프로그램을 다수의 '객체'로 만들어놓고, 객체들끼리 서로 상호작용을 통해서 하나의 프로그램을 만들어지는 방식

객체지향 프로그래밍의 4가지 특성

  1. 추상화
    • 객체의 공통적인 프로퍼티와 메소드를 추출하여 정의하는 것
    • 객체지향적 관점에서는 클래스를 정의하는 것을 추상화라고 할 수 있음
    • 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단하게 만드는 것
  2. 캡슐화
    • 객체 수행 목적에 따라 데이터 구조 및 처리 방법을 결합시켜 묶어 관리 하는것
      • 코드가 묶여있어서 오류가 없어 편리함
    • 낮은 결합도를 유지할 수 있도록 설계하는 것
    • 정보은닉
      • 외부객체는 내부객체의 구조를 알지 못하고, 객체가 노출해서 제공하는 필드와 메서드만 이용할 수 있음 (접근제어를 사용해 보자)
      • 장점
        • 외부에서 특정 객체의 데이터 및 함수의 직접접근을 막음으로써 변경을 못하게 하여, 유지보수나 확장시 오류의 범위를 최소화할 수 있음(객체 내 정보 손상, 오용을 방지하고, 조작법이 바뀌어도 사용방법 자체는 바뀌지 않아서 오류의 범위를 최소화한다는 것)
        • 데이터가 변경되어도 다른 객체에 영향을 주지 않는, 독립성을 갖음
        • 처리된 결과를 사용하므로, 이식성이 좋고 객체를 모듈화 할 수 있어서 새로운 시스템의 구성에 하나의 모듈처럼 사용이 가능
  3. 상속
    • 하나의 클래스가 가진 특징(메소드, 프로퍼티)을 다른 클래스가 그대로 물려받는 것
    • 장점
      • 재사용으로 인한 코드가 줄어듬
      • 자료와 메서드의 자유로운 사용 및 추가가 가능
    • 단점
      • 상위 클래스의 변경이 어려워짐
      • 불필요한 클래스가 증가할 수 있음
  4. 다형성
    • 하나의 변수명, 함수명이 상황에 따라 다른 의미로 해석 될 수 있는 것
    • 객체 지향 프로그래밍은 하나의 클래스 내부에 같은 이름의 행위를 여러개 정의하거나, 상위 클래스의 행위를 하위 클래스에서 재정의하여 사용할 수 있기 때문에 다형성이라는 특징을 갖음
    • 오버라이딩 (Overriding)
      • 서브클래스가 슈퍼클래스에서 상속할 메서드, 프로퍼티, 서브스크립트를 서브클래스에서 원하는대로 구현(재정의)하는 것
    • 오버로딩 (overloading)
      • 함수의 이름은 같으나, 매개변수, 리턴타입 등으로 다르게 설정하여 함수를 중복으로 선언
      • 함수, 서브스크립트, 생성자에 사용 가능
      • 장점 - 매개변수나, 리턴타입은 다르지만 같은 기능을 하는 메소드라고 같은 메소드명을 사용할 수 있음

객체지향 프로그래밍 장점

  • 객체지향 프로그래밍의 경우 하나의 문제 해결을 위한 데이터를 클래스에 모아 놓은 데이터형을 사용함으로써 응집력을 강화하고, 클래스간에 독립적인 디자인을 함으로써 결합력을 약하게 할수 있음
  • 상속을 통해 코드의 재사용성을 높일 수 있음
  • 잘 설계된 클래스를 만들어서 독립적인 객체를 사용함으로써 개발의 생산성을 향상시킬 수 있음
  • 유지보수의 우수성 : 기존 기능을 수정 시 함수를 새롭게 바꾸더라도 캡슐화 되어 그 함수의 세부 정보가 은닉되어 있기 때문에 주변에 미치는 영향을 최소화 하기 때문에 유지보수의 우수성을 갖는다. 새로운 객체의 종류를 추가 시에는 상속을 통해서 기존의 기능을 활용하고, 존재하지 않은 새로운 속성만 추가하면 되므로 매우 경제적임
  • 자연적인 모델링: 일상생활에서 모습의 구조가 객체에 자연스럽게 녹아들었기 때문에 생각하고 있는 것을 그대로 자연스럽게 구현할 수 있음

객체지향 프로그래밍 단점

  • 처리속도가 상대적으로 느림, 많은 오버헤드가 발생함 (객체간의 정보교환이 모두 메시지 교환을 통해서 일어나기 때문)
  • 객체의 수가 많아짐에 따라 용량이 커질 수 있음
  • 설계 시, 많은 시간과 노력이 필요하게 될 수 있음

 

참고

https://ko.wikipedia.org/wiki/객체_지향_프로그래밍

https://jongminfire.dev/객체지향-프로그래밍이란

http://www.incodom.kr/객체_지향#h_45791da82d928e012cccde6bfb5b5d23

https://didu-story.tistory.com/320

https://eatnows.tistory.com/85

http://www.tcpschool.com/java/java_class_intro

'iOS' 카테고리의 다른 글

네트워크 Endpoint  (0) 2023.08.09
iOS 동작과정  (0) 2023.08.09
UIKit 기본개념  (0) 2023.08.09
Content Hugging priority & Content Compression Resistance priority  (0) 2021.11.29
MVC 패턴  (0) 2021.11.22
Comments