3.11 MVC 연결

Jay·2025년 2월 6일

Level 3 - SingleView App

목록 보기
11/24

Goal

모델,뷰,컨트롤러를 연결해보자.

Thinking First

우리는 앞서 뷰를 만들고 StopWatch라는 모델을 클래스로 설계해보았는데 이제 이들을 컨트롤러로 연결해야 한다.
모델과 컨트롤러는 어떻게 연결될까? 그리고 뷰와 컨트롤러는 어떻게 연결될까?

Making Next

뷰컨트롤러 클래스에 아래와 같이 프로퍼티를 만들어보자.

   let stopwatch = Stopwatch()

앞에서 클래스는 일종의 설계도이고 이것을 이용하려면 인스턴스화해야 한다는것을 배웠다.
Stopwatch() 는 Stopwatch 클래스의 인스턴스이며 이것을 stopwatch 라는 constant한 프로퍼티에 할당함으로써 Stopwatch라는 모델을 컨트롤러에서 컨트롤할 수 있게 되었다.

이제 뷰와 컨트롤러를 연결해보자.
뷰에는 Start, Stop 버튼이 있는데 사용자가 이들 버튼을 터치했을때 무언가 동작을 해줘야 한다.
각각의 버튼을 control 키를 누른 상태에서 뷰컨트롤러 클래스쪽으로 드래그&드롭 해보자.

그림과 같이 Connection은 Action 으로 바꾸고 Name 에 적당한 이름을 지어주자.

@IBAction func startButtonTapped(sender: UIButton) {
     stopwatch.start()
 }

@IBAction 이라는 키워드가 붙은 함수가 자동 생성되었다. @IBAction은 사용자가 어떤 특정한 Action을 취했을때 실행된다는 의미의 키워드이다. 버튼이기 때문에 터치 후 버튼 내부에서 띄었을때(Touch up inside)가 기본값으로 설정되어 있다. 각각의 버튼을 오른쪽 마우스버튼으로 클릭해보면 어떤 값으로 설정되어 있는지 확인 및 변경이 가능하다. 다른 버튼도 컨트롤러와 연결해보고 함수 내부에서 stopwatch 프로퍼티의 함수를 실행하도록 아래와 같이 구현해보자.

   @IBAction func startButtonTapped(sender: UIButton) {
    	     stopwatch.start()
   }
  
   @IBAction func stopButtonTapped(sender: UIButton) {
            stopwatch.stop()
   }

이제 뷰와 컨트롤러가 연결되었고 메서드 내부에서 모델을 컨트롤할 수 있게 되었다.

profile
Software Engineer Specialized on iOS

0개의 댓글