절차지향언어(Procedural Programming)
절차지향 프로그래밍에 쓰이는 언어를 절차지향언어라고 하며, 대표적인 예로는 c언어가 있습니다.
절차지향언어는 개체를 순차적으로 처리하여 프로그램 전체가 유기적으로 연결되어야 합니다. 자동차 제조를 예로 들자면, 자동차는 엔진, 차체, 핸들, 의자, 바퀴 순으로 차례대로 만들어져야 합니다. 서로 분리되어도 안 되고 , 순서가 틀려도 안 됩니다. 절차지향언어의 구조는 컴퓨터의 처리구조와 유사합니다. 따라서 실행 속도가 빠르다는 것이 장점입니다. 단점으로는 유지보수의 어려움과 엄격하게 순서가 정해져 있어 비효율적입니다.
객체지향언어(Object-oriented Language)
먼저 객체란 구체적인 사물, 혹은 사람이 될수도 있고 추상적인 개념이 될 수도 있는 무언가입니다. 컴퓨터로 예를 들자면, 컴퓨터에 쓰이는 모든 부품(모니터, 키보드, 스피커 등)과 컴퓨터가 제공하는 모든 기능(화면이 켜짐, 소리가 남 등)이 전부 객체입니다.
객체지향언어란 프로그램을 다수의 객체로 만들고, 이들끼리 서로 상호작용하도록 만드는 프로그래밍 언어입니다. 컴퓨터의 모든 부품을 적절히 연결하고 조립해서 컴퓨터가 제대로 작동하도록 만드는 것이라고 볼 수 있습니다.
Dart는 진정한 객체 지향 언어이므로 함수도 객체이며 타입이 Function입니다. 이는 함수를 변수에 할당하거나 다른 함수에 인수로 전달할 수 있음을 의미합니다.
// String sayHello(String name){
// return "Hello $name nice to meet you";
// }
// void sayHello(String name){
// print("Hello $name nice to meet you");
// }
String sayHello(String name) => "Hello $name nice to meet you";
num plus(num a, num b) => a + b
void main(){
print(sayHello('chan'));
}
void는 이 함수가 아무것도 return 하지 않는다는 의미이다.
fat arrow syntax는 곧바로 return 하는 거랑 같은 의미이다.
named argument를 생성하는 두 가지 방법
null safety 때문에 default value를 줘서 만들 수 있고 required modifier를 이용해서 필수 값으로 만들 수 있다.
String sayHello(String name, int age, String country) => "Hello $name, age: $age, country $country";
void main(){
print(sayHello("chan", 25, "korea"));
}
String sayHello({
String name = 'chan',
int age = 27,
String country = 'korea'
}) => "Hello $name, age: $age, country: $country";
void main(){
print(sayHello());
}
String sayHello({
required String name,
required int age,
required String country
}) => "Hello $name, age: $age, country: $country";
void main(){
print(sayHello(
name: "chan",
age: 27,
country: "korea",
));
}
Named paremeters는 명시적으로 required로 표시되지 않는 한 선택 사항입니다. 기본 값을 제공하지 않거나 Named parameters를 표시하지 않으면 해당 유형은 기본값이 null이 되므로 null을 허용해야 합니다. required을 null safety를 적용할 수 있다.(required를 쓰면 값이 반드시 있어야 한다.)
1. 초기값을 설정할 수도 있다.
2. required를 통해 꼭 값을 요 구할 수도 있다.
3. {}를 통해서 변수 : value값을 직관적으로 대입할 수 있다.
parameter에는 두 가지 종류가 있다.
1. positional parameter
2. named parameter -> 사용할려면 {} 감싸 줘야 한다.
String sayHello(String name, int age, [String? country = 'cuba']) =>
'Hello $name, you are $age years old from $country';
void main() {
var result = sayHello('chan', 20);
print(result);
}
Dart에서 []은 optional, positional parameter를 명시할 때 사용된다.
name, age는 필수값이고 []를 통해 country를 optional값으로 지정해줄 수 있다.
String capitalizeName(String? name) {
if (name != null) {
return name.toUpperCase();
}
return 'ANON';
}
void main() {
print(capitalizeName('nico'));
print(capitalizeName(null));
}
String capitalizeName(String? name) =>
name != null ? name.toUpperCase() : 'ANON';
void main() {
print(capitalizeName('nico'));
print(capitalizeName(null));
}
void main() {
String? name;
name ??= 'nico';
name = null;
name ??= 'another';
print(name);
}
String capitalizeName(String? name) =>
name?.toUpperCase() ?? 'ANON';
void main() {
print(capitalizeName('nico'));
print(capitalizeName(null));
}
??(QQ)의 뜻은 만약 왼쪽의 있는 값이 Null이라면 오른쪽 값을 returnt 시킨다는 것이다. 쉽게 말해서 위 코드를 보면 name.toUpperCase()를 리턴할 것이다. 그런데 만약 name이 null이여서 toUpperCase()를 실행할 수 없다면 "ANON"을 리턴하는 것이다. name에 ?(옵셔널)을 붙인 이유는 namedl null일 수도 있기 때문이다.
typedef ListOfInts = List<String>;
ListOfInts reverseListOfNumbers(ListOfInts list) {
var reversedList = list.reversed.toList();
return reversedList;
}
void main() {
print(reverseListOfNumbers(['kfjkd', 'fkjfkd']));
}
TypeDef
자료형에 사용자가 원하는 alias를 붙일 수 있게 해준다.(자료형 이름의 벼명을 만들 때 사용)
'다트(Dart)언어' 카테고리의 다른 글
다트(Dart) - 데이터 타입(DATA TYPES) (0) | 2023.09.10 |
---|---|
다트(Dart) : Deep Dive into Variables, Main Function and Null Safety (0) | 2023.09.10 |
다트(Dart) 이해 및 개념 - IT (0) | 2023.09.07 |