1) URL 인코딩이란 URL 인코딩이란 URL을 서버가 이해할 수 있는 표준 형식으로 변환하는 것을 말한다. RFC 2616 문서에 따르면 URL 인코딩은 ASCII 문자 집합으로 인코딩 하는 것이 표준이기 때문에 아스키 문자 코드에 포함되지 않는 문자에 대해서는 변환을 해주어야 한다. ASCII 코드는 미국을 기준으로 만들어진 문자 체계이므로 알파벳이 아닌 다른 나라의 언어로 문자가 포함되어 있지 않기에 URL에 한글이 포함된다면 URL 인코딩을 해주어야 한다. → 즉, URL에서 URL로 사용할 수 없는 문자 혹은 URL로 사용할 수 있지만 의미가 왜곡될 수 있는 문자들을 '%XX'의 형태로 변환해야 한다! 2) URL 인코딩 예시 왼쪽의 그림을 보면 한글이 포함된 URL과 한글이 포함된 URL을 ..
1) 변성 (Variance) - 공변성 (Covariance), 반공변성 (Contravariance), 무공변성 (InVariance) 제네릭의 와일드카드를 배우기 전에, 알아야 할 개념이 있는데 그것은 바로 공변성, 반공변성, 무공변성 합쳐서 변성이라는 개념이다. 변성은 타입의 상속 계층 관계에서 서로 다른 타입 간에 어떤 관계가 있는지를 나타내는 지표이다. 그리고 공변성은 타입의 상속 계층 관계에서 서로 다른 타입 간에 함께 변할 수 있다는 특징을 말하며, 이를 객체 지향 개념으로 표현하면 SOLID 원칙 중 Liskov 치환 원칙에 해당한다. 예를 들어, 배열 (Array)과 리스트 (List)가 있다고 가정하면, Java에서의 각 변성의 특징은 아래와 같다. (1) 공변성 S가 T의 하위 타입..
1) 트랜잭션 (1) 트랜잭션이란 DB 에서의 트랜잭션이란 데이터베이스에서 수행하는 작업의 논리적인 단위를 말하며, 하나의 트랜잭션은 데이터베이스에서 일련의 작업들을 포함하며 이러한 작업들은 모두 성공적으로 수행되거나 실패해야 한다. → All or Nothing 전략 (2) 트랜잭션의 4가지 특성 (ACID) DB에서의 트랜잭션은 아래의 4가지 특성을 지닌다. (2-1) Atomicity (원자성) 트랜잭션은 논리적으로 하나의 실행 단위여야 하고 물리적으로 여러 개의 Statement로 구성되어 있다 하더라도 논리적인 단위로 묶일 수 있어야 한다. 하나의 실행 단위라면 두 개의 상태로 귀결되는데, 성공하거나 또는 실패하거나이다. (All or Nothing) 즉, 여러 개의 Statement로 작성되었..
1) 제한된 타입 파라미터 (Bounded Type Parameter) 경우에 따라서는 타입 파라미터를 대체하는 구체적인 타입을 제한할 필요가 있다. 예를 들어, 숫자를 연산하는 제네릭 메소드는 대체 타입으로 Number 또는 자식 클래스 (Byte, Short, Integer, Long, Double)로 제한할 필요가 있다. 이처럼 모든 타입으로 대체할 수 없고, 특정 타입과 자식 또는 구현 관계에 있는 타입만 대체할 수 있는 타입 파라미터를 제한된 타입 파라미터 (Bounded Type Parameter) 라고 한다. public 리턴타입 메소드 (매개변수, ...) { } 제한된 타입 파라미터의 정의는 위와 같이 extends 키워드를 사용해서 할 수 있으며, 상위 타입은 클래스 뿐만 아니라 인터페..
1) 제네릭 클래스와 제네릭 메소드 이번에는 제네릭 클래스와 제네릭 메소드에 대해 알아보자! (1) 제네릭 클래스 public class 클래스명 { } public interface 인터페이스명 { } 제네릭 클래스란 타입 파라미터를 가지는 클래스와 인터페이스를 의미한다. 제네릭 클래스는 선언부에 “” 꺽새 기호가 붙고 그 사이에 타입 파라미터들이 위치한다! 타입 파라미터는 변수명과 동일한 규칙에 따라 작성할 수 있지만 일반적으로 대문자 알파벳 한글자로 표현한다! 또한, 외부에서 제네릭 클래스를 사용할 때에 타입 파라미터에 구체적인 타입을 지정해야 하는데 만약 지정하지 않으면 암묵적으로 Object 타입이 사용된다. 제네릭 클래스는 이전에 많이 다뤘기에 자세한 코드는 생략한다! (2) 제네릭 메소드 p..
1) 제네릭 & 타입 파라미터 이번에는 제네릭에 대한 명확한 정의와 타입 파라미터에 대해 알아보도록 하자! (1) 제네릭 (Generics) class Box { public T content; ... public static void main(String[] args) { Box strBox = new Box(); Box intBox = new Box(); } } 위의 코드를 보면 Box 클래스가 있고 다양한 타입의 객체를 지원하기 위해 Box 클래스 멤버 변수인 content의 타입은 특정 타입으로 지정하지 않고 타입 파라미터인 T로 설정하였다. 그리고 main() 메소드 코드를 보면 String 객체와 Intenger 객체를 저장하기 위한 각각의 Box 객체를 “타입”을 지정하여 생성하였다. 따라서..
1) 제네릭을 사용하는 이유 (1) 제네릭이 없던 시절의 Java 코드 제네릭은 JDK 1.5 버전부터 등장하게 되었는데 제네릭이 존재하지 않던 시절의 Java 코드를 살펴보자! class FruitBox { public Object fruit; public Object getFruit() { return fruit; } public void setFruit(Object content) { this.fruit = fruit; } } class Apple { } class Banana { } 위의 코드를 보면 Apple, Banana 클래스와 Apple, Banana와 같은 과일을 담는 클래스인 FruitBox가 선언되어 있다. FruitBox 클래스의 fruit 멤버 변수는 다양한 과일 클래스 (Appl..
1) 어노테이션 (Annotation) (1) 어노테이션이란 코드에서 “@”으로 작성되는 요소를 어노테이션이라고 하며, 어노테이션은 클래스 또는 인터페이스를 컴파일하거나 실행할 때 어떻게 처리해야 할 것인지를 알려주는 설정 정보이다. 어노테이션은 주로 세 가지 용도로 사용되어진다. ① 컴파일 시 사용하는 정보 전달 ② 빌드 툴이 코드를 자동으로 생성할 때 사용하는 정보 전달 ③ 실행 시 특정 기능을 처리할 때 사용하는 정보 전달 컴파일 시, 사용되는 정보 전달의 대표적인 예는 @Override 어노테이션이다. @Override는 컴파일러가 메소드 재정의 검사를 하도록 설정하며 정확히 재정의되지 않았다면 컴파일러는 에러를 발생시킨다. 어노테이션은 자바 프로그램을 개발할 때 필수적인 요소로 특히, 웹 개발에..