JAVA
열거형
열거형
2022.05.08열거형 (enum) 관련된 상수들을 같이 묶어 놓은 것. Java는 타입에 안전한 열거형을 제공 열거형은, 관련된 상수들을 같이 묶어 놓은 것이다. 예를 들어서 Card클래스 안에 상수가 있는데, 위에 있는 상수들은 카드 무늬, 아래 있는 카드들은 카드 숫자들이라고 했을 때, 이렇게 일일이 하나씩 상수를 정의하다보면, 너무 많을 수도 있다. 그래서 조금 간단히 할 수 있도록 열거형을 제공한다. 무늬는 무늬끼리, 숫자는 숫자끼리 간단하게 정의할 수 있게 한다. 이렇게 하면, 상수이면서 자동으로 값이 0부터 부여된다. 그런데,위 코드에서는 Card클래스의 CLOVER 값이 0이고, Card클래스의 TWO는 값이 0이다. 그러면 Card.CLOVER==Card.TWO)의 값은 0으로 같아서 true이다. 그런..
지네릭 타입의 형변환, 지네릭 타입의 제거
지네릭 타입의 형변환, 지네릭 타입의 제거
2022.05.07지네릭 타입의 형변환 지네릭 타입과 원시 타입 간의 형변환은 바람직 하지 않다.(경고 발생) 지네릭 타입과 원시 타입간의 형변환은 바람직 하지 않다. 예를 들면, 위 코드처럼, 지네릭 타입의 참조변수를 원시타입의 참조변수로 형변환 한다던지, 원시타입의 참조변수를 지네릭타입으로 형변환 하는 것은 바람직 하지 않다. 가능은 한데 바람직 하지 않은것 이다. 서로 다른 타입이 대입된 지네릭 타입들 끼리는 형변환 할 수 없다. (에러 발생) 서로 다른 타입이 대입된 지네릭 타입들 끼리는 형변환 할 수 없다. 에러가 발생한다. 와일드 카드가 사용된 지네릭 타입으로는 형변환 가능 와일드 카드가 사용된 지네릭 타입으로는 형변환이 가능하다. new Box();을 Box타입의 참조변수로 가리키는 것은 에러이다. 그러나, ..
와일드 카드, 지네릭 메서드
와일드 카드, 지네릭 메서드
2022.05.07와일드 카드 하나의 참조 변수로 대입된 타입이 다른 객체를 참조 가능 일반적으로 지네릭 클래스는 참조변수에 대입된 타입과, 생성자에 대입된 타입이 일치해야 한다. 일치하지 않으면 에러가 발생한다. 그런데, 우리는 다형성을 배웠기 때문에 하나의 참조변수로 여러 객체를 가리키고 싶을 때가 있다. 그런데 참조변수에 대입된 타입과 생성자에 대입된 타입이 일치해야 한다는 것이 부담이다. 그래서 이 답답함을 없애기 위해 나온 것이 와일다 카드이다. 와일드 카드를 사용하면, 참조변수에 대입된 타입과 생성자에 대입된 타입이 일치하지 않아도 OK다. 와일드 카드는 용법이 있는데, 주로 는 제한 없이 모든 타입이 가능하다.
제한된 지네릭 클래스, 지네릭스의 제약
제한된 지네릭 클래스, 지네릭스의 제약
2022.05.04제한된 지네릭 클래스 extends로 대입할 수 있는 타입을 제한 타입 변수에 대입할 수 있는 타입을 제한 시킬 수 있는데, extends를 이용하여 지정한 것의 자손만 타입으로 지정가능하도록 만들 수 있다. 위의 코드는, Fruit의 자손인 타입만 타입변수로 대입할 수 있도록 제한 한 것이다. 그러면, Apple이 Fruit의 자손이라고 했을 때, 대입된 타입 T는 Fruit의 자손이어야하므로, Apple을 대입할 수 있다. 그런데, Toy는 Fruit의 자손이 아니므로 에러가 발생한다. 인터페이스인 경우에도 extends를 사용 인터페이스를 구현한 경우로 제한할 때도, extends를 쓴다. implements가 아니라 extends를 사용하는 것에 주의하자. [Ex12_3] 지네릭스의 제약 타입 변..
Iterator, HashMap과 지네릭스
Iterator, HashMap과 지네릭스
2022.05.04Iterator 클래스를 작성할 때, Object타입 대신 T와 같은 타입 변수를 사용 예전에, Iterator가 일반 클래스일 때는, 다음요소를 읽어오는 next();가 Obejct타입이었다. 이것이 지네릭 클래스로 바뀌면서 타입변수 를 선언하고, Object대신 타입변수 E로 바뀌었다. 그래서, 예전에는 next()메서드의 반환타입이 Object였어서 형변환이 필요했으나, 지네릭 클래스로 바뀌고 난 다음부터는 에 를 대입하게 되면서 전과 달리 next()의 반환타입이 Student이므로 참조변수의 타입과 일치하므로 형변환을 하지 않아도 된다. [Ex12_2] HashMap 여러 개의 타입 변수가 필요한 경우, 콤마(,)를 구분자로 선언 HashMap은 타입변수가 2개이다 이처럼 타입변수가 여러개인 경..
지네릭스 용어, 지네릭 타입과 다형성
지네릭스 용어, 지네릭 타입과 다형성
2022.05.04지네릭스 용어 지네릭스는 클래스이름 옆에 타입변수를 선언하는 것이다. 그리고 T를 타입변수 또는 타입 매개변수라고 한다. (T는 타입 문자) Box는 원시타입(raw type)으로, 일반클래스가 지네릭 클래스로 바뀐건데, 원래 있는 그대로의 타입을 원시타입이라고 한다. 지네릭 클래스를 선언한 것인데, 'T Box'라고 읽는다. 가 타입변수이고, 클래스이름을 원시타입이라고 한다. 이렇게 지네릭 클래스가 선언되어있을 때, 이 클래스의 객체를 생성해서 사용하려면, 이렇게 참조변수와 생성자에 대입된 타입으로 를 넣어줘야 한다. 그리고 두 가 일치해야 한다. 지네릭 클래스가 타입이 있을 때, 타입변수에 실제 타입을 정해주는 것이다. 이 타입은 객체를 만들 때 마다 다르게 지정할 수 있다. 영어로 parameter..