[iOS 3주차] 문제해결: 두 클래스간 참조 마음대로 하기?

황석범·2024년 11월 6일
0

내일배움캠프_iOS_5기

목록 보기
13/76

야구게임만들기 과제를 하다가 게임 중 포기(?)를 하고 다시 메뉴로 넘어가기 위한 기능을 구현하는 와중에 문제가 발생하였다.

두 클래스를 연결하는 법

야구게임만들기 과제를 하다가 두 클래스 간의 함수를 서로 호출 하고 싶어서 상속을 하여 super 를 사용하였더니 아래와 같은 에러가 발생하였다.


class BaseballGame: Main{
	func start()
		while
        ......
}

class Main{
	func start()
    	while
        .......
}

뭔가 계속 돌고 도는 느낌으로 에러가 발생한 느낌이 들었다.

그래서 방법을 찾아보니 두 가지 정도의 방법이 있었다.

  1. 클로저를 사용하는 방법
  2. Delegate 를 사용하는 방법

클로저

클로저 캡쳐를 사용하여...?

참조 -> https://wody.tistory.com/8


BaseballGame 클래스에 cancelGameHandler 를 반환 값이 없이 클로저로 선언해주고 호출해 주었다.


Main 클래스의 start() 함수를 클로저에게 할당해주었다(?)
강한 참조에 의한 순환을 막기 위해 [weak self] 를 사용하였다(?)


원하는대로 잘 된 것을 알 수 있다....


delegate

  • 델리게이트 패턴은 어떤 객체의 행동을 다른 객체에 위임하기 위해 사용되는 패턴입니다. iOS에서 자주 사용되며, 특정 객체가 해야 할 일을 다른 객체가 대신 처리하도록 할 수 있습니다. 이를 통해 코드의 재사용성을 높이고, 객체 간의 결합도를 낮출 수 있습니다.

예제:

delegate 를 사용해 위임(?)을 해줬다.

Main 클래스를 BaseballGame 클래스에게 위임(?)

BaseballGame 클래스(위임 받는 클래스?)에서 프로토콜로 정의

delegate 인스턴스 생성

BaseballGame 클래스에서 Main 클래스의 start() 함수 실행

똑같이 잘 구현되었다.

profile
iOS 공부중...

0개의 댓글

관련 채용 정보