본문 바로가기

문법관련40

함수(1) (꼼꼼한 재은 씨의 Swift : 문법편) 사용자 정의 함수 사용자 정의 함수를 정의하는 형식은 다음과 같다. -기본적인 함수- func 함수이름(매개변수1: 타입, 매개변수2: 타입) -> 반환타입 { 실행내용 return 반환값 } -매개변수가 없는 함수- func 함수이름() -> 반환타입 { 실행내용 return 반환값 } -반환값이 없는 함수- func 함수이름(매개변수1: 타입, 매개변수2: 타입) { 실행내용 } 💡 함수이름 - +, -, *, / 과같은 연산자는 사용불가하다. 사용자 정의 함수를 정의한 예시를 살펴보자. -함수의 예시- //매개변수x 반환값x func printHello() { print("안녕") } //매개변수x 반환값o func sayHello() -> String{ let value = "안녕" return .. 2022. 5. 25.
익스텐션 (꼼꼼한 재은 씨의 Swift : 문법편) 익스익스텐션(Extensions)은 이미 존재하는 클래스나 구조체, 열거형 등의 객체에 새로운 기능을 추가하여 확장해주는 구문이다. 익스텐션을 통해서 구현할 수 있는 것들은 대표적으로 아래와 같다. 1. 새로운 연산 프로퍼티를 추가할 수 있다. 2. 새로운 메소드를 정의할 수 있다. 3. 새로윤 초기화 구문을 추가할 수 있다. 4. 기존 객체를 수정하지 않고 프로토콜을 구현할 수있다. (프로토콜은 다음편에서...) 이번편에서는 1 ~ 3까지만 다루어볼 예정이다. (4는 다음 편에) 익스텐션을 사용할 때는 아래와 같이 사용한다. extension { //code } 위의 형태에서 볼 수 있듯이, 익스텐션을 extension 키워드를 사용할 뿐 독립적인 객체를 생성하는 구문이 아니다. 따라서 익스텐션을 객체.. 2022. 5. 19.
열거형 (꼼꼼한 재은 씨의 Swift : 문법편) 열거형이란 하나의 주제로 연관된 데이터들이 멤버로 구성되어 있는 자료형 객체를 말한다. 열거형에서 데이터들은 열거형 객체를 정의하는 시점에 함께 정의된다. 따라서, 데이터를 함부로 삭제하거나 변경할 수 없다. 삭제하거나 변경하려면 객체를 정의하는 구문을 직접 수정해야한다. 열거형의 데이터 멤버들은 정의 개념으로 작성되는 것이므로 타입으로 사용할 수 있을 뿐만 아니라 컴파일러가 미리 인지할 수 있다. 컴파일러가 미리 인지할 수 있고 없고의 차이는 런타임(Run - Time)오류와 컴파일 오류의 차이로 나타난다. 즉, 열거형을 이용하여 데이터 타입을 정의하고 사용하면 오타나 실수가 발생했을 때 그 즉시 컴파일러가 오류를 찾아주므로 잘못된 점을 바로 확인할 수 있다.(컴파일 오류) 하지만 집단 자료형을 사용해.. 2022. 4. 11.
옵셔널과 옵셔널 체인 (꼼꼼한 재은 씨의 Swift : 문법편) 옵셔널 체인을 배우기전 옵셔널에 대한 기본적인 지식을 학습해보자. (출처) Swift에서는 프로그램의 안정성을 높이기 위해서 오류 대신 nil 값을 반환함으로써 개발자에게 문제가 있다는 사실을 알린다. 여기서 nil은 "값이 없음"을 의미한다. 그렇다면 옵셔널이란 무엇일까? 옵셔널이란 값이 없을 수도 있는 상황에서 사용한다. 이때 값이 없다는 것은 nil을 의미하는데 이 nil을 반환하기 위해 필요한 것이 옵셔널이다. 오직 옵셔널 타입만이 nil을 반환할 수 있다. 따라서 오류 발생의 가능성이 조금이라도 있으면 옵셔널로 정의해야 한다. 옵셔널 타입이란 무엇인가? 옵셔널은 nil이거나 nil이 아닌 값만 가질 수 있다. - nil: 실행 과정에서 오류가 발생했을 때 - nil이 아닌 값: 오류가 발생하지 .. 2022. 4. 10.
초기화 구문 (꼼꼼한 재은 씨의 Swift : 문법편) 구조체나 클래스는 모두 정의된 내용을 그대로 사용할 수는 없다. 항상 인스턴스를 생성해서 메모리 공간을 할당받은 다음에 사용해야한다. 이 과정을 바로 초기화라고 한다. 초기화 과정에서 가장 중요한 것은 저장 프로퍼티이다. 모든 저장 프로퍼티는 인스턴스 생성과정에서 초기화되어야하며 이를 위해서 반드시 초기값이 지정되어 있어야한다. 모든 저장 프로퍼티에 초기값이 지정되어 있다면 기본 초기화 구문을 사용하여 인스턴스를 생성할 수 있다. Resolution() Video() SUV() Car() Vehicle() 하지만 우리는 초기화를 배울때 위의 기본 초기화 구문말고 멤버와이즈 초기화 구문이라는 것을 배웠다. 이것은 구조체에서만 사용할 수 있는데 아래의 예제를 살펴보면서 다시 한번 이해해보자. struct R.. 2022. 4. 9.
타입 캐스팅 (꼼꼼한 재은 씨의 Swift : 문법편) 부모 클래스로부터 상속된 자식 클래스는 자기 자신의 타입이기도 하면서, 동시에 부모 클래스의 타입이기도 하다. 이는 부모 클래스의 특성들을 물려받았기 때문으로, 메소드를 오버라이딩했더라도 컴파일러가 클래스의 형태에서 중요하게 여기는 메소드의 이름, 매개변수의 타입 그리고 반환타입이 바뀌지 않는 한 클래스 형식이 달라진 것은 아니다. class Vehicle { var currentSpeed = 0.0 func accelerate() { self.currentSpeed += 1 } } class Car: Vehicle { var gear: Int { return Int(self.currentSpeed / 20) + 1 } func wiper(){ // 창을 닦는다. } } let trans: Vehicle.. 2022. 4. 9.
상속 (꼼꼼한 재은 씨의 Swift : 문법편) 클래스와 구조체의 구분되는 특성 중 하나로 상속(Ingeritance)이라는 것을 들 수 있다. 이는 말 그대로 하나의 클래스가 다른 클래스에게 무엇인가를 물려줄 수 있다는 말이다. 일반 사회 현상에서의 상속과 프로그래밍에서의 상속을 보면 아래와 같다. 일반 사회 - "아들이 아버지로부터 재산을 물려받았다." 프로그래밍 - "Child클래스가 Father클래스를 상속한다." 이 관계를 통해서 객체지향에서 상속을 정의하면 "한 클래스가 다른 클래스에서 정의된 프로퍼티나 메소드를 물려받아 사용하는 것" 과 같다. 상속을 사용하면 이미 만들어진 다른 클래스의 기능이나 프로퍼티를 직접 구현하지 않고도 사용할 수 있다. 다만, 추가로 필요한 기능이나 프로퍼티만 정의하여 사용하면 된다. 이때 기능이나 프로퍼티를 물.. 2022. 4. 3.
메소드 (꼼꼼한 재은 씨의 Swift : 문법편) 메소드는 일종의 함수로서, 클래스나 구조체, 열거형과 같은 객체 내에서 함수가 선언될 경우 말한다. 즉, 메소드는 특정 타입의 객체 내부에서 사용하는 함수라고 할 수 있다. 이 둘의 차이점은 구현 목적이 가는 독립성과 연관성에 있다. 함수는 독립적인 기능을 구현하기 위해서 만들어지는 것이지만, 메소드는 하나의 객체 내에 정의된 다른 메소드와 서로 협력하여 함수적인 기능을 수행한다. 메소드는 크게 인스턴스 메소드와 타입 메소드로 구분된다. 객체의 인스턴스를 생성해야 사용할 수 있는 인스턴스 메소드, 객체의 인스턴스를 생성하지 않아도 사용할 수 있는 타입 메소드이다. 따라서 인스턴스 메소드는 객체 타입 자체로는 호출할 수 없고 반드시 인스턴스를 생성한 후에 호출할 수 있다는 점에서 타입 메소드와 다르다. [.. 2022. 4. 2.
프로퍼티 (꼼꼼한 재은 씨의 Swift : 문법편) 아프로퍼티를 우리말로 번역하면 값을 저장하기 위한 목적으로 클래스와 구조체 내에서 정의된 변수나 상수라고 되어있지만 이는 프로퍼티가 하는 역할의 일부만 설명한 것이다. 프로퍼티의 역할은 클래스나 구조체에서 프로퍼티가 하는 정확한 역할은 값을 제공하는 것이다. 값을 제공하는 것과 저장하는 것은 어떤 차이가 있을까? 값을 저장하는 것이 아니라 제공하는것에 목적이 있다는 것은 프로퍼티중 일부는 값을 저장하지는 않지만 제공하는 특성을 가지고 있다는 것이다. 위에서 설명한거 처럼 프로퍼티에는 값을 저장x + 제공하는 것과 저장 + 제공하는 것이 있는데 이때 저장 + 제공하는 것을 저장 프로퍼티, 저장x + 제공하는 것을 연산 프로퍼티라고 한다. [저장 프로퍼티 vs 연산 프로퍼티] 저장 프로퍼티 1. 입력된 값을.. 2022. 3. 31.
구조체와 클래스의 기본 개념 (꼼꼼한 재은 씨의 Swift : 문법편) [용어 정리] 1. 프로퍼티: 구조체나 클래스 내부에서 정의된 변수나 상수 2. 메소드: 구조체나 클래스 내부에서 정의된 함수 3. 멤버: 프로퍼티, 메소드를 합해서 칭하는 용어 [구조체와 클래스의 공통점] 1. 프로퍼티: 변수나 상수를 사용하여 값을 저장하는 프로퍼티를 정의할 수 있다. 2. 메소드: 함수를 사용하여 기능을 제공하는 메소드를 정의할 수 있다. 3. 서브스크립트: 속성 값에 접근할 수 있는 방법을 제공하는 서브스크립트를 정의할 수 있다. 4. 초기화 블럭: 객체를 원하는 초기 상태로 설정해주는 초기화 블럭을 정의할 수 있다. 5. 확장: 객체에 함수적 기능을 추가하는 확장 구문을 사용할 수 있다. 6. 프로토콜: 특정 형싱의 함수적 표준을 제공하기 위한 프로토콜을 구현할 수 있다. [클래.. 2022. 3. 29.