Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

is, as의 차이는 무엇인가요? #37

Open
0Hooni opened this issue Jan 12, 2025 · 4 comments
Open

is, as의 차이는 무엇인가요? #37

0Hooni opened this issue Jan 12, 2025 · 4 comments

Comments

@0Hooni
Copy link
Collaborator

0Hooni commented Jan 12, 2025

No description provided.

@youn9k
Copy link
Collaborator

youn9k commented Jan 16, 2025

is 와 as 는 Swift에서 타입 캐스팅을 위한 연산자입니다.
is표현식 is Type 이란 코드가 있을 때, 표현식이 타입과 일치하는지 여부를 Bool 값으로 반환합니다.
as표현식 as Type에서 표현식의 타입을 Type으로 캐스팅하여 반환합니다.
이 때 상속과 같은 관계에 있을 때, 슈퍼클래스로 캐스팅 하는 걸 업캐스팅 이라고 하고, 서브클래스로 캐스팅 하는 걸 다운 캐스팅 이라고 합니다.
업케스팅은 항상 성공하기 때문에 as 를 사용할 수 있지만, 다운 캐스팅은 실패 가능성이 존재하기 때문에 as?as! 를 사용해 캐스팅 실패 시 처리할 수 있도록 옵셔널로 반환받아야 합니다.

@Kiyoung-Kim-57
Copy link
Collaborator

is

is는 타입 체크를 위해 사용하는 코드이다. 객체의 타입이 특정 타입인지를 체크하여 Bool 값으로 반환한다.

as

as는 타입캐스팅할 때 사용하는 코드이다. 캐스팅의 방향에 따라 업캐스팅과 다운캐스팅으로 나눌 수 있다. 업캐스팅은 상위 타입으로 캐스팅하는 경우이다. 이 경우 항상 성공한다. 다운캐스팅은 하위 타입으로 캐스팅한다. 다운캐스팅은 경우에 따라 실패할 수 있어 옵셔널로 캐스팅하여 캐스팅에 실패할 경우 nil을 할당하는 방법으로 캐스팅할 수 있다.

@hsw1920
Copy link
Owner

hsw1920 commented Jan 16, 2025

is, as는 타입 캐스팅을 위한 연산자입니다. 타입 캐스팅은 클래스, 프로토콜, Any 타입 등 다양한 대상에서 가능합니다.

일반적으로 is는 타입을 확인하는데 사용되고, as는 타입을 변환하는데 사용됩니다.
is는 타입을 확인하여 동일한 타입인지를 확인하여 Bool 값을 반환합니다.
as는 표현식의 타입이 변환할 타입과의 호환을 확인하여 다운 캐스팅 또는 업캐스팅을 수행합니다.

as는 기본적으로 슈퍼클래스(또는 프로토콜)로의 업캐스팅을 수행하며 컴파일 타임에 이뤄집니다. 업캐스팅은 as를 붙이거나 타입을 직접 명시하는 것으로 수행할 수 있습니다.

다운캐스팅은 실패할 수 있기 때문에 ? 또는 !를 붙여서 명시적으로 수행하며 런타임에 이뤄집니다. 인스턴스 생성 시 서브클래스(또는 구현체) 타입으로 접근 범위를 제한하는 것을 말하며, 실패하면 런타임 에러가 발생하므로 가능하면 as?를 사용하는 것이 좋습니다.

@0Hooni
Copy link
Collaborator Author

0Hooni commented Jan 17, 2025

🙋🏻 답변

is, as는 swift에서 타입 검사 혹은 타입 캐스팅을 위해 사용되는 연산자입니다.

is 연산자의 경우에는 객체가 특정 타입인지 확인할 때 사용하며, 불리언 값을 반환해줍니다. 그래서 주로 조건문에서 활용됩니다.

as 연산자의 경우에는 객체를 특정한 타입으로 캐스팅할때 사용됩니다. 캐스팅 방식에는 세가지가 존재하는데 ?를 붙여 사용하는 옵셔널 다운캐스팅, !를 붙여 사용하는 강제 다운캐스팅, 마지막으로 아무것도 없이 사용하는 방식이 업캐스팅입니다.

업캐스팅의 경우 as를 명시적으로 사용해줘도 되고, 인스턴스에 타입을 명시하여 사용할수도 있습니다.

다운 캐스팅의 경우에는 수퍼 클래스를 서브 클래스의 타입으로 변환할 때 사용합니다. 이 때 다운캐스팅은 실패할 가능성이 있기 때문에 옵셔널 연산자를 사용하여 캐스팅을 해줍니다. 실패할 경우에는 nil을 반환하거나 런타임 에러를 발생시킵니다.

이러한 캐스팅을 사용하는 이유는 다형성을 활용하여 동일한 인터페이스를 이용하되 서로 다른 서브클래스로의 구현을 하기 위함이며, 이를 통해 서브클래스의 고유한 메서드나 속성에 접근할 수 있게됩니다.

🏷️ 키워드

타입, 검사, 캐스팅, 불 값, 업캐스팅, 다운캐스팅, 다형성

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants