본문 바로가기

스위프트

스위프트 튜토리얼(9) - Class, 클래스(1)

youtu.be/Ulp1Kimblg0?t=5237

이 포스팅은 위 영상을 보고 작성한 포스팅이다. (01:27:16~01:38:36)

 

Class라는 것을 배워볼 텐데 아주 중요한 파트라고 할 수 있다. 앱을 만들 거라면 핵심 파트라고 해도 과언이 아니다.

블로그 글을 하나 작성한다고 가정해보자. 그렇다면 제목이 필요할 것이고, 글 내용이 필요할 것이고, 글쓴이가 필요할 것이다.

이를 스위프트 변수로 나타내면 다음과 같다.

var blogTitle = "Hello, playground"
var blogBody = "Text of the article"
var blogAuthor = "Chris Ching"

 

만약에 블로그 글을 하나 더 쓴다고 하면 다음과 같이 변수의 이름을 바꿔서 세 개의 변수를 추가로 선언해야 될 것이다.

var blogTitle2 = "Good, playground"
var blogBody2 = "Text of the article"
var blogAuthor2 = "Chris Ching"

만약에 10개, 100개 그 이상의 블로그 글을 작성해야 한다면 위와 같이 작성해야 되는 것이 맞는가 생각해보자. 효율적이다고 말할 수는 없을 것이다. 세 개의 변수를 하나로 묶어서 관리하는 것. 그것이 Class(클래스)이다.

 

우리는 String, Int와 같은 Data Type에 대해서 배웠다. 클래스를 통해서 기존 Data Type이 아닌 새로운 Data Type을 만들어 낼 수 있다. 

그럼 BlogPost라는 DataType을 만들어 보자. 클래스의 기본적인 형태는 다음과 같다.

class name {

}

class라고 이름을 한 칸 띄우고 오른쪽에 써준다. 이 이름은 클래스의 이름이자 DataType의 이름이 될 것이다. 그리고 이름 다음 중괄호를 넣어준다. 그러면 바로 실전으로 들어가 보자. 클래스를 정의해보자.

class BlogPost{
  var title = ""
  var body = ""
  var author = ""
}

 

Swift에서 모든 데이터 타입은 대문자로 시작하기 때문에 그 규칙을 따라서 제일 앞은 대문자로 표기한다. 함수나 변수, 상수의 이름을 표기할 때와는 다르다. 

 

위에서 정의한 클래스는 이름은 BlogPost이고 세 가지 변수를 가지고 있는데 클래스 안에 있는 변수는 Property(프로퍼티)라고 부른다. 즉, 세 가지 프로퍼티를 가지고 있다. 위 클래스는 데이터 타입을 명시한 것이지 데이터가 아님을 기억하자. 그럼 이 데이터타입을 가지고 데이터, 즉 블로그 포스트를 만들어보자. 만드는 방법을 설명하기 위해 다음 예시를 보도록 하자.

BlogPost()

클래스를 이름을 적고, 괄호를 적어주면 해당 데이터 타입의 데이터가 생성된다. 여기서 생성된 데이터는 Object(객체)라고 불린다.

 

클래스와 객체에 대한 정의는 다음과 같다.

 

A class definition is a like a template or blueprint.

When you create an actual tangible instance of the class, that instance is called an "object"

 

짧은 영어로 번역해보자면

"class는 템플릿, 청사진 같은 것이고, 클래스를 통해서 인스턴스를 만들어내면 그것을 오브젝트라고 부른다."

라고 할 수 있는데 다시 짧은 의역으로 풀어보자면

 

"클래스를 통해서 만든 데이터는 object라고 불린다." 정도라 할 수 있겠다.

 

사실 불리는 이름은 되게 많은데 굳이 나열해보자면, "객체", "오브젝트", "인스턴스" 등이 되겠다. 이 세 개는 같은 거라 생각하여도 사실 무방할 것 같다.

 

다시 예시로 돌아가서, 다음과 같이 코드를 작성해보자.

class BlogPost{
  var title = ""
  var body = ""
  var author = ""
}

let myPost = BlogPost()

myPost라는 상수에 BlogPost 객체를 생성해서 넣고 있다.

객체 안의 title, body, author값은 다음과 같이 바꿀 수 있다.

myPost.title = "Hello Playground"
myPost.author = "Chris Ching"
myPost.body = "Hello"

 

프로퍼티를 출력하려면 다음과 같이 작성하면 된다.

print(myPost.author)

 

다른 블로그 포스트 객체를 생성하고 프로퍼티 입력을 하려면 다음과 같이 하면 된다.

let mySecondPost = BlogPost()
mySecondPost.title = "Goodbye Playground"
mySecondPost.author = "John Travolta"
mySecondPost.body = "Hello"

 

클래스 안에는 함수도 넣을 수 있다. 클래스를 업그레이드를 해보자. 다음 예시를 보자.

class BlogPost{
  var title = ""
  var body = ""
  var author = ""
  var numberOfComments = 0
  func addComment(){
  	numberOfComments += 1
  }
  
}

위와 같이 클래스를 바꾸면 이 클래스를 사용해서 만들었던 객체들도 함수를 가지게 된다. 아래 예시를 보자.

 

 

class BlogPost{
  var title = ""
  var body = ""
  var author = ""
  var numberOfComments = 0
  func addComment(){
  	numberOfComments += 1
  }
}

let myPost = BlogPost()
myPost.title = "Hello Playground"
myPost.author = "Chris Ching"
myPost.body = "Hello"
myPost.addComment() // numberOfComments 1 증가
print(myPost.numberOfComments) // 1 출력

프로퍼티를 입력할 때와 같은 형태로 myPost.addComment()라고 쓰면 된다. 코드 실행 결과 numberOfComments값이 1 증가한다.

 

let mySecondPost = BlogPost()
mySecondPost.title = "Goodbye Playground"
mySecondPost.author = "John Travolta"
mySecondPost.body = "Hello"
print(mySecondPost.numberOfComments) // 0 출력

mySecondPost객체는 addComment 함수를 실행하지 않았기 때문에 numberOfComments값은 0이 된다. 같은 클래스를 통해 만들어진 객체이더라도 다른 객체에는 영향을 주지 않는다는 것을 명심하자.