일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자바
- 키노
- 오블완
- 인프런
- Flutter
- 코딩공부
- toy project
- Flutter Toy Project
- 토이프로젝트
- sopt ios
- 스프링 입문
- 자바 스터디
- SOPT
- sopt 35기
- 영화기록
- 영화리뷰
- 영화일기
- SWIFT
- 새벽녘 소소한 기록
- 플러터
- 리뷰
- java
- 영화후기
- inflearn
- 티스토리챌린지
- 자바공부
- 영화
- 프로그래머스
- 백준
- 일기
- Today
- Total
새벽의 기록
[SOPT] 문법 스터디 #4 메서드와 옵셔널 체이닝 본문
- 메서드
- 인스턴스 메서드와 타입 메서드 의 차이점과 각각의 사용 예시
- mutating 키워드
- 메서드 오버로딩과 메서드 오버라이딩 의 차이
- 옵셔널 체이닝
- 강제 언래핑의 문제점
- 옵셔널 바인딩 에 대해서도 알아보고, 옵셔널 체이닝 과 같이 사용해봅시당
메서드
인스턴스 메서드와 타입 메서드 의 차이점과 각각의 사용 예시
인스턴스 메서드는 클래스, 구조체, 또는 열거형의 인스턴스에서 호출할 수 있는 메서드.
타입 메서드는 타입 자체에서 호출할 수 있는 메서드로, 클래스, 구조체, 또는 열거형의 타입 수준에서 동작한다.
struct Counter {
var count = 0
// 인스턴스 메서드
func displayCount() {
print("Current count is \\(count)")
}
// 타입 메서드
static func staticMethodExample() {
print("This is a type method.")
}
}
// 인스턴스 생성 후 메서드 호출
var myCounter = Counter()
myCounter.displayCount() // "Current count is 0"
// 타입 메서드 호출
Counter.staticMethodExample() // "This is a type method."
displayCount 같은 인스턴스 메서드는 객체를 생성해서 호출할 수 있고,
staticMethodExample 같은 타입 메서드는 struct 자체에서 호출할 수 있다.
mutating 키워드
mutating 키워드는 구조체나 열거형의 인스턴스 메서드에서 인스턴스의 속성을 변경할 수 있도록 해주는 키워드.
struct Counter {
var count = 0
// 인스턴스 메서드
func displayCount() {
print("Current count is \\(count)")
}
// mutating 키워드를 사용한 인스턴스 메서드
mutating func increment() {
count += 2
}
}
// 인스턴스 생성 후 메서드 호출
var myCounter = Counter()
myCounter.displayCount() // "Current count is 0"
myCounter.increment()
myCounter.displayCount() // "Current count is 2"
기본적으로 값 타입의 프로퍼티는 인스턴스 메서드 내에서 수정될 수 없다.
하지만 굳이굳이 특정 메서드 내에서 구조체나 열거형의 프로퍼티 수정이 필요하다면, 메서드에 mutating 키워드를 작성해서 프로퍼티를 변경할 수 있고, 메서드가 끝나면 기존 구조체에 변경사항이 적용된다.
메서드 오버로딩과 메서드 오버라이딩 의 차이
메서드 오버로딩은 동일한 이름의 메서드가 여러 개 정의되지만, 각각의 파라미터 타입이나 개수가 달라서 구분될 수 있게 만드는 것.
class Cat {
func sound() {
print("야옹")
}
func sound(times: Int) {
for _ in 1...times {
print("야옹")
}
}
}
let cat = Cat()
cat.sound() // 야옹
cat.sound(times: 3) // 야옹야옹야옹
메서드 오버라이딩은 상속받은 클래스가 부모 클래스의 메서드를 재정의하는 것.
class Animal {
func sound() {
print("대충 동물 울음소리")
}
}
class Cat: Animal {
override func sound() {
print("야옹")
}
}
let animal = Animal()
let cat = Cat()
animal.sound() // 대충 동물 울음소리
cat.sound() // 야옹
옵셔널 체이닝
강제 언래핑의 문제점
강제 언래핑은 옵셔널 타입의 값 뒤에 !를 붙여서 옵셔널을 강제로 풀어내는 방법.
이 방법은 옵셔널이 nil이 아닌 것이 확실할 때 사용해야 한다.
→ 만약 nil을 강제 언래핑하려 하면 런타임 오류가 발생하여 앱이 크래시될 수 있음.
강제 언래핑의 문제점은 예기치 못한 nil이 있을 경우 앱의 비정상 종료로 이어질 수 있기 때문에 안전하지 않다는 것.
옵셔널 바인딩 에 대해서도 알아보고, 옵셔널 체이닝 과 같이 사용해봅시당
옵셔널 바인딩은 if let 또는 guard let 구문을 사용하여 옵셔널 값이 nil이 아닌 경우에만 안전하게 값을 추출할 수 있도록 하는 방법이다. → 코드의 안정성을 높일 수 있다.
옵셔널 체이닝은 옵셔널 값에 연속적으로 접근할 때 nil인지 확인하면서 안전하게 값을 추출할 수 있는 방법이다.
→ 뒤에 ? 붙여주는 거
class Person {
var residence: Residence?
}
class Residence {
var address: Address?
}
class Address {
var street: String?
}
let john = Person()
// 옵셔널 체이닝과 옵셔널 바인딩을 함께 사용
if let streetName = john.residence?.address?.street {
print("John lives on \\(streetName)")
} else {
print("No street information available")
}
// residence가 nil이므로 체이닝의 결과는 nil이고, else 블록이 실행됨.
'SOPT > 문법 스터디' 카테고리의 다른 글
[SOPT] 문법 스터디 #6 초기화 (1) | 2024.11.16 |
---|---|
[SOPT] 문법 스터디 #5 상속 (5) | 2024.11.15 |
[SOPT] 문법 스터디 #3 열거형과 프로퍼티 (0) | 2024.11.13 |
[SOPT] 문법 스터디 #2 클로저 (3) | 2024.11.12 |
[SOPT] 문법 스터디 #1 콜렉션 타입 (0) | 2024.11.11 |