TIL (Today I Learn)

1-5. 함수

나새끼메이커 2025. 11. 18. 17:47
반응형

우선, 여기까지 따라오신 여러분, 잘 하셨다.

여기까지 적은 나, 나도 잘했다.

이런 인사를 하는 이유는 이 이후부터 좀 다른 마음가짐이 필요해서이다.

 

지금 내가 듣고 있는 것은 스파르타코딩클럽의 사전캠프이다.

사전캠프에서는 46개의 VOD를 제공한다.

이게 본 캠프가 아니어서인지, 아니면 개발자들이 워낙에 실용주의자들이라서 그런지 모르겠는데,

내가 원하는 만큼 체계적인 수업이 진행되고 있지는 않다.

그나마 앞선 기초문법 및 연산자는 정말 언어로 따지자면 알파벳에 해당하는 쌩기초라서

교육기관을 막론하고 동일한 커리큘럼일 것이라고 생각된다.

이 다음부터는 함수 수업이 시작되는데,

여기서부터는 void 타입은 무엇인지 설명하지 않은 채 'void 타입의 sayHello() 함수를 만들어볼게요' 하고 진행해버린다.

 

어떤 마음가짐으로 들어야 할 것인가.

그간 나는 old-fashioned 답게 필기하고 정리하며 머리 속에 입력해왔다.

그러나 설명 없이 일단 만들면서 시작해버리면 에러가 나기 쉽다.

이런 주저리를 적고 있는 것도 거부반응이리라.

 

그리하여 이후의 사전캠프 강의는, 콩나물에 물주듯, 물을 담고 있는 것이 아니라 물이 나를 스치고 지나가는 것을 목표로

하나하나 체계적으로 이해하기보다는 전체적인 흐름, 분위기를 파악하는 것을 목적에 두고 진행하고자 한다.

 

이후의 포스트가 빈약하다는 느낌이 든다면, 당신이 옳다.

나도 제대로 이해하지 못한 채, 분위기 파악용으로 적을 것이니.


 

 

함수란?
- 하나의 기능을 수행하는 코드 묶음.
- 필요할 때 호출하면 그 블록이 실행됨.

함수의 정의 방법
반환타입 함수명(매개변수) { 실행할 코드들 }
예시) void printName(String name) { print("안녕하세요 $name 입니다"); }

 

 

1. void

 

`void`는 Dart에서 아무 값도 돌려주지 않는다를 선언하는 타입이다.

쉽게 말하면 결과값 없이 실행만 한다는 것.

`int` 타입의 값은 정수, `String` 타입의 값은 문자열 등인 것과 달리,

`void`는 가진 값 자체가 존재하지 않는다.

단, Dart 문법에서는 모든 함수가 '반환 타입'을 가져야 하기 때문에

언어 구조의 일관성을 위해 `void`라는 타입을 두었다고 이해하면 된다.

이런 내용을 처음부터 이해하기란 어려운 일이므로 강의에서는 일단 패싱한 것이 아닐까 싶다.

 

 

예제 1. 매개변수(파라미터)가 없는 경우

[함수]

 

 

void sayHello() {
	print("안녕하세요");
}

void main() {
	sayHello();
}

 

[값]

안녕하세요

 

[독해]

반환 타입 : void --- 값 없이 실행만 한다

함수 이름 : sayHello()

매개 변수 : 없음 (소괄호 안이 비어있음)

실행할 코드 : print("안녕하세요");

 

 

예제 2.  매개변수(파라미터)가 있는 경우

파라미터라는 처음 보는 개념이 나왔다.

GPT에게 물어본다.

함수 파라미터 = "함수가 쓰려는 외부 입력값의 이름"
어떤 함수를 만든다 = 이 기능을 실행할 때 외부에서 뭘 받아야 하는가를 정한다
→ 그 받아오는 값을 표현하는 이름이 파라미터(parameter).

 

void say(String name) {
	print("안녕$name");
}

위의 예시에서는 `String name`이 파라미터다.

즉 함수 내부 로직이 사용하려고 예약해둔 변수 이름이다.

 

(+) 염병, 파라미터가 곧 매개변수인 거를 2시간 정도 끙끙대다가 눈치챘다.

그러나 이렇게 얻은 만큼 확실하게 내 것이 되었으리라.. 

 

 

[함수]

void printName(String name) {
	print("안녕하세요 $name 입니다");
}

void main() {
	printName("이지원");
}

 

 

[값]

안녕하세요 이지원 입니다

 

[독해]

반환 타입 : void --- 값 없이 실행만 한다.

함수 이름 : printName()

파라미터(매개 변수) : String name 

└ 매개 변수의 타입 : String

└ 매개 변수의 이름 : name

실행할 코드 : print("안녕하세요 $name 입니다");

아규먼트(인자): "이지원"

 

이 함수는 String name이라는 매개변수를 요구하므로, 함수를 호출할 때 반드시 해당 매개변수에 대응하는 인자를 전달해야 한다.

따라서 printName();처럼 인자를 생략한 호출은 불가능하며,

"이지원"과 같은 적절한 인자를 포함한 printName("이지원"); 형태로 호출해야 한다.

 

 

 

파라미터는 함수가 "무엇을 요구하는가"를 선언하는 문법적 장치이다.

파라미터가 있다는 것은 '이 함수가 수행되려면 이 정보가 반드시 필요하다'라는 의미 선언.

 

예)

  • void save(String fileName) → 저장하려면 파일 이름 있어야 함
  • void move(int dx, int dy) → 움직이려면 이동할 거리 필요함
  • bool validate(String password) → 비밀번호 검증하려면 비밀번호가 필요함

즉, 함수의 요구조건을 코드로 선언하는 부분이 파라미터이다.

 

 

그리고 이 함수를 호출할 때 실제로 보내는 "실제 값"은 아규먼트(argument)라고 한다.

 

void save(String fileName) {}
save("file1");

 

이러한 코드라면

String fileName 이 파라미터,

"file1" 이 아규먼트다.

 

파라미터 = 함수가 외부로부터 필요로 하는 입력값의 이름 (예: void save(String fileName))
아규먼트 = 함수를 호출할 때 실제로 보내는 값 (예: save("프로필파일")
파라미터는 함수의 요구조건을 정의하고, 함수 호출 시 자동으로 채워진다.

 

 

염병.
여기까지를 GPT랑 학습했다.
이게 맞냐?
캠프 학습을 이렇게 셀프로 하는 게 맞아????
교육 체계 어디갔어??

VOD에서는 이후에 파라미터의 종류들에 대해서 설명한다.

 

- 위치 기반 파라미터  Positinal Parameters : 순서대로 값을 전달해야 하는 방식

- 이름 있는 파라미터 Named Parameters : 파라미터의 이름을 명시적으로 지정해서 전달하는 방식

- 옵셔널 위치 파라미터 Optional Positional Parameters : 전달하지 않아도 되는 위치 파라미터

 

GPT 얘기를 들어보니, API를 끌어온다거나 로그인한다거나 이럴 때 쓰이는 파라미터인 것 같다.

지금 단계에서 알 필요는 없을 것 같아서 이런 게 있구나, 하고 넘어가기로 했다.

 

 

 

 

오늘의 TIL, 여기까지.

반응형