투케이2K

15. (swift/xcode) protocol 프로토콜 인터페이스 정의 및 extension 익스텐션 확장 기능 구현 실시 본문

Swift

15. (swift/xcode) protocol 프로토콜 인터페이스 정의 및 extension 익스텐션 확장 기능 구현 실시

투케이2K 2021. 10. 12. 09:29

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT


[소스 코드]

import UIKit

// [protocol 정의 실시 : 클래스 외부에 선언]
protocol ReadOne {
    func read_One()
}
protocol ReadTwo {
    func read_Two()
}
class ReadClass : ReadOne , ReadTwo { // 클래스에서 프로토콜 채택
    // 메소드 몸체 구현 실시
    func read_One() {
        print("ReadClass >> read_One")
    }
    
    // 메소드 몸체 구현 실시
    func read_Two() {
        print("ReadClass >> read_Two")
    }
}





// [extension 정의 실시 : 클래스 외부에 선언 : 기존 Int 형에 새로운 메소드 추가]
extension Int {
    var isEven : Bool { // 짝수 여부 확인
        return self % 2 == 0
    }
    var isOdd : Bool { // 홀수 여부 확인
        return self % 2 == 1
    }
}





// [protocol 및 extension 정의 실시 : 클래스 외부에 선언]
protocol StringUtil {
    func isEqualsTo(_a : String) -> Bool
}
extension String : StringUtil { // protocol 몸체 구현 실시
    func isEqualsTo (_a : String) -> Bool{
        // 인풋으로 들어온 파라미터 데이터와 타입이 일치하는 경우
        if(self == _a){
            return true
        }
        else {
            return false
        }
    }
}





// [뷰 컨트롤러 클래스 부분]
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        // [메인 함수 호출 실시]
        testMain()
    }
    
     /*
     [요약 설명]
     1. 프로토콜(Protocol)은 특정 역할을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진입니다
     2. 프로토콜은 기능을 정의하고 제시 할 뿐이지 스스로 기능을 구현하지는 않습니다 (즉, 헤더만 정의)
     3. 프로토콜은 구조체, 클래스, 열거형 등에서 사용할 수 있습니다
     
     4. 익스텐션(Extension)은 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가할 수 있는 기능입니다
     5. 익스텐션은 타입에 새로운기능을 추가할 수 있지만,기존에 존재하는 기능을 재정의할 수는 없습니다(원본 수정 불가)
     6. 익스텐션을 통해 추가할 수 있는 기능은 연산 프로퍼티, 메서드, 이니셜라이저, 서브스크립트, 중첩 데이터 타입 등이 있습니다
     */
    
    
    // [테스트 메인 함수 정의 실시]
    func testMain() {
        print("[Program Start]")
        print("")
        
        // [protocol >> 상속 받은 클래스 호출 실시]
        let proClass = ReadClass()
        proClass.read_One()
        proClass.read_Two()
        print("")
        
        // [extension >> Int 형 호출 실시]
        let int_even : Int = 2
        let int_odd : Int = 3
        print("int_even 짝수 여부 : ", int_even.isEven)
        print("int_odd 짝수 여부 : ", int_odd.isEven)
        print("int_even 홀수 여부 : ", int_even.isOdd)
        print("int_odd 홀수 여부 : ", int_odd.isOdd)
        print("")
        
        // [protocol 및 extension 정의 호출 실시]
        print("a == a 같은지 확인 : ", "a".isEqualsTo(_a: "a"))
        print("a == b 같은지 확인 : ", "a".isEqualsTo(_a: "b"))
        print("")
        
    }

}

[결과 출력]


[요약 설명]

/*

[요약 설명]

1. 프로토콜(Protocol)은 특정 역할을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진입니다

2. 프로토콜은 기능을 정의하고 제시 할 뿐이지 스스로 기능을 구현하지는 않습니다 (즉, 헤더만 정의)

3. 프로토콜은 구조체, 클래스, 열거형 등에서 사용할 수 있습니다

4. 익스텐션(Extension)은 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가할 수 있는 기능입니다

5. 익스텐션은 타입에 새로운기능을 추가할 수 있지만,기존에 존재하는 기능을 재정의할 수는 없습니다(원본 수정 불가)

6. 익스텐션을 통해 추가할 수 있는 기능은 연산 프로퍼티, 메서드, 이니셜라이저, 서브스크립트, 중첩 데이터 타입 등이 있습니다

*/


 

반응형
Comments