1일차 과제 - rlatkddbs99/Flutter GitHub Wiki

1.도메인과 DNS

도메인은 인터넷에 연결된 컴퓨터의 주소를 사람이 쉽게 기억하고 입력할 수 있도록 영문이나 한글 등 문자로 만든 인터넷 주소다. 외우기 어려운 IP주소가 아닌 www.naver.com 등 IP주소에 이름을 부여하고 그 이름으로 IP에 접근할 수 있게 되는 것이다. DNS 사용자 임의로 도메인 이름을 부여해서 사용하면 인터넷 주소를 인식하지 못한다. 누군가가 IP 주소와 도메인 이름의 관계를 관리하고 있어야 하는데, 이것이 바로 DNS(Domain Name System)다. DNS는 도메인 이름에 대한 IP 주소를 등록하고 있으면서 도메인 이름에 대한 IP 주소를 알려주거나 IP 주소에 대한 도메인 이름을 알려주는 일을 담당한다.

  1. HTTP 메소드 GET: 리소스를 조회하고자 할 때 (SELECT) 클라이언트에서 서버에 리소스의 조회를 요청하는 메소드. URL 뒤에 ?를 붙인뒤 Query string을 넣는 형식 - 각 파라미터를 &로 연결을 한다. 브라우저에 기록이 남는다 캐싱이 되기 때문에 북마크가 될 수 있고, 재요청 시 더 빠르게 가져온다. 요청에 길이 제한이 될 수 있다 - 브라우저마다 다르다. 관련 요청정보가 파라미터에 노출되기 때문에 보안이 필요한 중요한 정보를 다루면 안된다.

POST: 리소스를 생성하고자 할 때 (CREATE). 리소스를 생성하고, 추가하기 위한 요청을 보낼 때 사용하는 메소드. 클라이언트에서 서버의 내용을 업데이트 요청하는 메소드. DATA를 파라미터로 표기하지 않고, BODY에 넣어서 서버에 요청을 하게 된다. BODY에 넣음으로써 메시지 길이 제한이 없다. Content-type 헤더 필드를 꼭 추가기입하여 명시해야 한다. GET과 달리 URL에 변수가 노출되지 않는다. (최소한의 보안) 요청 후 기다리는 시간이 존재한다. 캐싱할 수 없기에 매번 새로운 페이지를 읽는 속도와 같다.

PUT,PATCH: 리소스를 업데이트 하고자 할 때(UPDATE) DELETE: 리소스를 제거하고자 할때(DELETE) 등 여러가지 메소드가 존재

3.HTML과 XML HTML : HyperText Mark-up Language. HTML은 웹 페이지를 만드는 데 사용하는 언어이며 사용되는 모든 태그는 미리 정의되어 있으며, 각각의 태그와 속성을 사용하여 웹 페이지 생성. html 문서는 단순히 텍스트 파일에 불과하고 웹 브라우저가 해석을 해서 구조를 통해 화면에 렌더링 해주게 되고 사용자는 View 라고 하는 스크린을 통해 접하게 되는 것. HTML 문서인 웹 페이지는 head 영역과 body 영역으로 구성된다. 문서의 타이틀(title) 은 웹 페이지의 제목으로 브라우저 탭에 표시.

XML : Extensible Markup Language. 데이터를 정의하는 규칙을 제공하는 마크업 언어. XML은 자체적으로 컴퓨팅 작업을 수행할 수 없습니다. 대신 구조적 데이터 관리를 위해 모든 프로그래밍 언어 또는 소프트웨어를 구현가능. HTML과 달리 태그 만들기 가능. 데이터 무결성 유지, 검색 효율성 향상, 유연한 애플리케이션 설계. HTML의 용도는 데이터를 표시하는 것입니다. 그러나 XML은 데이터를 저장하고 전송합니다. HTML에는 미리 정의된 태그가 있지만 사용자는 XML에서 고유한 태그를 만들고 정의할 수 있습니다. XML은 대/소문자를 구분하지만 HTML은 구분하지 않습니다.

