인터넷에 연결되어 있는 장치는 각각의 장치를 식별할 수 있는 주소를 가지고 있는데 이를 ip라고 한다.
이런한 ip의 형태는 115.68.24.88, 192.168.0.1으로 되어 있다.
ip는 사람이 외우고 다니기 어렵기 때문에 사람들이 쉽게 기억하고 사용할 수 있도록 이름을 붙혀주는데 이것을 도메인이라고 한다.
ex) www.naver.com, www.google.com
사용자가 도메인을 통해서 사이트의 접속을 하게 되면 실제로는 도메인의 통신을 하는 것이 아니라 도메인과 연결 되어 있는 ip주소로 통신을 한다.
이 때, 이 도메인을 ip주소로 변환 하는 과정이 필요한데 이것을 담당하는 시스템이 바로 DNS이다.
HTTP 메소드란 서버에게 클라이언트가 원하는 동작을 요청하기 위해서 사용하는 방식을 말한다.
총 9개의 메소드가 있으며, 자주 쓰이는 주요 메소드 5개를 알아보겠다.
HyperTextMarkUpLanguage로 웹브라우저에서 문서를 시각화하기 위해서 필수적인 언어이다.
모든 웹은 HTML로 이루어져 있으며 사이트의 구조 잡는 역할을 한다.
즉, 웹 문서의 구조를 정의하고 콘텐츠를 표현하는 기본 마크업 언어이다.
HTML과 비슷하지만 데이터만을 표현하기 위해서 만들어졌다.
데이터만을 위헤서 만들어졌기 때문에 데이터 전송에 특화가 되어 있다.
위 사진 처럼 데이터를 HTML형태와 비슷하게 전송을 한다.
그러나 키 값을 두번이나 사용하고 있고 정보를 간소화 하지 못했다는 단점이 있다.
void main() {
int test = '테스트';
print(test);
}
// 오류 발생
// '테스트'는 string 타입이다.
// 하지만 test 변수는 int 타입으로 지정이 되었고 int 타입에는 string 타입이 할당이
// 안 되기 때문에 에러가 발생한다.
void main() {
var test = '테스트';
print(test.runtimeType);
}
// string
// '테스트'는 string 타입이다. 그래서 string이라는 결과가 나온다.
void main() {
var test = '303'+'101';
print(test);
}
// 303101
// '303'과 '101'은 string 타입이다.
// string 타입끼리 더하기를 하면 숫자처럼 더해지는 것이 아닌 연결이 된다.
void main() {
var true = 'test';
print(true);
}
// 오류발생
// true는 boolean 값 중 하나로 이미 내부적으로 선언이 되어 있기 떄문에
// 중복 선언이 된다.
void main() {
print(true.runtimeType);
}
// bool
// turn은 참이라는 boolean 타입이다.
void main() {
String const = 'test';
print(const);
}
// 오류 발생
// const는 변수 선언 중 하나로 분류가 된다.
// 그래서 그래서 var와 같이 이미 사용을 하기 때문에 오류가 발생한다.
void main() {
var value = '303808' != '303'+'8'+'08';
print(value);
}
// false
// '303808'과 '303'+'8'+'08'는 값은 값이다.
// 지금 != 등호는 우변과 좌변이 다른 지를 물어보는 등호이다.
// 우변과 좌변은 값이 같기 때문에 false가 나온다.
void main() {
List list1 = [1,2,3,4];
List list2 = [5,6,7];
list1.add(list2);
print(list1);
}
// [1, 2, 3, 4, [5, 6, 7]]
// add 메소드는 List 뒤에 요소를 추가하는 것이기 때문에
// List 자체가 요소로 들어간다.
void main() {
List list1 = [1,2,3,4];
List list2 = [5,6,7];
list1.addAll(list2);
print(list1);
}
// [1, 2, 3, 4, 5, 6, 7]
// addAll 메소드는 List2의 모든 요소들의 List1의 요소로 들어가게
// 하는 메소드이기 때문에 add 메소드와 다르게 하나씩 추가가 된다.
void main() {
List list1 = ['a','b','d'];
list1.insert(2,'c');
print(list1);
}
// [a, b, c, d]
// insert로 첫 번쨰 인자로 index값을 받고 두 번째 인자로 요소의 값을
// 받아서 인자로 받은 index의 위치에 요소의 값을 넣어준다.
void main() {
List list1 = [5,4,3,2,1,0];
list1.remove(0);
print(list1);
}
// [5, 4, 3, 2, 1]
// remove 메소드를 통해서 인자로 받은 값을 찾아서 List에서 제거를 해준다.
void main() {
List list1 = [5,4,3,2,1,0];
list1.removeAt(0);
print(list1);
}
// [4, 3, 2, 1, 0]
// removeAt은 index의 값을 넣어주어 그 index의 위치한 값을 제거 해준다.
void main() {
List list1 = [5,4,3,2,1,0];
list1.shuffle();
print(list1);
}
// [1, 2, 4, 5, 3, 0]
// shuffle 메소드는 List의 배열의 거꾸로 바꾼다.
void main() {
List list1 = [5,4,3,2,1,0];
List list2 = [];
list2.add(list1.isEmpty);
list2.add(list1.isNotEmpty);
list2.add(list1.length);
list2.reversed;
print(list2);
}
// [false, true, 6]
// 먼저 list1에 대한 빈 값인지 여부, 빈 값이 아닌지 여부, 길이의 값을
// list2의 값의 담아주고 reversed메소드를 사용했지만 적용이 되지 않고
// 그냥 [false, true, 6]으로 나온다.
// 이유를 찾아 보니 reversed메소드는 그냥 사용해서는 안 되고
// 새로 List를 담아 주어서 사용해야 하는 것 같다.
// List.form을 사용을 하는데 좀 더 알아봐야 할 거 같다.
void main() {
List list1 = [0, 1, 2, 3, 4, 5, true, false];
List list2 = [];
list2.add(list1.contains(list1[list1.length - 1]));
list2.insertAll(0, ['a', 'b', 'c', 1, 2, 3]);
list2.indexOf(true)-list2.indexOf(false);
print(list2.indexOf(true)-list2.indexOf(false));
}
// 7
// 먼저, list1의 length 값은 8이다. list1[list1.length - 1])가
// 의미하는 바는 list1[7] 이고, index 7번의 값은 false이다.
// 정리하면 list1.contains(false)이고 이는 false가 list1에 포함이
// 되어 있는 지 물어보는 것이기 때문에 true가 된다.
// 이 true의 값이 list2에 담긴다.
// insetAll의 첫 번째 인자로 index 값을 받고 두 번째 값으로 넣을 요소들을
// 받아서 첫 번째 인자 index 값 위치에 넣어준다.
// 그래서 list2의 값은 [a, b, c, 1, 2, 3, true]가 된다.
// indexOf메소드는 인자로 받은 값의 index 값을 가져온다.
// list2.indexOf(true)는 6이다.
// list2.indexOf(false)는 -1이다.
// 그 이유는 lisr2에서 false 값은 없기 때문에 -1이 나온다.
// 정리하면 6-(-1) 이고 6+1이 되어서 7이다.
사실 javascript와 비슷한 데이터 타입은 많다.
그 중 가장 눈여겨서 본 것은 List이다. 그 이유는 javascript의 Array와 많이 닮아 있는데 개발을 하다가 보면 배열을 많이 사용하기 때문이다.
프론트의 영역은 사용자에 데이터를 시각적으로 보여주어야 하기 때문에 배열을 많이 사용을 한다.
그래서 관심이 많이 갔다. 메소드들도 이름에 차이가 있지만 사용방법이 거의 비슷하다. 사실 이름만 다르고 거의 똑같다고 느꼈다.
이번 과정을 통해서 List의 메소드들고 많이 알아보고 flutter에서의 List를 다루는 법도 비슷한지, 차이가 있다면 어떤 차이가 있는 알고 싶다.