본문 바로가기
[Django] 파이썬 웹 프로그래밍 - 웹 프로그래밍의 이해 [Django] 파이썬 웹 프로그래밍 - 웹 프로그래밍의 이해 -책을 읽으며 Remind 하는 내용, 핵심 내용, 모르던 내용을 정리한 것입니다. 예문 및 자세한 설명은 책을 구매하여 보세요~ * 1.2.1. 웹 브라우저를 사용하여 요청 * 1.2.2. 리눅스 curl 명령을 사용하여 요청 -curl 명령은 HTTP/HTTPS/FTP 등 여러 가지의 프로토콜을 사용하여 데이터를 송 수신할 수 있는 명령이다. * 1.2.3. Telnet 을 사용하여 요청 -telnet 명령은 터미널 창에서 입력하는 내용을 그대로 웹 서버에 전송한다.telnet 명령모드에서 나가려면 아래 두 라인을 입력해야 한다. ^] ( Ctrl + ] )quit .. 2016. 12. 6.
[Effective Java] 바운드 와일드 카드를 사용해서 API 의 유연성을 높이자. [Effective Java] 바운드 와일드 카드를 사용해서 API 의 유연성을 높이자. - 매개변수화 타입은 불변(invariant) 이다. 서로 다른 두 개의 타입 Type1, Type2 에 대해 List, List 는 서브 타입도 수퍼 타입도 아니다. - 매개변수화 타입은 불변이기 때문에, 바운드 와일드 카드 타입(bounded wildcard type)을 사용해야 유연성이 좋다. 예) -> 를 사용하였기에 null 이외에는 put 을 할 수 없다. 이 경우 1번의 방법을 helper 로 갖는 function 을 하나 더 가져야 한다. 하지만, public 하게는 raw type 도 받을 수 있어 유연성은 더 좋다. Summary 메소드 API에 와일드 카드 타입을 사용하면 코드 작성이 조금 어려워.. 2016. 12. 5.
[Effective Java] 제네릭 메소드를 애용하자. [Effective Java] 제네릭 메소드를 애용하자. - 클래스를 제네릭화 하듯 메소드 또한 제네릭화 하면 좋다. 특히 static 유틸리티 메소드가 제네릭화의 좋은 후보이다. 제네릭 메소드는 제네릭 타입과 유사한 방법으로 작성한다. - 타입 매개변수를 메소드 선언부에 추가한 후 그 타입 매개변수를 메소드 내부에서 사용하면 된다. 타입 매개변수를 선언하는 타입 매개변수 목록은 return 타입 앞에 둔다. - 바운드 와일드 카드 타입 ( bounded wildcard types ) 를 사용하면 그 메소드를 더 유연하게 만들 수 있다. - 제네릭 메소드는 제네릭 생성자를 호출할 때 반드시 지정해야 하는 타입 매개변수 값을 명시적으로 지정할 필요가 없다. 컴파일러가 메소드 인자의 타입을 조사하여 타입 매.. 2016. 12. 1.
[Effective Java] 제네릭 타입을 애용하자. [Effective Java] 제네릭 타입을 애용하자. - 클래스를 제네릭화 하는 방법. - 1. 클래스 선언부에 하나 이상의 타입 매개변수를 추가. - 2. 코드 안에 나오는 모든 Object 타입을 그것에 맞는 타입 매개변수로 변경한 후 컴파일. new E[ size ] 와 같은 부분에서 보통 에러가 난다. 이를 피해가는 방법 1. E[] elements = (E[]) new Object[ size ]; // 타입 안전하진 않다. 이를 피해가는 방법 2. Object[] elements = new Object[ size ]; // 사용하는 부분에서 casting 이 필요하다.. scalar 타입보다 배열 타입에 대한 unchecked 캐스트 경고를 억제하는 것이 더 위험하므로, 2번 방법이 더 적합해.. 2016. 11. 29.
[Effective Java] 배열보다는 List 를 사용하자. [Effective Java] 배열보다는 List 를 사용하자. - 배열은 두 가지 관점에서 제네릭 타입과 다르다. 1. array는 공변(covariant). Sub이 Super 의 서브 타입이라면, 배열 타입 Sub[] 은 Super[] 의 서브 타입이라는 의미. 제네릭은 불변(invariant). Type1 와 Type2 가 있을 때, 이들의 관계는 모두 무시하고, List 과 List 는 서로 슈퍼도 서브도 아니다. 이 차이를 기반으로 제네릭이 유연성을 떨어뜨린다고 볼 수 있지만, array는 안전성을 보장하지 못한다. 배열을 사용하면 런타임 에러를 발생시키기 쉽고, List 를 사용하면 컴파일 에러를 마딱뜨리기 쉽다. 당연히 컴파일 시 에러를 발견하는 것이 최고다. 2. array 는 구체적(r.. 2016. 11. 28.
[Effective Java] 컴파일 경고 메세지가 없게 하자. [Effective Java] 컴파일 경고 메세지가 없게 하자. - 제네릭을 사용해서 프로그램을 작성하면 컴파일 경고 메세지를 많이 마딱뜨릴 수 있다. unchecked cast, unchecked method call, unchecked generic array generation, unchecked conversion 등. - 가능한 모든 unchecked 경고 메세지를 없애자. 이는 Runtime 시 ClassCastException 예외가 생기지 않음을 의미한다. - 특정 경고 메세지는 없앨 수 없지만, 그 메세지를 유발시킨 코드가 타입 안전을 보장한다면 @SuppressWarnings("unchecked") Annotation 을 사용해서 경고 메시지를 안 나타나게 억제할 수 있다. Suppre.. 2016. 11. 24.
[Java] Unbounded Wildcards [Java] Unbounded Wildcards 참조 : http://docs.oracle.com/javase/tutorial/java/generics/unboundedWildcards.html - Unbounded Wildcard 는 List 와 같이 type 을 ? 로 사용하는 경우를 이야기한다. - Unbounded Wildcard 는 다음 상황에서 유용하게 쓰인다. 1. Object class 를 넣는 것과 같은 용도인 경우. 2. Collection 을 parameter 로 받으면서 List.size, List.clear 등과 같이 type 에 dependency 가 없는 Collection 자체의 함수들만 호출하는 경우. - List 는 List 의 subtype 이다. - List 는 Lis.. 2016. 11. 23.
[Effective Java] 타입 안전이 보장되는 혼성(heterogeneous) 컨테이너의 사용을 고려하자. [Effective Java] 타입 안전이 보장되는 혼성(heterogeneous) 컨테이너의 사용을 고려하자. - 제네릭은 Set 이나 Map 같은 컬렉션, ThreadLocal 이나 AtomicReference 같은 단일 요소(single-element) 저장 컨테이너에 가장 많이 사용된다. 이 컬렉션들은 컨테이너를 매개변수화 한 것이다. 컨테이너의 특성에 따라 사용 가능한 타입 매개변수의 갯수가 자연스럽게 제한된다. - 타입 안전을 지키면서 더 큰 유연성을 갖기 위해서 ( 예를 들면 nosql 처럼 column 이 상황에 따라 다른 경우 )는 컨테이너 대신 키(key) 를 매개변수화 해주면 된다. - Class 클래스는 1.5부터 제네릭화되었다. 클래스 리터럴 타입은 Class 가 아니고 Class.. 2016. 11. 22.
[Effective Java] 새로 작성하는 코드에서는 원천(raw) 타입을 사용하지 말자. [Effective Java] 새로 작성하는 코드에서는 원천(raw) 타입을 사용하지 말자. - 하나 이상의 타입 매개변수(type parameter)를 선언하고 있는 클래스나 인터페이스를 제네릭 클래스 또는 제네릭 인터페이스라고 한다. 제네릭 클래스와 인터페이스를 합해서 제네릭 타입이라고 부른다. 각 제네릭 타입에서는 매개변수화 타입(parameterized type)들을 정의한다. ( 이용 ) 실 타입 매개변수(actual type parameter)들은 제네릭 타입의 형식 타입 매개변수(formal type parameter)와 각각 대응된다. ( List 에서 String 이 실 타입 매개변수이고, 기존 T 혹은 E 가 타입 매개변수이다. ) - 각 제네릭 타입에서는 원천(raw)타입을 정의하는데.. 2016. 11. 21.
반응형