티스토리 뷰

함수를 많이 만들고 함수의 기능이 점점 많아지고 연결된 다른 연산들이 많을 경우 함수로 진입하기 위한 조건과 종료할 때 처리해 줘야 할 일들이 점점 더 많이 생긴다. 그래서 이 두가지를 함수의 시작과 끝에서 처리해 주어야 하는데 swift는 이 동작을 위한 문법도 제공한다.

 

 

 

guard

if문과 거의 동일한 문법, 동일한 내용이다. 단, 함수 시작 부분에 함수 진입조건을 검사할 때 guard를 사용하면 다른 사람으로 하여금 코드를 다시 읽었을 때 함수의 진입조건이 무엇이고, 어디서부터 함수의 진짜 내용인지 쉽게 알 수 있게 한다.

함수의 시작이라고 했지만 실제 동작은 함수 맨 위에서부터 순서대로 실행하다가 guard를 실행한다. if의 경우 let으로 optional binding을 하면 if 밖에서는 바인딩한 변수에 접근할 수 없는 지역변수로 선언되는데, guard의 경우 optional 변수를 바인딩해도 guard 밖에서, 즉 함수 내에서 계속 사용할 수 있다.일반 if와 한가지 다른 점은 논리식이 if not 형태로 들어간다는 점이다.

func divide(op1: Double, op2: Double) -> Double {
	// return nil if op2 is 0.0
	guard op2 != 0.0 else {
		return nil
	}

	return op1 / op2
}

if let result = divide(op1: 5.0, op2: 0.0) {
	print("result : \(result)")
} else {
	print("second operand is zero")
}
// second operand is zero

op2가 0이기 때문에 나누기를 할 수 없어서 nil을 반환한다. guard의 조건식이 op2 != 0.0 else 인 것을 유의하자.

 

 

 

defer

함수를 종료할 때 swift 내부적으로 가장 마지막에 수행하는 명령들이 담기는 블록이다. 즉, defer로 묶인 코드는 그 위치가 어디에 있든, 함수 가장 마지막에 실행된다.함수 내부에서 파일을 열었을 때 등 사용하면 좋은 기능이다.

func writeToFile(word: String) {
	// open file...

	// write to file

	// defer run last of function
	defer {
		close(file)
	}

	// do something
}

 

 

 

우선순위

defer는 함수가 종료할 때 실행된다고 했는데 그럼 guard에 의해서 함수가 종료할 때는 어떻게 될까?

func priority(index: Int) {
	guard index > 0 else {
		print("index is lower than zero.")
		return
	}

	print("function work fine :)")

	defer {
		print("I am defer code")
	}
}

위 함수를 호출해 보면서 우선순위를 확인할 수 있다.

priority(index: 5)	
// function work fine :)	
// I am defer code

priority(index: -5)	
// index is lower than zero.

결과에서 알 수 있듯이 guard에 의해 함수가 종료되면 defer가 실행되지 않는다.

'Programming > Swift' 카테고리의 다른 글

Swift Beginner | 인터페이스  (0) 2020.11.18
Swift Beginner | 타입캐스팅 is as  (0) 2020.11.18
Swift Beginner | Closure  (0) 2020.11.18
Swift Beginner | 함수(2)  (0) 2020.11.18
Swift Beginner | 함수(1)  (0) 2020.11.18
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함