함수는 여러 코드 또는 반복 사용되는 코드를 묶어둔 것이다.
void 함수이름() {
print("함수 실행코드입니다")
}
이런 형식으로 작성한다
작성한 함수를 호출하여 사용하려면
함수이름();
이런식으로 함수의 이름을 호출하여 사용하면 된다.
다음은 함수의 입력, 출력 기능을 추가했을 때의 방법도 알아보자
hello("영희");
void hello(String name) {
print(name + " 안녕?"); // 영희 안녕?
}
위는 입력값을 한개 받을 경우이다
"영희"라는 문자열 값을 name
변수로 받아서 함수가 동작한다.
입력값을 여러개 받는 방법도 있다.
hello("영희", "오늘 하루 어때?");
void hello(String name, String message) {
print("$name : $message"); // 영희 : 오늘 하루 어때?
}
위처럼 ,
를 이용해서 여러값을 받을 수 있다.
이때는 순서대로 매개변수 값이 전달된다.
매개변수의 이름을 지정해서 전달해 줄수도 있다.
hello(from: "영희"); // 변수명을 같이 작성
hello(); // 전달하지 않을 수도
void hello({String? from}) {
print("$from : 오늘 어때?");
}
4번째 줄에 중괄호가 씌워진 {String? from}
부분이 이름지정 매개변수(Named Parameter) 라고 불린다
그리고 이것은 함수 호출시 값을 전달하지 않아도 되므로 null이 될 수 있는 String?
으로 선언되었다
그러나 회원가입 시 입력하는 이메일처럼 꼭 입력이 필요한 경우가 있을것이다
그럼 null
값을 안받고 싶으면 어떻게 하면될까?
requred
라는 키워드를 사용하면 된다.
hello(from: "영희"); // 변수명을 같이 작성
void hello({required String from}) {
print("$from : 오늘 어때?");
}
required
키워드를 붙이이고 String?
을 String
으로 변경했다.
이렇게 하면 함수 호출시 필수적으로 해당 매개변수를 전달하게 된다.
입력을 알아봤으니 출력도 있겠죠?
String id = getId();
print(id); // myhan601
String getId() {
return "myhan601";
}
이String
은 최종적으로 반환하는 값의 타입
그리고 반환하고자 하는 값 앞에 return
을 적습니다
이렇게 하면 String id = getId();
부분에서 함수 호출 때 id 에 myhan601 값이 들어가게 됩니다.
입력과 출력을 할 줄 알게되었으니 둘을 동시에 해봅시다!
String coffee = getCoffee("바닐라");
print(coffee); // 바닐라라떼
String coffee(String material) {
return material + "라떼";
}
여기서 입력값으로 "바닐라" 가 들어가고
반환값에서는 String 값에 "라떼'를 붙여서 "바닐라라떼"를 반환한다
참 쉽죠?
클래스는 별수와 함수를 모아둔 틀입니다
class 클래스이름 {
}
이 처럼 작성합니다
변수에서 카멜케이스를 쓰는것과 달리 클래스는 파스칼케이스를 따릅니다
ex) class Bread {}
클래스는 3가지의 요소로 구성됩니다
속성(property)
: 클래스 내부 변수
메소드(method)
: 클래스 내부 함수
생성자(constructor)
: 클래스 명과 동일함 함수
class Latte {
String content = "바닐라"; // Latte 클래스가 가진 속성
}
class Latte {
String content = "바닐라";
// Latte 클래스가 가진 메소드
String getDescription() {
return "맛있는 $content라떼입니다."; // 맛있는 바닐라라떼입니다.
}
}
class Latte {
// 생성자
Latte() {
}
}
생성자는 반환타입을 명시하지 않습니다
또한 중괄호를 생략하여 쓸 수도 있습니다
class Latte {
// 생성자
Latte()
}
생성자 함수에 입력 값을 전달 받아 속성(property)에 넣어 줄 수도 있습니다
class Latte {
String? content;
// 생성자 호출시 core를 전달 받는다
Latte(String core) {
content = core; // 전달 받은 core를 content에 대입
}
}
이제는 그래도 제법 익숙해진 개념 인스턴스다
가장 많이 드는 예로 빵틀(클래스)로 찍어낸게 빵(인스턴스)이다.
생성자 함수를 호출해서 클래스에 정의된 프로퍼티와 메소드를 가진 객체 가 인스턴스
입니다!
간단한 예제로 살펴보죠!
void main() {
// 인스턴스 생성
Latte latte1 = Latte('딸기');
Latte latte2 = latte('바닐라');
// 프로퍼티 호출
print(latte1.content); // 딸기
print(latte2.content); // 바닐라
// 메소드 호출
print(latte1.getDecription()); // 딸기라떼입니다.
print(latte2.getDecription()); // 바닐라라떼입니다.
}
class Latte() {
// 프로퍼티
String? content;
// 생성자
Latte(String core) {
content = core;
}
// 메서드
String getDecription() {
return "$content라떼입니다.";
}
}
latte1
과 latte2
는 각각 Latte 클래스로 생성한 인스턴스입니다
따라서 Latte 클래스가 가지고있는 conent
프로퍼티와 getDecription()
메서드 를 똑같이 가지고있죠.
그래서 latte1.content
같이 호출하여 조회할 수 있습니다
상속도 클래스에서 중요하게 다루어지는 항목입니다
쉽게 말하면 다른 클래스B
의 프로퍼티와 메서드를 클래스A
에서도 사용할 수 있게 해주는 겁니다
그래서 물려받았다는 의미의 상속(extends) 라고 표현합니다
물려받은 클래스A
를 자식(child), 물려준 클래스B
를 부모(super)라고 합니다
void main() {
// 인스턴스 생성
IcedLatte icedStrawberryLatte = IcedLatte('딸기');
// 프로퍼티 호출
print(icedStrawberryLatte.content); // 딸기
// 메소드 호출
print(icedStrawberryLatte.getDescription()); // 시원한 딸기라떼입니다.
}
class Latte {
// 프로퍼티
String? content;
// 생성자
Latte(String core) {
content = core;
}
// 메서드
String getDescription() {
return "$content라떼입니다.";
}
}
class IcedLatte extends Latte { // Latte 클래스를 상속한 IcedLatte
// 생성자
IcedLatte(String core) : super(core);
// 메서드 오버라이드
String getDescription() {
return "시원한 $content라떼입니다.";
}
}
간단한 예시를 작성해봤습니다
이전에 사용한 Latte
클래스를 IcedLatte
클래스가 상속을 받고있군요
다른건 이전과 비슷한데 IcedLatte
클래스에서 다른점이 보입니다
super
와 @override
라는 키워드가 보이네요
super
키워드는 부모 클래스의 구성 요소들에 접근할 때 사용합니다
IcedLatte(String core) : super(core);
여기서 super(core)
는 super
를 사용해서 Latte
클래스의 생성자에 core
값을 전달합니다
IcedLatte
가 Latte
의 content 프로퍼티를 초기화할 수 있도록 해주죠
override
키워드는 부모클래스의 메서드를 자식 클래스에서 재정의 할때 쓰입니다
getDescription() {
return "시원한 $content라떼입니다.";
}
String
위 코드에서 @override
키워드를 통해 부모 클래스의 메서드를 재정의하여
자식 클래스만의 버전을 만듭니다.
그래서 getDescription()
메서드의 내용이 달라진것이죠
이렇게 기본적인 dart 문법에 대해서 간략히 알아보고 정리했습니다
이제 실습 문제만 몇개 풀어보고 예제 앱 제작을 시작할거같네요