2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

[Swift-TIL] 함수 - 같은 동작을 하는 방법

2024. 10. 15. 01:56ㆍIOS/Swift-TIL
SMALL

이 글 이전엔 같은 코드를 방법하는 방법을 알아봤었는데,

이번엔 같은 동작을 하는방법에 대해 알아보자.

 

우선, 함수와 반복문이 서로 어떤 차이가 있는지 알아야겠다.

함수 하면 떠오르는게 뭔지 아는가?

이런 이미지 내용 어디서 많이 본적 있지않나?

음... 필자는 이런걸 초,중,고학교때 본 기억이 있는것 같다.

위에 이미지를 좀더 쉽게 풀어보면,

이러하게 그려진다.

 

함수 즉, 입력값, 출력값 그리고 함수 내용

이와 같은 구성으로써

입력값은 4에 출력값은 9

그리고 함수 내용에는 +5 이렇게 정리 하고

바로 이것이 같은 동작을 하는 방법의 핵심 포인트다.

입력 값이 뭐가 들어오던 간에 이는 같은 동작을 해준다.

즉, 같은 코드를 반복하는것이 아닌,

같은 동작을 하도록 도와주는것을 말한다.

 

예로 입력값이 1이 들어가던 2가들어가던 상관없이

+5가 되는것에는 변함이 없다.

 

똑같은 코드를 여러번 실행하는것과는 엄연히 다르다.

 

당연히 입력값에 따라서 출력값은 바뀐다.

1이 입력이 되면 6이 되고,

2가 입력이 되면 7이 되듯이

출력값과 입력값은 바뀔 수 있다는 것이다.

 

함수는 어떻게 만드는가?

 

이러한 형식으로 함수를 작성할 수 있다.

그런데,

아직 감이 잘 안와서 실제 코드로써 보고싶다.

아래 이미지는 위 이미지를 실코드화 해본 것이다.

이렇게 생각해 보면된다.

"이 함수는 어떤 동작을 하냐면~ 

PlusFive 하는구나~" 라고 생각하면 되는데,

그냥 이름이 그렇다는 것이다.

 

다음으로 매개변수 이름에는

"input 이라는 매개변수를 받는구나~

그리고 input은 int 정수이구나~" 라고 알면 된다.

그리고

실행할 코드로써

이렇게 작성하는데, 이 함수를 정리하자면..

"함수의 이름은 plusFive이고 정수를 입력 받는데,

받은 정수의 이름은 input 이고, 함수가 호출될 때마다

input에 5를 더한것을 출력해주는 것"으로 정리할 수 있다.

"저런 동작을 반복할 수 있는것이구나~" 라고 이해하면 된다.

 

함수는 자주 쓰는 코드에 변화를 시키고 싶은게 있다면

함수를 사용하는게 맞다는 것이다.

쉽게 말해서,

"4 + 5를 계속 하고싶다면 반복문"

"어떤것이 들어오던간에 5를 더하고 싶다면 함수"

이렇게 정리해보겠다.

 

함수는 반복문과는 다르게 값을 반환할 수 있다는 점이 있다.

함수의 특징이기도 하다.

return(리턴) 이라는 키워드를 사용해서

input + 5 를 반환해주면 된다. 

함수 간단 정리

 

간단 정리 이미지 간략 설명

func 함수임을 명시 → 함수이름 작성 → 매개변수 이름 (위에선 input이 들어갔죠?)

→ 그 종류 (위에선 int가 들어갔죠?) → 중괄호 열기부터 ("{ ") 닫기까지 ("}")

실행할 코드가 들어간다.

 

더 나아가 반환타입을 화살표 뒤에

"이게 반환될 거야~" 라고 선언해주면,

실제 return 뒤에 반환할 값을 넣어주어야 한다는 것이다.

 

위에선 int를 입력 받아서 int를 반환하기 때문에

input:int -> int 하고 return 하고 반환할 값에

숫자가 들어가 주어야한다.

 

만약 return 하고 변환할 값에 숫자가 아닌 문자가 들어가면,

타입오류가 나타나기 때문에 문제가 될 수 있다.

때문에 반드시 반환 타입과 반환 할 값은

같은 종류여야 한다는 점을 기억하자.

 

필자는.. 여기까지 배웠을때는

함수는 생각보다 깊은 우물과 같다고 느꼈다..

물론.. 지금도 그렇다...

 

짧게 실습을 해봤다.

이렇게 우선은 간단하게 만들어 보았다.

"+5" 라는 버튼을 누르면 숫자가 증가되는것을 보았는데,

필자는 이런 간단한 증가 버튼에 함수를 대입해보고자 한다.

이렇게 함수를 만들고 대입해봤다.

함수를 풀어보자면,

plusFive 라는 함수를 선언하고

input이라는 매개변수 이름으로 int(정수)를 받을 것이고

int를 반환하도록 해준다.

 

여기까지 본다면 우선,

함수 키워드가 있고, 이름이 있고,

입력받을 것을 정의 했고(input: int),

이미지 내 코드에서는 int를 입력 받을 것이고,

그 입력받은 int를 input이라는 변수에 담을 것이고,

출력값이 있죠?(-> int) 이 출력값은 어느 변수에 담는게 아니고

이 함수가 호출된 자리가 -> int 출력값으로 바뀐다는 것이다.

그래서 그 출력값 또한 정수이고, 반드시 반환을 해야한다는 것을

잊지말아야한다.. ^_^ ..

 

만약, 리턴을 하지 않는다면 아래와 같은 오류가 납니다.

쉽게말해 "-> int" 했으면서 왜 반환을 안해?

라고 하는거다 ㅋㅋㅋㅋ

이함수가 반환해야하는 값은 입력받은 값에 5를 더해주어야 하니

return input + 5 이렇게 작성해주었다.

그리고

버튼에 작성했던 inputNumber = inputNumber + 5 를

inputNumber = plusFive(with: inputNumber)

이렇게 작성하면 숫자가 5씩 올라가는 걸 볼 수 있다.

 

음.. 확실히 함수를 써보니 상당히

있어보이는 느낌이 든다..

함수에는 상당히 재밌는 기능이 있다고 한다.

함수 plusFive(input: Int) -> Int 부분에 input은 변수 이름인데,

이를 밖에서 부를때 뭐라 부를지 with를 적어주면 

이렇게 에러가 나는데,

이를 해석하면 input 이라고 적혀있는데,

with 라고 적어주길 기대해 라고 하고 있다.

 

 

그런데 한가지 의문점이 생긴다.

"이걸 굳이 왜 해?"

 

상당히 좋은 질문이다.

이미지에서 오류는 일단 무시하고

두 구문을 잘 보자.

 

밑에 부분을 실행했을 때 뭐가실행이 될지 감이 오지 않는다.

 

쉽게 말해서 가독성을 의미하는데,

윗 구문은 어떤게 어떻게 오는지 명확히 하고있는데,

아랫구문은 그런 부분이 많이 동떨어져 있다는 것이다.

 

그러니 with을 잘 쓰면 가독성이 확 뛴다는 점을

알아두면 좋을거다.

여기까지 함수를 정리해보겠다.

728x90