4-1 void main() { int test = '테스트'; print(test); }
결과 : 오류 -> int형 변수에 테스트라는 문자열을 저장 불가

4-2 void main() { var test = '테스트'; print(test.runtimeType); } 결과 : String -> var형은 어떤 데이터타입도 받아준다. 지금 테스트라는 문자형을 받았기 때문에

4-3 void main() { var test = '303'+'101'; print(test); } 결과 : 303101 -> test변수에 문자열 303과 101을 붙여서 저장 후 출력

4-4 void main() { var true = 'test'; print(true); } 결과 : 오류 -> true 라는 이름으로 변수명을 설정했는데 true라는 키워드는 이미 예약어이므로

4-5 void main() { print(true.runtimeType); } 결과 : bool -> bool형은 true(1)와 false(0)의 값을 가짐

4-6 void main() { String const = 'test'; print(const); } 결과 : 오류 -> const라는 예약어는 수정이 불가능한 상수의 형태로 만들어 주는 것이다. 사용하려면 const 변수명 = "내용"; print(변수명); 을 사용하면 출력이 가능하다.

4-7 void main() { var value = '303808' != '303'+'8'+'08'; print(value); } 결과 : false -> 비교 연산을 통해 303808과 +연산으로 붙인 303808은 같다. 하지만 !가 붙음으로써 거짓이 되어버린다.

4-8 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연산은 추가하는 역할. 리스트에 리스트를 추가하는 형식이 되어서 list1에 list2가 같이 묶여서 들어감

4-9 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 메소드는 리스트에 내용을 추가하지만 리스트를 풀어서 추가

4-10 void main() { List list1 = ['a','b','d']; list1.insert(2,'c'); print(list1); } 결과 : [a,b,c,d] -> insert메소드는 매개변수로 (인덱스번호, 넣을 내용)을 가진다. 인덱스 2번(3번째 위치)에 c를 추가하고 출력

4-11 void main() { List list1 = [5,4,3,2,1,0]; list1.remove(0); print(list1); } 결과 : [5,4,3,2,1] -> remove메소드는 가장 먼저 나오는 값을 지운다. 0이 지워짐

4-12 void main() { List list1 = [5,4,3,2,1,0]; list1.removeAt(0); print(list1); } 결과 : [4,3,2,1,0] -> removeAt은 해당하는 인덱스 번호의 리스트를 지움

4-13 void main() { List list1 = [5,4,3,2,1,0]; list1.shuffle(); print(list1); } 결과 : [무작위 리스트 내용] -> shuffle은 리스트를 섞어 버림. 실행할 때 마다 다른 결과를 도출

4-14 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); } 결과 : isEmpty는 비었는지 확인 list1은 비어있지 않음으로 false, isNotEmpty는 반대이므로 true, length는 리스트의 길이 반환, reverse는 순서를 전환하는 것이지만 저렇게 쓰는거 아님

4-15 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 -> add로 리스트1의 길이 8-1의 값인 7자리에 있는 false가 있는지 확인 후 있으니 true 추가, insertAll메소드로 list2에 추가 list2는 [a,b,c,1,2,3,true]의 값을 가짐, indexOf(값)으로 위치 확인 true는 6번째에 있으니 6반환 indexOf(false)는 없으니 -1 반환. 6-(-1)이 되므로 7 출력

5.다음 언어 중 (Javascript, Python) 택 1하여, 오늘 배운 Dart 데이터타입들 중 비슷한 데이터타입이 있는지 찾아보고 정리한 링크를 적어주세요. PYTHON에도 오늘 배운 INT, STRING 등 여러가지 형태를 저장할 수 있는 DATATYPE이 있다. 다른 점이 있다면 실수의 경우 DART에서는 DOUBLE을 쓴다면 파이썬에는 FLOAT으로 사용하고 STRING이 아니라 STR로 사용하는 등 기본적인 틀은 같지만 조금씩 다른 부분이 있다. 또한 파이썬은 변수를 선언할 때 굳이 변수의 DATATYPE을 명시해줄 필요가 없다.