기타

#2. Typealias

행복하자구요! 2022. 8. 6. 14:49
반응형

typealias는 기존에 Swift에 존재하는 타입에(기존타입외에 새로 만들어준 타입에도 적용된다) 별칭을 붙여 

 

코드내에서 사용하기 쉽도록 하는것이다.

 

타입을 새로 생성하는 것이 아닌 기존의 타입을 명칭만 다르게 가져다 쓰는 방식인 것.

 

사용법은 

 

typealias name = existing type

형태로 사용할 수 있다.

 

쓰면서 주의할 점은 typealias는 타입을 새로 만드는 것이 아닌 기존에 존재하는 타입에 명칭만 붙여서 사용한다는것이 핵심이다.

 

사용되는 경우를 간단하게 정리해보자며

1. 기존 빌트인타입(Int, String 등) 에 사용하거나

2. 유저가 정의내린 타입에 사용하거나

3. 클로저를 입력 매개변수로 할때 typealias를 사용하거나

4. generic parameter

5. 프로토콜 선언 시 사용하는것.

 

위의 내용중에서 아직 4)의 경우에는 잘 이해가 안가는 경우가 있다... 

 

이해한 내용을 바탕으로 코드 예시를 작성해 보았으니 참고해보면서 잊지말기로 하자.

 

import SwiftUI

struct player {
    var name: String
    var HP: Int
    var MP: Int
}

typealias enemy = player

let player1 = player(name: "머털도사", HP: 100, MP: 100)

let slime = enemy(name: "슬라임", HP: 50, MP: 50)



struct ContentView: View {
    var body: some View {
        VStack {
            HStack{
                Image(player1.name)
                    .resizable()
                    .scaledToFit()
                    .border(.black, width: 2)
                    .frame(width: 75, height: 75)
                Text(player1.name)
                Text("HP: \( String(player1.HP))")
                Text("MP: \( String(player1.MP))")
            }
            .frame(width: 350, height: 100)
            .background(Color.gray)
            HStack(alignment:.center, spacing: 10){
                Image(slime.name)
                    .resizable()
                    .scaledToFit()
                    .contentShape(Circle())
                    .border(.black, width: 2)
                    .frame(width: 75, height: 75)
                Text(slime.name)
                Text("HP: \( String(slime.HP))")
                Text("MP: \( String(slime.MP))")
            }
            .frame(width: 350, height: 100)
            .background(Color.brown)
        }
        
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

위 코드의 결과로는 

 

예시코드 실행결과

위 예시코드에서 기억해두어야 할 점은 

 

머털도사인스턴스의 본 구조체의 내용 즉 Player의 구조체 내용을 

명칭만바꿔서 동일하게 슬라임(enemy)에도 적용해 사용할수 있다는것이다.

 

코드에 가독성, 간결성을 살려주고 불필요하게 반복되는 코드를 줄여주는 typealias를 잊지말자.

 

 

반응형