2016.08.22. Mon. 열세 번째 수업
やっと資格の試験が終わりました!今まで頑張ったので順調に受かりましたw
でもまだ二次の試験が残ってるので、また頑張らないと!!
오늘의 수업내용
- final(상수)의 대한 이해 (그리고 enum)
- Generic(제네릭)의 대한 이해
- Collection Framework(ArrayList)
1. final(상수)의 대한 이해 (그리고 enum)
상수 클래스는 Static에 저장하며 대문자를 이용한다.
상수란 상태를 표현하는 변하지 않는 수이다. (변하지 않는 = FINAL)
static을 사용하는 이유 ☞ 어떤 클래스든 상태를 쉽게 사용 가능하기 위해!! 상태를 나타내기에 빠르게 쉽게 불러와야한다.
상수에서 int를 사용하는 이유 ☞ switch 제어문을 사용하기 위해!!
※ 심각한 오류(컴파일시 발견되지 않는 오류) -> 시스템에 큰 데미지를 준다.
상수는 int값이기 때문에 switch문의 key값으로 다른 클래스의 상수가 사용될 수 있다.
key값으로 FRUIT 클래스만 사용해야 하는데, COMPANY 클래스를 사용하고 있다.
아래의 예제를 살펴보고 L02FinalEx에서 해결해보자.
※ FinalEx
상수값을 int가 아닌 클래스 자신을 선언한다.
switch 제어문은 사용할 수 없게되고, 컴파일시 발견되지 않던 오류는 컴파일시 발견되는 오류(22번)로 수정된다.
아래의 예제를 살펴보자.
※ Enum 이용하기
final을 조금 더 간단하게 표현할 수 있는 것이 Enum이다.
아래의 예제로 확인해보자!
아래와 같이 데이터 타입의 입력 발생시 해결법을 알아보자!
문제발생
String으로 지정하고, Integer를 입력하자 14번 열에 오류가 발생한다.
1. 필드추가 + 생성자 오버로드
☞ 필드와 생성자가 계속 추가되면 코드가 길어지고 유지보수가 힘들다.
2. Datatype 변경( 모든 클래스의 조상 Object)
☞ 코드가 짧아지고, 코드의 유연성이 생긴다.
**제네릭은 개발자들이 2번 방식을 고수하다가 심각한 오류가 발생해서 추가된 기능이다.
아래 GenericCause와 GenericEx 예제로 제네릭에 대해 알아보자!
제네릭을 이용하는 이유에 대해서 알아보자
emp.info의 데이터타입 == Integer -> Employee 형 변환 될 수 없기 때문.
>>(Employee)emp.info 형변환 불가능이기 때문에 오류
20번행에 integer값 100을 넣었기 때문에 오류가 발생했다.
하지만 컴파일시 발견되지 않는 오류이고, 이것은 프로그래머의 실수이다.
GenericEx를 통해 해결방법을 알아보자.
위의 예제에서 다른 데이터타입을 썼을 때 오류가 나타나지 않았지만,
제네릭을 이용해 작성하면 아래 예제와 같이 25번 행에 오류가 나타난다.
- extends, implements 상관없이 부모 또는 조상클래스로 Personable을 가지고 있는 클래스만 사용가능
- T는 지정하지 않으면 Object타입이 된다.
- T는 <?>안에 지정한 데이터타입이 된다.
- 제네릭으로 사용할 수 있는 데이터타입은 class 뿐이다.
- 기본 데이터타입 사용불가
3. Collection Framework(ArrayList)
ArrayList의 데이터타입에는 여러가지 형태가 들어올 수 있다.
아래의 예제로 이해하자
배열과 ArrayList의 차이점을 알아두자!
배열(Array) |
ArrayList |
데이터타입이 한정적이다 |
generic으로 유동적이다 |
초기 index가 고정이다 |
.add()로 계속 추가 가능 |
index를 가진다 |
size를 가진다 |
프로그래머가 출력 |
syso()으로 출력 가능 |
'IT story > Java' 카테고리의 다른 글
D+14 Exception(TryCatch) 예외발생 (0) | 2016.08.26 |
---|---|
D+14 CollectionFramework(HashMap, HashSet) (0) | 2016.08.26 |
D+12 Equals & Access(접근지정자) (0) | 2016.08.18 |
D+11 Object, toString, hashCode (0) | 2016.08.17 |
D+10 Abstract(추상클래스), Anonymous(익명클래스), Interface(인터페이스) (0) | 2016.08.13 |