반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- uikit
- SWiFT
- UIButton
- TableView
- 진입점
- Remot Push
- WWDC16
- IBOutletCollection
- 연산 프로퍼티
- entrypoint
- 후행 클로저
- userdefaults
- OperationQueue
- tableViewCell
- 트레일링 클로저
- viewcontroller
- 동시성프로그래밍
- CoreLocation
- 원격 푸시
- RunLoop
- firebase
- weak
- AppTransportSecurity
- for-in
- property wrapper
- Understanding Swift Performance
- DispatchQueue
- ios
- Choosing Between Structures and Classes
- IBOutlet
Archives
- Today
- Total
iOS 공부하는 감자
Day14) 객체지향 프로그래밍 본문
반응형
객체지향 프로그래밍
- 프로그래밍에는 코드를 더 효율적으로 만들고 작성하기 위한 다양한 패러다임이 존재한다.
- 절차지향, 객체지향, 함수형 등이 있는데, Swift에서는 객체지향 프로그래밍과 함수형 프로그래밍 패러다임을 채택하여 사용한다.
- Swift에서는 객체라는 표현을 실제로 잘 사용하진 않는다. (인스턴스라고 부름: 이유는 후술)
- 객체지향 프로그래밍에서는 각 객체가 서로 메시지를 주고 받으며 데이터를 처리한다. 즉, 프로그램 실행의 주된 요소가 객체이다.
객체
- 객체지향 프로그래밍에서 객체는 상태와 상태(프로퍼티)와 행위(메서드)로 이루어진 것을 말한다.
- 즉, 관련있는 변수나 상수와 메서드를 모아서 한번에 관리하기 위해 만들어진다.
- Swift에서 객체는 클래스의 인스턴스를 의미한다.
객체 vs 인스턴스
- 객체는 전통적으로 클래스의 인스턴스를 말하는데, Swift에서 클래스와 구조체는 거의 동일한 기능을 수행한다.
- 스위프트 공식 문서에서도 다른 언어보다 Swift에서 클래스와 구조체는 기능적으로 흡사하기 때문에 더 일반적인 용어인 인스턴스를 사용하여 설명하고 있다.
https://docs.swift.org/swift-book/LanguageGuide/ClassesAndStructures.html
인스턴스(객체)의 설계
- 인스턴스는 결국 클래스나 구조체를 기반으로 생성되기 때문에 객체의 설계는 곧 타입의 설계와 연관되어 있다.
- 타입의 설계는 다음의 네 가지 과정을 거친다.
- 일반화 : 만들어질 인스턴스들의 공통된 특징을 뽑아낸다.
- 추상화 : 공통된 특성 중 필요한 부분만 추출한다.
- 은닉화 : 주요 사항이 겉으로 드러나지 않도록 감추는 것 (접근제어)
- 캡슐화 : 은닉화를 통해 감추어진 내용들을 외부에서 사용할 수 있도록 방법을 제공하고 외부와 소통하는 것
-
타입 설계 예시 struct Home { var numberOfRoom: Int var numberOfBathroom: Int // 은닉화 private var isDoorOpen: Bool = false init(numberOfRoom: Int, numberOfBathRoom: Int) { self.numberOfRoom = numberOfRoom self.numberOfBathroom = numberOfBathRoom } // 캡슐화 mutating func doorOpenAndClose() { switch isDoorOpen { case true: isDoorOpen = false case false: isDoorOpen = true } } } struct Person { var name: String var age: Int var house: Home } var dongHouse: Home = Home(numberOfRoom: 3, numberOfBathRoom: 2) var dong: Person = Person(name: "dong", age: 25, house: dongHouse) print(dong.house) // Home(numberOfRoom: 3, numberOfBathroom: 2, isDoorOpen: false) dong.house.doorOpenAndClose() print(dong.house) // Home(numberOfRoom: 3, numberOfBathroom: 2, isDoorOpen: true)
부모 클래스, 자식 클래스, 익스텐션 실습
class House {
internal private(set) var numberOfRoom: Int
internal private(set) var houseSize: Int
init (numberOfRoom: Int, houseSize: Int) {
self.numberOfRoom = numberOfRoom
self.houseSize = houseSize
}
}
class Apartment: House {
let floor: Int
init (floor: Int, numberOfRoom: Int, houseSize: Int) {
self.floor = floor
super.init(numberOfRoom: numberOfRoom, houseSize: houseSize)
}
}
var dongHouse: Apartment = Apartment(floor: 12, numberOfRoom: 3, houseSize: 2)
print(dongHouse.numberOfRoom) // 3
// extension은 소급 적용되어 이미 생성되었던 인스턴스에서도 확장된 내용을 사용할 수 있다.
extension House {
func makeRoom() {
self.numberOfRoom += 1
}
}
dongHouse.makeRoom()
print(dongHouse.numberOfRoom) // 4
알고리즘
https://co-dong.tistory.com/26
나머지가 1이 되는 수 찾기
나머지가 1이 되는 수 찾기 자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증
co-dong.tistory.com
https://co-dong.tistory.com/27
최소 직사각형
최소직사각형 명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 합니다. 다양한 모양과 크기의 명함들을 모두 수납할 수 있으면서, 작아서 들고 다니기 편한 지갑을 만들어야 합니다. 이러
co-dong.tistory.com
https://co-dong.tistory.com/28
두 정수 사이의 합
문제 설명 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다. 제한 조건 a와 b가
co-dong.tistory.com
반응형
'22 베이직 챌린지' 카테고리의 다른 글
Day19) HIG (Human Interface Guidelines) (0) | 2022.01.21 |
---|---|
Day15) Xcode 디버깅 (0) | 2022.01.17 |
Day13) 타입캐스팅 (0) | 2022.01.15 |
Day12) 옵셔널 (0) | 2022.01.14 |
Day11) 프로토콜, 익스텐션 (0) | 2022.01.13 |