[iOS] Any이런거 쓰지 말라고 몇번을

유인호·2024년 1월 10일
0

iOS

목록 보기
14/73
post-custom-banner

Any vs AnyObjcet

Any

let anyTest: [Any] = [
	123,
	"123",
	true,
	12.3,
	TestClass1(),
	TestStruct1(),
	TestEnum.test
]

for item in anyTest {
	print(item)
}

Any는 모든 타입과 구조체, 클로저, 클래스, 열거형 등 모든 인스턴스를 담을 수 있다.

AnyObject

let anyObjectTest: [AnyObject] = [
	TestClass1(),
	TestStruct1() // 에러
    123, // 에러
	"123", // 에러
	true, // 에러
	12.3 // 에러
]

for item in anyTest {
	print(item)
}

AnyObject는 오직 클래스타입의 인스턴스만 담을 수 있음.

Swift는 Type에 굉장히 민감한 언어이기에 사용을 자제해야함.
또한, Any타입으로 선언된 녀석을 사용하려면 매우 까다롭다.

타입은 컴파일 후에 정해지기 때문에 내장된 메서드 같은걸 사용하지 못함.

let typeCasting = anyTest[0] as? Int

이런식으로 타입캐스팅 한 후에나 사용할 수 있게 되고, 옵셔널도 추가적으로 신경을 쓰게 된다.

즉 유지보수 측면에서나, 코드적인 측면에서나 Any타입으로 변수나 상수를 만드는건 최대한 피해야한다.


자매품

인스턴스?

  • Class나 구조체 등 생성하고 난 뒤에 생성된 객체를 인스턴스 라고함. 아래의 mcflurry가 인스턴스임.
let mcflurry = TestClass1()

프로퍼티? 메서드?

  • Class나 구조체 안에 선언되어있는 변수나 상수를 프로퍼티, 함수를 메서드라고 함
class TestClass1 { 
	let str: String = "str" // 프로퍼티
	func sayHello() { // 메서드
		print("Hello")
	}
}
profile
🍎Apple Developer Academy @ POSTECH 2nd, 🌱SeSAC iOS 4th
post-custom-banner

0개의 댓글