함수(Function)와 제네릭(Generics)

Eungae's avatar
Dec 10, 2025
함수(Function)와 제네릭(Generics)

함수(Funciton)

특정한 작업을 수행하는 코드를 블록으로 만든 것. 일종의 모듈 이라고 이해하고 있다.
→ 입력에 따라 특정한 작업을 수행하고, 그 작업에 대한 결과를 반환하는 코드 블록
`반환 타입` `함수 이름` (`매개변수 타입` `매개변수 이름`) {return `반환값`}
예시
// 예시1. void printName() { print("침착맨"); } /* 반환타입: void -- 함수가 값을 반환하지 않는 경우 `void` 사용 함수이름: printName 매개변수: 없음 반환값: 없음 */ // 예시2. bool isOddNumber(int number) { return number % 2 != 0; } /* 반환타입: bool -- true || false 값을 반환 함수이름: isOddNumber 매개변수 타입: int 매개변수 이름: number 반환값: number % 2 != 0; */ // 예시3. bool isNull(int? number) { return number == null; } /* 반환타입: bool 함수이름: isNull 매개변수 타입: int? 매개변수 이름: number 반환값: number == null */

타입 추론을 활용한 축약형 함수 — 지양할 것

함수를 만들 때에도 타입추론이 가능하기 때문에 voidbool, int 와 같은 타입을 작성하지 않더라도 동작하기는 한다. Dart 공식 문서에서는 이 방법은 추천하지 않으니, 지양할 것.
printName() { print("name"); } isOddNumber(number) { return number % 2 != 0; }

축약형 표현식 =>

반환값을 하나의 표현식으로 나타낼 수 있는 경우 => 로 축약하여 표현 가능
bool isOddNumber(int number) => number % 2 != 0; int multiply(int a, int b) => a * b;
 

호출

함수의 이름으로 호출할 수 있다.
void printName() { print("name"); } printName(); // name
bool isOddNumber(int number) { return number % 2 != 0; } void main () { print(isOddNumber(3)); } // true
void main() { int add (int a, int b) => a + b; int sum = add(2, 4); print(sum); } // 6
 
 

제네릭 (Generics)

클래스나 함수에서 데이터 타입을 일반화하여 다양한 타입을 지원할 수 있게 하는 기능
`타입 파라미터` `함수이름`<`타입파라미터`>(`매개변수`) { ... }
예시
T getFirstElement<T>(List<T> list) { return list[0]; }
타입 파라미터는 보통 영어 대문자 한 글자로 표현한다.
실제 코드를 실행할 때 타입 파라미터 자리에 실제 데이터 타입을 넣으면 된다.
타입에 의존하지 않고 여러 타입에 대해 동일한 코드를 적용할 수 있으므로 효율 좋은 코드!
int getFirstNumber(List<int> numbers) { return numbers[0]; } String getFirstWord(List<String> words) { return words[0]; } void main() { var numbers = [0, 1, 2, 3]; print(getFirstNumber(numbers)); // 0 var words = ['a', 'b', 'c']; print(getFirstWord(words)); // a }
이상의 코드를
T getFirstElement<T>(List<T> list) { return list[0]; } void main() { var numbers = [0, 1, 2, 3]; print(getFirstElement(numbers)); // 0 var words = ['a', 'b', 'c']; print(getFirstElement(words)); // a }
요렇게 쓸 수 있다는 것!
 
 

실습

📢
이름을 매개변수로 전달 받아서 “안녕하세요, OO님”을 반환하는 함수를 만드세요.
 

trial 1. — fail : 반환값 없는 함수

void main() { String hi(String name) { print("안녕하세요, $name님"); } print(hi("이카리 신지")); } /* error : The body might complete normally, causing 'null' to be returned, but the return type, 'String', is a potentially non-nullable type.
코드가 작동하지 않은 이유는: 본 코드에서 함수 Hi는 반환값을 갖지 않기 때문이다.
reture 반환값 의 구조 없이 print가 사용되어 반환값이 없는 코드인 셈.
print를 유지하고 void를 사용하면 해결할 수 있을까? : trial 2
String을 유지하고 return을 사용하면 해결할 수 있을까? : trial 3
 

trial 2. void를 사용하여 반환값 없는 함수 생성

void main() { void hi(var name) { print("안녕하세요, $name님"); } hi("이카리 신지"); } // 안녕하세요, 이카리 신지님
여기서 재미있었던 것은 hi라는 함수 자체에 print가 들어있기 때문에,
print(hi(”이카리 신지”)); 가 아닌 hi;로 호출이 끝나버린다는 점이다.
처음에는 print(hi("이카리 신지")); 를 계속 시도했는데 안 돼서; GPT에게 물어봤다.
어떻게 보면 가장 깔끔한 구조일 듯.
 

trial 3. String을 유지하고 return을 사용

void main() { String hi(var name) { return "안녕하세요, $name님"; } print(hi("아야나미 레이")); } // 안녕하세요, 아야나미 레이님
음- 이해한 것 같다.
Share article

나새끼메이커