라티의 작은 일기장

[3일차] 구조체와 클래스 본문

Swift

[3일차] 구조체와 클래스

코드라티 2023. 2. 22. 23:34

Swift 기본 문법 정도는 3일만에 끝낸 다음 바로 앱 개발 실습에 들어가야겠어!!! 

...라는 초심이 있었지만, 현실과의 타협에 그것이 야망에 불과했다는 것을 깨닫고, Swift 문법을 다루는 Chapter 1을 돌아오는 일요일까지 마무리하는 계획으로 수정하며 오늘의 공부를 시작.

비요뜨는 참 맛난 간식이다

구조체와 클래스?

음, C언어와 Java 등을 공부했다면 꼭 들어봤을 키워드이다.

C언어에서 구조체멤버 변수를 포함하고 있는 새로운 형태의 변수라고 기억하고 있고, Java에서 클래스는 보통 객체 등을 정의하기 위해 필드와 메소드 등을 정의하는 하나의 논리 덩어리라고 기억하고 있다. (오류가 있다면 지적 부탁드립니다)

 

그렇다면 Swift에서 클래스와 구조체는 어떤 것이 동일하고 어떤 것이 다른 것일까?

Swift에서 클래스와 구조체는 사용법과 문법이 거의 유사하지만,

구조체의 인스턴스는 value 타입이고 클래스의 인스턴스는 reference 타입이라는 차이점이 존재한다.

여기서 인스턴스는, 구조체와 클래스를 실제로 활용하기 위해 메모리에 올려놓은 실제 데이터를 의미한다.

 

구조체의 기본 구조는 다음과 같다.

struct 구조체 이름 {
	프로퍼티와 메소드
}

Java와 C가 미묘하게 섞인 느낌인데, 프로퍼티는 자바에서의 필드에 해당한다.

그럼 이제 기본적인 사용법을 알아보자.

struct User {
    var nickname: String
    var age: Int
}

var user = User(nickname: "Rati", age: 25)

우선 인스턴스는 다음과 같이 선언하여 사용한다. 구조체의 이름을 명시하고 멤버 변수의 초기값을 설정해주는 것이 Java에서 생성자 함수에 의해 객체를 생성하는 것과 매우 닮아있다.

 

이렇게 생성된 인스턴스는 메모리에 올라온 실제 데이터이기 때문에, 참조를 통해 변경이 가능하다.

이렇게 인스턴스 뒤에 .을 붙이고 해당 멤버 변수의 이름을 적어주면, C언어에서 그러했듯 멤버 변수를 간단하게 참조할 수 있다.

멤버 변수는 값을 할당하여 변경이 가능하고, 변경된 데이터는 다시 참조해보면서 실제로 변경되었는지 확인해 볼 수 있었다.

구조체의 멤버는 변수로 한정되지 않고, 함수도 선언해줄 수 있다.

struct User {
    var nickname: String
    var age: Int
    
    func info() {
        print("\(nickname) , \(age)")
    }
}

이렇게 멤버 변수의 값을 출력해주는 info() 함수를 구현해주고, 위에서 다루었던 코드를 포함해 함수를 호출하는 코드를 작성하면 ...

이렇게 정상적으로 출력되는 것을 확인할 수 있다.

 

자, 이제 클래스에 대해 알아보자.

우선 기본 형태는 구조체와 매우 유사하다.

 class 클래스 이름 {
 	프로퍼티와 메소드
 }

강아지의 이름과 나이 정보를 포함하는 클래스를 작성한 실제 코드를 확인하면 구조체와 차이점을 하나 발견할 수 있다.

class Dog {
    var name: String = ""
    var age: Int = 0
    
    init() {
    }
    
    func intro() {
        print("name: \(name), age: \(age)")
    }
}

var dog = Dog()

바로 인스턴스를 생성하려면 init() 이라고 하는 생성자 함수가 꼭 필요하다는 점이다.

그런데 저 init()은 따로 코드로 명시해주지 않아도 컴파일러가 자동으로 생성해준다.

그래서 클래스 인스턴스는 마지막 코드처럼 클래스 이름만 명시해주면 된다.

나머지 내용은 구조체와 동일하다.

참조 연산자 .을 통해서 프로퍼티를 참조 및 변경할 수 있고, 클래스에 정의된 멤버 함수를 호출하여 사용할 수 있는 점까지 모두 같다.

 

오늘의 공부는 여기까지~

 

패스트캠퍼스 바로가기 : http://bit.ly/3Y34pE0

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

> 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

'Swift' 카테고리의 다른 글

[6일차] 상속  (0) 2023.02.25
[5일차] 프로퍼티  (0) 2023.02.24
[4일차] 초기화 구문 init()  (0) 2023.02.23
[2일차] 옵셔널과 옵셔널 바인딩  (0) 2023.02.21
[1일차] Swift 기본 문법 공부 및 첫인상  (0) 2023.02.20