[Swift] 객체지향(OOP)

2022. 2. 23. 19:20·iOS&Swift

오늘 내용은 객체지향 패러다임과 객체지향의 특징인 일반화, 추상화, 은닉화, 캡슐화이다.
객체지향이 만들어진 이유는 프로그램을 만드는 이들이 세상을 프로그램으로 나타내려는 과정에서 만들어졌다. 때문에 우리가 사는 세상처럼 객체를 중심으로 서로 상호작용하며, 프로그램이 동작하게 된다.
그 과정에서 만들어진 일반화, 추상화, 은닉화, 캡슐화를 한 문장으로 정리하면,

  • 일반화란, 공통된 특성 또는 행위를 묶어 놓은 것
  • 추상화란, 객체를 나타냄에 있어 중요한 포인트만 추려내는 것
  • 은닉화란, 외부로 보일 필요가 없거나, 그러면 안 되는 특성 또는 행위들을 숨겨놓은 것
  • 캡슐화란, 숨겨진 특성 또는 행위를 외부에서 제어할 수 있도록 행위만을 제공해 주는 것

📝 타입을 정의할 때 구조체와 클래스가 사용되는데, 둘의 차이에 대해서

위에 대한 답을 얻기 위해 "스위프트 언어 가이드"문서를 읽어 보았다. 문서에 따르면, 클래스는 구조체와 유사한 기능을 수행하는데, 클래스에는 구조체에 없는 추가적인 기능을 제공한다.
추가적인 기능은 다음과 같다.

  • 상속을 통해 한 클래스가 다른 클래스의 특성을 상속할 수 있다.
  • 타입 캐스팅을 사용하면 런타임에 클래스 인스턴스의 타입을 확인하고 해석할 수 있다.
  • Deinitializers(초기화 해제)는 클래스의 인스턴스가 할당된 리소스를 해제할 수 있도록 합니다.
  • 참조 카운팅은 클래스 인스턴스에 대한 둘 이상의 참조를 허용합니다.
  • 때문에 복잡성이 증가하여, 일반적인 경우에는 구조체를 사용하고, 클래스만에 기능이 필요할 때, 클래스를 사용한다.
    심지어, 구조체와 클래스를 선택을 도움을 주는 문서 또한, 존재했다. 하지만, "기본적인 경우에 구조체를 사용"이란 말 말고는 아직까진 말이 너무 어렵다.ㅜㅜ😓
    때문에, 링크를 걸어두고 Swift가 더 익숙해지면 다시 읽어봐야겠다.

참고문서1
참고문서2

📝 은닉화에 사용되는 private외에 무슨 접근제어가 있고, 접근 범위에 대해서

Swift에서 접근제어자는 5가지 접근제어가 존재

  • Open and Public - 공개 접근수준
  • 모듈*의 모든 소스 파일 내에서 사용 가능,
    하지만 Open과 Public도 차이가 있는데 Open은 클래스와 클래스 변수에만 사용가능,
    클래스의 맴버를 모듈 밖에서도 재정의 가능
  • Internal - 내부 접근수준
  • Internal으로 지정된 프로퍼티 또는 메소드는 모듈의 모든 소스 파일 내에서 사용할 수 있지만, 해당 모듈 외부의 소스 파일에서는 사용할 수 없다.
  • Fileprivate - 파일외부비공개 접근수준
  • Fileprivate으로 지정된 프로퍼티 또는 메소드는 해당 파일에서만 사용이 가능하다
  • Private - 비공개 접근수준
  • Private으로 지정된 프로퍼티 또는 메소드는 구현한 타입 범위 내에서만 사용 가능

*모듈이란 코드 배포의 단일 단위
참고문서

'iOS&Swift' 카테고리의 다른 글

[iOS] TextView Placeholder 구현하기  (0) 2022.11.01
[Swift] Protocol  (0) 2022.02.23
[Swift] 옵셔널 추출  (1) 2022.02.14
[Swift]Swift random(), randomElement() 함수 알아보기  (0) 2022.02.11
[Swift]Class, Instance, Object 알아보기  (0) 2022.02.07
'iOS&Swift' 카테고리의 다른 글
  • [iOS] TextView Placeholder 구현하기
  • [Swift] Protocol
  • [Swift] 옵셔널 추출
  • [Swift]Swift random(), randomElement() 함수 알아보기
Esiwon
Esiwon
iOS 개발 블로그
  • Esiwon
    시원한 코드 기록
    Esiwon
  • 전체
    오늘
    어제
    • 분류 전체보기 (70)
      • iOS&Swift (24)
      • git & github (1)
      • 코테 (41)
      • 네부캠 회고 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    BFS
    PhotoKit
    비동기
    이분탐색
    실버
    동시성
    Race Condition
    photos
    구현
    코딩테스트
    회고
    그리디
    챌린지
    Property wrapper
    알고리즘
    코테
    GCD
    ios
    백준
    dfs
    Swift
    재귀
    다이나믹 프로그래밍
    탐색
    Combine
    완전탐색
    브루트포스 알고리즘
    노드
    네부캠
    photoUI
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Esiwon
[Swift] 객체지향(OOP)
상단으로

티스토리툴바