[231129] Today I Learned

YoungHyun Kim·2023년 11월 29일
1

TIL ✍️

목록 보기
7/68

Swift 문법 기본

객체 지향 OOP ( Object-Oriented Programming )

  • 특징
    • 추상화 : 복잡한 시스템을 단순화. 중요한 부분을 강조, 불필요한 부분을 숨기는 것. 필요한 정보만을 노출시키는 것!
    • 캡슐화 : 객체의 상태(타입)와 행동을 하나로 묶고, 외부에서의 접근을 제한하여 객체 내부의 세부 구현을 숨기는 것. 객체 간의 의존성을 줄이고 코드를 보호하며 유지보수성을 높일 수 있음.
    • 상속 : 기존 클래스의 속성과 메소드를 타 클래스에서 재사용하는 것.
      • final 키워드를 사용하면 더 이상의 상속을 막을 수 있음.
    • 다형성 : 동일 인터페이스를 가진 다른 클래스들이 각각의 방식으로 동작할 수 있는 능력
      • 오버라이딩 : 상위 클래스의 메소드를 하위 클래스에서 재정의하는 것.
      • 오버로딩 : 동일한 함수나 메서드 이름을 가지지만, 매개변수의 타입, 개수, 순서 등이 다른 여러 버전의 함수를 정의하는 것.

열거형( Enum )

// 연관 값을 가진 열거형 선언
enum Trade {
    case buy(stock: String, amount: Int)
    case sell(stock: String, amount: Int)
    case hold
}

// 열거형의 인스턴스 생성 및 사용
let trade1 = Trade.buy(stock: "AAPL", amount: 100)
let trade2 = Trade.sell(stock: "GOOG", amount: 50)
let trade3 = Trade.hold

// switch 문을 사용하여 연관 값 추출
func processTrade(trade: Trade) {
    switch trade {
    case .buy(let stock, let amount):
        print("Buy \(amount) shares of \(stock).")
    case .sell(let stock, let amount):
        print("Sell \(amount) shares of \(stock).")
    case .hold:
        print("Hold this position.")
    }
}

// 각 열거형 케이스에 따라 다른 동작 수행
processTrade(trade: trade1) // 출력: Buy 100 shares of AAPL.
processTrade(trade: trade2) // 출력: Sell 50 shares of GOOG.
processTrade(trade: trade3) // 출력: Hold this position.

위와 같이 연관값을 가진 열거형을 선언하고, 그 안의 정보를 switch 구문을 사용해서 추출할 수도 있다.

생성자

  • 기존 생성자는 초기화가 무조건 되어야 하는데, 옵셔널처럼! 선언하면 초기화하지 않아도 에러가 발생하지 않는 생성자를 만들 수 있음.
class UserProfile {
	let username: String
    
    init?(username: String) {
    guard username.count >= 5 else { return nil }
    
    self.username = username
	}
}

if let validProfile = UserProfile(username: "user123") { print("Valid username: \(validProfile.username)")
} else {
    print("Invalid username. Username should be at least 5 characters long.")
}

if let invalidProfile = UserProfile(username: "user") {
    print("Valid username: \(invalidProfile.username)")
} else {
    print("Invalid username. Username should be at least 5 characters long.")
}

[프로그래머스] 대충 만든 자판

딕셔너리를 어떤 식으로 사용할 수 있는지 어느정도 가늠잡을 수 있는 문제였다.

온전히 내 지식으로 풀어낸 문제는 아니다. 그렇다보니 다른 힌트들을 많이 접하고, 이를 그대로 활용하려는게 아니라 내 방식대로 녹여내려고 노력했다. 그 과정에서 딕셔너리의 키값을 추출해서 사용하는 방법이랑... value값을 추출해서 사용하는 방법이랑... 조금 익숙해 진 것 같지만 다음에 다른 문제에서도 활용해보려고 노력해보는 게 좋을 것 같다.

profile
iOS 개발자가 되고 싶어요

0개의 댓글