HIT해

[Swift 기초문법 - 46] Open 본문

Swift/Swift 기초문법

[Swift 기초문법 - 46] Open

힛해 2024. 8. 18. 09:48
728x90

Open 이란?

프로젝트 내 어디서든 사용가능하다

다른 외부 모듈에서도 상속 및 오버라이드가 가능하게 한다

예) 오픈소스 및 외부 라이브러리 구조, 애플 프레임워크

uibiewcontroller 클래스명 Cmd + click 을 하면 open 키워드를 볼 수  있다.

 

상황예시

1. 다른 폴더안의 Utils

class Utils{
	class func sayHello(){
    	print("하이")
    }
}

 

2. import하여 사용하고자 함

import Utils // 파일명

class ViewContoller : UIViewController {
	override func viewDidLoad(){
    	super.viewDidLoad()
        
        Utils.sayHello()
        }
}

 

이때 Utils에 접근이 되지 않는다.

Utils를 전부 public으로 바꿔주면 해결된다

 

3. 접근제어자 수정

public class Utils{
	pubilc class func sayHello(){
    	print("하이")
    }
}

 

정상적으로 호출해서 사용이 가능하다

 

그렇다면 상속받아서 overriding은 가능할까?

class MyUtils : Utils {
	override func sayHello(){
    	super.sayHello()
        print("오버라이드완")
    }
}
// Cannot inherit from non-open class Utils outside of its defining modules


class ViewController .....

 

외부에 있는 모듈은 상속을 받을 수 없다고 한다.

 

이때 상속을 받기 위해 사용하는 것이 Open이다!

 

4. Open

open class Utils{
	// 오버라이딩을 하려면 내부 클래스 func도 open을 붙여주어야한다.
	open class func sayHello(){
    	print("하이")
    }
}

 

 

정리하자면

외부모듈을 상속받거나 import 할 때 유용한 정보다!