7장. 자바의 다양한 클래스.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
Chapter 16 : Struts 프레임워크 2. chapter 16 : Struts 프레임워크 2.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Chap07 상속 Section 1 : 상속의 개요 Section 2 : 멤버 변수의 상속
최윤정 Java 프로그래밍 클래스 상속 최윤정
5장. 객체지향과 클래스.
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
4부 클래스 라이브러리 “4부에서는 자바 언어의 API인 클래스 라이브러리에 관해 설명합니다
제 9 장 구조체와 공용체.
컴퓨터 프로그래밍 기초 [Final] 기말고사
명품 JAVA Programming 제 7 장 제네릭과 컬렉션.
명품 JAVA Essential.
3. 자바에서 지원하는 패키지 자바에서 기본적으로 제공하는 패키지.
7장 배열 ②.
Lesson 5. 레퍼런스 데이터형.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
4.1 자바 응용 프로그램 분석 4.2 식별자(identifier)와 예약어 4.3 변수와 자료형
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
Lesson 6. 형변환.
5장. 참조 타입.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
자바 5.0 프로그래밍.
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
3장 자바의 기본문법(2).
Java 6장. 클래스 : 속성 public class SumTest {
Lesson 7. 클래스와 메소드 - 1.
10장. 예외처리.
공학컴퓨터프로그래밍 Python 염익준 교수.
자바 5.0 프로그래밍.
C#.
13. 연산자 오버로딩.
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
7장 인터페이스와 추상 클래스.
Java 9장. 인터페이스와 예외처리 public class SumTest {
Method & library.
JA A V W. 03.
자바 5.0 프로그래밍.
인터넷응용프로그래밍 JavaScript(Intro).
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
27강 JAVA Collections - II - Map계열 컬렉션 클래스 살펴보기 - Set계열 컬렉션 클래스 살펴보기
15장 컬렉션 프레임워크 Section 1 컬렉션 프레임워크의 개요 Section 2 리스트 Section 3 셋
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
제 4장. 객체 지향 프로그래밍 시작하기 학기 프로그래밍언어및실습 (C++).
Part 4 클래스 라이브러리 Chapter 10 : 다중 스레드 Chapter 11 : 패키지와 주요 클래스
자바 5.0 프로그래밍.
Power Java 제11장 상속.
JA A V W. 06.
Choi Seong Yun 컴퓨터 프로그래밍 기초 #03 : 변수와 자료형 Choi Seong Yun
CHAP 21. 전화, SMS, 주소록.
객체기반 SW설계 팀활동지 4.
[ 단원 04 ] 반복과 배열.
데이터 동적 할당 Collection class.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
제 4 장 Record.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
어서와 C언어는 처음이지 제21장.
 6장. SQL 쿼리.
12장. 자료구조로 사용되는 클래스 자료구조란? 자료구조 클래스의 사용방법.
7 생성자 함수.
6 객체.
3장 자바의 기본문법(2).
Presentation transcript:

7장. 자바의 다양한 클래스

학습목표 자바 클래스 라이브러리를 이해하고 다음 패키지와 클래스를 프로그래밍에 활용할 수 있다. • 패키지 java.lang • 클래스 Object, Math, String, StringBuffer • 랩퍼 클래스 Byte, Short, Integer, Long, Float, Double, Boolean, Character 다음 패키지와 클래스를 프로그래밍에 활용할 수 있다. • 패키지 java.util • 클래스 Random, StringTokenizer • 클래스 Calendar, GregorianCalendar, Date 자바 콜렉션 프레임워크를 이해하고 다음 클래스와 인터페이스를 프로그래밍에 활용할 수 있다. • 인터페이스 Collection, List, Queue, Set, Map • 클래스 LinkedList, Vector, HashSet, HashMap

1. 패키지 JAVA.LANG의 클래스

자바 API 자바 클래스 라이브러리(java class library) 자바 API 문서 Section 1 패키지 java.lang의 클래스 p256 자바 API 자바 클래스 라이브러리(java class library) 자바 언어를 활용하기 위해 이미 만들어 놓은 다양한 자바 클래스 자바 API 문서 http://docs.oracle.com/javase/7/docs/api

주요 패키지 명명규칙 패키지에서 주의할 점 패키지 java. 패키지 javax. 패키지 org. 패키지 com. Section 1 패키지 java.lang의 클래스 주요 패키지 명명규칙 패키지 java. 초기에 패키지 패키지 javax. 이후 추가된 패키지 패키지 org. 외부 표준 조직 에서 만든 패키지 패키지 com. 외부 회사에서 만든 패키지 패키지에서 주의할 점 패키지는 하부 패키지를 포함하지 않음

기본 패키지 java.lang 패키지 java.lang 자바 프로그램을 위한 기본 클래스가 소속된 패키지 주요 클래스 Section 1 패키지 java.lang의 클래스 기본 패키지 java.lang 패키지 java.lang 자바 프로그램을 위한 기본 클래스가 소속된 패키지 주요 클래스 Object, Integer, String, StringBuffer, Math 등 유일하게 import 문장이 필요 없이 사용 가능

최상위 클래스 Object 자동으로 최상위 클래스 Object 주요 메소드 Section 1 패키지 java.lang의 클래스 최상위 클래스 Object 자동으로 최상위 클래스 Object 새로운 클래스를 정의하는 경우 상속 관계를 명시하지 않으면 자동으로 클래스 Object가 상위 클래스 주요 메소드 메소드 toString() 객체의 문자열 표현 값을 반환 하위 클래스에서 달리 재정의(overriding)하지 않으면 "클래스이름@16진수해시코드"의 문자열로 표현 메소드 equals() 객체 내용의 동등 여부를 검사하는데 사용

Section 1 패키지 java.lang의 클래스 수학 관련 클래스 Math 정적 메소드와 상수 제공

Section 1 패키지 java.lang의 클래스 클래스 Object와 Math의 사용 실습예제 7-1

랩퍼 클래스의 개념과 종류 8개의 랩퍼 클래스(wrapper class) 자바의 기본형을 참조형으로 표현한 클래스 Section 1 패키지 java.lang의 클래스 랩퍼 클래스의 개념과 종류 8개의 랩퍼 클래스(wrapper class) 자바의 기본형을 참조형으로 표현한 클래스 기본형을 참조형으로 포장한 포장 클래스

클래스 Integer Integer 객체의 생성 정수 또는 정수 형태의 문자열 인자로 생성 Section 1 패키지 java.lang의 클래스 클래스 Integer Integer 객체의 생성 정수 또는 정수 형태의 문자열 인자로 생성 Integer age = new Integer(20); Integer snum = new Integer("20121105"); 저장된 int 값은 한 번 생성되면 수정할 수 없음 int 값은 메소드 intValue()로 반환

박싱과 언박싱 Jdk 1.5 이전 Jdk 1.5 이후 클래스 Double을 사용하여 실수 2.59를 저장하는 객체를 생성 Section 1 패키지 java.lang의 클래스 박싱과 언박싱 Jdk 1.5 이전 클래스 Double을 사용하여 실수 2.59를 저장하는 객체를 생성 Double radius = new Double(2.59); 기본형 double 변수 r에 저장하는 문장 double r = radius.doubleValue(); Jdk 1.5 이후 자동 박싱(boxing) 기본형에서 랩퍼 객체의 자동 변환 Double radius = 2.59; //boxing 자동 언박싱(unboxing) 랩퍼 객체에서 기본형의 변환 double r = radius; //unboxing

Section 1 패키지 java.lang의 클래스 클래스 Character 실습예제 7-4

클래스 String(1) 일련의 문자 표현인 문자열 클래스 String으로 표현 한번 생성되면 다시 수정될 수 없는 특징 Section 1 패키지 java.lang의 클래스 클래스 String(1) 일련의 문자 표현인 문자열 클래스 String으로 표현 한번 생성되면 다시 수정될 수 없는 특징

Section 1 패키지 java.lang의 클래스 클래스 String(2) 다양한 메소드 제공 현재 객체의 문자열에서 새로운 문자열을 생성하여 반환하는 메소드로서 자신의 문자열은 수정되지 않음

Section 1 패키지 java.lang의 클래스 클래스 String(3) 실습예제 7-5

클래스 StringBuffer(1) 생성된 이후에도 문자열의 내용을 계속 수정 가능 Section 1 패키지 java.lang의 클래스 클래스 StringBuffer(1) 생성된 이후에도 문자열의 내용을 계속 수정 가능 문자열을 저장할 수 있는 용량(capacity)을 가짐 용량이 작으면 자동으로 수정되므로 프로그래머는 크게 신경 쓸 필요 없음 StringBuffer를 생성하는 방법 StringBuffer sb1 = new StringBuffer(); //용량은 16 StringBuffer sb2 = new StringBuffer(32); //용량은 32 StringBuffer sb3 = new StringBuffer("java");

클래스 StringBuffer(2) 주요 메소드 Section 1 패키지 java.lang의 클래스 클래스 StringBuffer(2) 주요 메소드 현재 객체의 문자열이 연산이 수행된 내용으로 수정되며, 반환 값은 수정된 문자열을 StringBuffer 형으로 반환

Section 1 패키지 java.lang의 클래스 클래스 StringBuffer(3) 실습예제 7-6

2. 패키지 java.util의 클래스

패키지 java.util 다양한 유틸리티 클래스 프로그램에서 이용할 수 있는 각종 유틸리티가 제공되는 패키지 Section 2 패키지 java.util의 클래스 p268 패키지 java.util 다양한 유틸리티 클래스 프로그램에서 이용할 수 있는 각종 유틸리티가 제공되는 패키지 Calendar, GregorianCalendar, Date 주요 클래스로는 날짜와 시간정보를 표현 Random 난수(random number)를 생성 Vector, Stack 다양한 자료형의 객체를 배열의 원소로 이용할 수 있는 자료구조를 지원 자료 구조에서 가장 많이 이용하는 구조 중의 하나인 스택 구조를 지원 Collection, Set, List, Queue, Map 등의 다양한 인터페이스와 클래스 여러 항목의 원소를 가변적으로 삽입과 삭제가 편리

클래스 Random int, long, float, double 등의 다양한 형의 난수를 만들어 제공 기본 생성자 Section 2 패키지 java.util의 클래스 클래스 Random int, long, float, double 등의 다양한 형의 난수를 만들어 제공 기본 생성자 현재 시간 정보로 시드(seed) 값을 지정하여 난수를 생성 long 형 인자의 생성자는 시드 값을 직접 지정하여 난수를 생성 Random rnd1 = new Random(); Random rnd2 = new Random(45);

Section 2 패키지 java.util의 클래스 다양한 난수의 발생 실습예제 7-7

클래스 StringTokenizer(1) Section 2 패키지 java.util의 클래스 클래스 StringTokenizer(1) 하나의 문자열에서 여러 토큰(token)을 생성 지정된 분리자(delimiters)를 사용 기본 분리자는 " \t\n\r\f"으로 공백문자와 탭 \t과 같은 4개의 제어문자 다른 분리자를 지정하고 싶다면 StringTokenizer의 생성자에서 2번째 인자에 기술 기본적으로 분리자를 토큰에 속하지 않게 분리 분리자를 토큰에 포함시키려면 StringTokenizer의 생성자에서 3번째 인자를 true로 지정 String str = "public static void main(String[] args) {"; StringTokenizer st1 = new StringTokenizer(str); StringTokenizer st2 = new StringTokenizer(str, " ()"); StringTokenizer st3 = new StringTokenizer(str, " ()[]{"); StringTokenizer st4 = new StringTokenizer(str, "()[]{", true);

클래스 StringTokenizer(2) Section 2 패키지 java.util의 클래스 클래스 StringTokenizer(2) 다음은 StringTokenizer의 메소드 반복문을 사용하여 여러 토큰을 분리자로 분리하여 토큰을 추출하는데 유용하게 사용

Section 2 패키지 java.util의 클래스 실습예제 7-8

클래스 Date 시간 정보를 표현하는 기본 클래스 클래스 DateFormat 클래스 Locale Section 2 패키지 java.util의 클래스 클래스 Date 시간 정보를 표현하는 기본 클래스 클래스 Date의 많은 메소드는 더 이상 사용을 권장하지 않음 deprecated 메소드 클래스 Date는 Calendar와 밀접한 관련이 있는 클래스 시간 정보를 초 정보로 저장하는데, 1/1000초인 millisecond로 표현 메소드 getTime() 1970년 1월 1일 00:00:00을 기준으로 지나간 시간을 millisecond로 반환 기준 시간인 1970 1월 1일 00:00:00을 epoch 클래스 DateFormat 패키지 java.text에 속하는 클래스로 시간 정보의 출력 형식에 제공 클래스 Locale 패키지 java.util에 있는 클래스로 국가 정보를 정의한 클래스 Date now = new Date(); System.out.println(now); System.out.println(now.getTime());

Section 2 패키지 java.util의 클래스 실습예제 7-9

클래스 Calendar 날짜와 시간에 관한 정보를 제공하는 추상 클래스 자체의 생성자를 이용하여 객체를 생성 불가능 Section 2 패키지 java.util의 클래스 클래스 Calendar 날짜와 시간에 관한 정보를 제공하는 추상 클래스 자체의 생성자를 이용하여 객체를 생성 불가능 정적 메소드 getInstance() 현재 시간 정보를 갖는 객체를 생성해주는 메소드 getTime() 반환형은 Date로서, 바로 출력하면 영문 표현의 시간 정보를 출력 가능 Calendar now = Calendar.getInstance(); System.out.println(now.getTime());

클래스 Calendar 실습예제 7-10 Section 2 패키지 java.util의 클래스 import java.util.Calendar;   public class CalendarTest { public static void main(String[] args) { Calendar now = Calendar.getInstance(); System.out.println(now.getTime()); int year = now.get(Calendar.YEAR); int month = now.get(Calendar.MONTH) + 1; //월 시작이 0 int date = now.get(Calendar.DATE); int hour = now.get(Calendar.HOUR_OF_DAY); int minute = now.get(Calendar.MINUTE); int second = now.get(Calendar.SECOND); System.out.println(year + "년 " + month + "월 " + date + "일"); System.out.println(hour + "시 " + minute + "분 " + second + "초"); }

3. 컬렉션 프레임워크

컬렉션 프레임워크 개요 인터페이스 계층 컬렉션 프레임워크collection framework Section 3 컬렉션 프레임워크 p276 컬렉션 프레임워크 개요 인터페이스 계층 컬렉션 프레임워크collection framework 여러 객체 원소의 삽입과 삭제가 편리한 자료 구조를 지원하는 인터페이스 인터페이스 Collection, Set, List, Queue, Map 이를 구현한 여러 클래스로 컬렉션 프레임워크를 구성

Collection 크게 인터페이스 Collection과 Map으로 구분 인터페이스 Collection 인터페이스 Map Section 3 컬렉션 프레임워크 Collection 크게 인터페이스 Collection과 Map으로 구분 인터페이스 Collection 인터페이스 Set과 List 그리고 Queue로 분류 인터페이스 Set은 수학의 집합을 표현한 인터페이스로 원소 중복을 허용하지 않음 인터페이스 List와 Queue는 원소의 중복을 허용하고 순서도 의미가 있음 객체 하나를 컬렉션의 원소로 처리 인터페이스 Map 키(key)와 값(value)의 쌍으로 구성된 자료 구조를 컬렉션의 원소로 처리 원소의 중복을 허용하지 않음

다양한 컬렉션 클래스 자바의 컬렉션 인터페이스를 구현한 클래스는 매우 다양 관련 클래스 이름 Section 3 컬렉션 프레임워크 다양한 컬렉션 클래스 자바의 컬렉션 인터페이스를 구현한 클래스는 매우 다양 관련 클래스 이름 HashMap과 같이 [내부구현방법][인터페이스이름]으로 구성 HashMap인 클래스는 Hash는 구현 방법이고 Map은 인터페이스 이름

Collection 인터페이스 자바 컬렉션 프레임워크를 대표하는 인터페이스 Collection 원소의 추가, 삭제 등의 연산 Section 3 컬렉션 프레임워크 Collection 인터페이스 자바 컬렉션 프레임워크를 대표하는 인터페이스 Collection 원소의 추가, 삭제 등의 연산 List, Set, Queue가 가져야 할 기본적인 연산을 추상 메소드로 선언

Iterator 인터페이스 컬렉션을 구성하는 원소 집합을 순차적으로 처리하기 위한 인터페이스 iterator() 메소드 Section 3 컬렉션 프레임워크 Iterator 인터페이스 컬렉션을 구성하는 원소 집합을 순차적으로 처리하기 위한 인터페이스 iterator() 메소드 인터페이스 Iterator의 객체를 반환 인터페이스 Collection을 구현하는 컬렉션 클래스 객체인 참조 변수 c에서 메소드 iterator()를 호출하여 인터페이스 Iterator의 객체를 얻음 메소드 hasNext()와 next()를 사용 반복 Iterator it = c.iterator(); while ( it.hasNext() ) { System.out.println(it.next()); }

List 인터페이스 순차적으로 나열된 원소를 처리하는 구조 첨자를 인자로 하는 메소드를 제공 Section 3 컬렉션 프레임워크 List 인터페이스 순차적으로 나열된 원소를 처리하는 구조 첨자를 인자로 하는 메소드를 제공 인터페이스 List를 상속받아 구현한 대표적인 클래스 LinkedList, ArrayList, Vector, Stack 등

ListIterator 인터페이스 상위로 Iterator를 상속받는 인터페이스 Section 3 컬렉션 프레임워크 ListIterator 인터페이스 상위로 Iterator를 상속받는 인터페이스 컬렉션을 구성하는 원소 집합에서 순방향과 역방향으로 순차적 처리에 편리

양방향의 연결 리스트인 클래스 LinkedList Section 3 컬렉션 프레임워크 양방향의 연결 리스트인 클래스 LinkedList 인터페이스 List와 Queue 등을 구현한 클래스 내부적으로 양방향의 연결 리스트로 구성 처음부터 순방향으로 또는 마지막부터 역방향으로 순회 가능 null을 포함한 모든 종류의 객체를 처리 addFirst() : 맨 앞에 add()와 addLsat() : 가장 끝에 add(index) 지정된 첨자 위치 등 자유자재로 삽입 가능

Section 3 컬렉션 프레임워크 클래스 LinkedList 주요 메소드

Section 3 컬렉션 프레임워크 실습예제 7-12

클래스 Vector(1) 모든 종류의 객체를 저장할 수 있는 배열 구조 Section 3 컬렉션 프레임워크 클래스 Vector(1) 모든 종류의 객체를 저장할 수 있는 배열 구조 용량 capacity으로 저장할 수 있는 객체의 개수를 정함 용량이 모두 객체 원소로 모두 채워지면 자동으로 용량이 2배로 증가 Vector<Object> 벡터의 원소를 Object로 사용한다는 의미 Vector<Object> data = new Vector<Object>(); data.addElement(2012); data.add("년도");

Section 3 컬렉션 프레임워크 클래스 Vector(2) 주요 메소드

실습예제 7-13 Section 3 컬렉션 프레임워크 import java.util.Vector;   public class VectorTest { public static void main(String[] args) { Vector<Object> data = new Vector<Object>(3); //Vector data = new Vector(3); //경고 발생 data.addElement(2012); data.add("년도"); data.addElement(4.35); data.add(2, "목표 학점"); data.insertElementAt("자바 강좌", 0); System.out.println("size = " + data.size()); System.out.println("capacity = " + data.capacity()); System.out.println(data.toString()); }

Set 인터페이스 중복을 허용하지 않는 컬렉션 Collection에서 상속받아 재정의한 메소드로 구성 Section 3 컬렉션 프레임워크 Set 인터페이스 중복을 허용하지 않는 컬렉션 Collection에서 상속받아 재정의한 메소드로 구성 인터페이스 Set을 구현한 클래스 클래스 TreeSet Set에서 정렬을 지원하는 SortedSet 인터페이스를 상속받고 내부적으로 트리를 이용하여 Set을 지원 클래스 HashSet 내부적으로 원소를 해시 테이블(hash table)을 이용하여 저장하는 구조 Set은 인터페이스 Collection이 상위이므로 Collection의 모든 메소드를 상속

실습 예제 7-14: HashSet의 활용 Set은 집합이므로 7을 여러 번 삽입해도 중복을 허용하지 않고 하나만 삽입 Section 3 컬렉션 프레임워크 실습 예제 7-14: HashSet의 활용 Set은 집합이므로 7을 여러 번 삽입해도 중복을 허용하지 않고 하나만 삽입 객체 HashSet의 내부 원소로 Integer만 지원한다면 자료형 HashSet<Integer>를 사용 public class void HashSetTest { … HashSet<Integer> setA = new HashSet<Integer>(); HashSet<Integer> setB = new HashSet<Integer>(); setA.add(3); setA.add(5); setA.add(7); setA.add(8); setA.add(7); setA.add(9); System.out.print("A = "); print(setA); System.out.println(" A = " + setA); setB.add(5); setB.add(3); setB.add(2); System.out.print("B = "); print(setB); System.out.println(" B = " + setB); boolean isChanged = setA.removeAll(setB); System.out.print("A - B = "); if (isChanged) System.out.println(setA);; } public static void print(HashSet<Integer> s) { Iterator<Integer> i = s.iterator(); while ( i.hasNext() ) System.out.print(i.next()+ " ");

Map 인터페이스(1) 키(key)와 값(value)으로 원소를 처리 하위 클래스 메소드 put(key, value)으로 저장 Section 3 컬렉션 프레임워크 Map 인터페이스(1) 키(key)와 값(value)으로 원소를 처리 메소드 put(key, value)으로 저장 메소드 get(key)로 조회 하위 클래스 HashMap, TreeMap 등이 있으며 HashMap은 키와 값의 Map을 해시테이블을 사용하여 구현한 클래스

Section 3 컬렉션 프레임워크 Map 인터페이스(2) 주요 메소드

클래스 HashMap 인터페이스 Map을 상속받아 구현한 대표적 실습예제 7-15 키와 값으로 null 값을 모두 지원 Section 3 컬렉션 프레임워크 클래스 HashMap 인터페이스 Map을 상속받아 구현한 대표적 키와 값으로 null 값을 모두 지원 내부적으로 해시 테이블을 사용하여 구현 실습예제 7-15 import java.util.HashMap; import java.util.Iterator;   public class HashMapTest { public static void main(String[] args) { HashMap<String, String> hm = new HashMap<String, String>();   hm.put("대한민국", "서울"); hm.put("일본", "동경"); hm.put("중국", "북경"); hm.put("태국", "방콕"); hm.remove("태국"); System.out.print("키 : " + hm.keySet()); System.out.println(" 값 : " + hm.values()); Iterator<String> keys = hm.keySet().iterator(); while ( keys.hasNext() ) { String key = keys.next(); String value = hm.get(key); System.out.println(key + ": " + value); }

4. 일반화 유형과 열거형

Generic의 사용 일반화 유형(generic type) Section 4 일반화 유형과 열거형 p288 Generic의 사용 일반화 유형(generic type) 컬렉션을 사용할 때 내부 원소를 구성하는 객체의 자료형을 하나의 자료형으로 한정하고 싶을 때 클래스 HashMap<String, String>의 일반화 유형을 사용하면 Map의 키와 값으로 String만으로 제한 String으로의 자료형 변환이 필요없음 일반화 유형을 <Object, Object>로 이용 모든 종류의 객체를 키와 값으로 사용 가능

Generic 클래스 정의 일반화 유형을 지원하는 클래스 정의 방법 Section 4 일반화 유형과 열거형 Generic 클래스 정의 일반화 유형을 지원하는 클래스 정의 방법 클래스 MyContainer<E>는 원소로 일반화 유형을 지원하는 클래스로 정의 E는 MyContainer를 구성하는 원소(element)의 자료형을 의미 MyContainer<E>에서 원소로 문자열만 사용하려면 클래스 MyContainer<String>을 사용 객체 변수 pl은 pl.add(“algol”)과 같이 문자열만 삽입이 가능 모든 객체를 삽입하려면 MyContainer<Object>를 사용

실습예제 7-16 Section 4 일반화 유형과 열거형 package generics; import java.util.ArrayList;   public class MyContainer<E> { private ArrayList<E> list; public MyContainer() { list = new ArrayList<E>(); } public E get(int index) { return list.get(index); public void add(E element) { list.add(element); public static void main(String[] args) { MyContainer<String> pl = new MyContainer<String>(); pl.add("algol"); pl.add("C"); //pl.add(5); 오류 발생 pl.add("java"); System.out.println(pl.get(0) + " "); System.out.println(pl.get(1) + " "); System.out.println(pl.get(2) + " ");

Generic 메소드 구현 정적인 메소드 get() 실습예제 7-17 Section 4 일반화 유형과 열거형 Generic 메소드 구현 정적인 메소드 get() 인자인 일반화 유형 <T>의 배열에서 첨자에 해당하는 원소를 반환하는 메소드를 구현 매개변수의 일반화 유형은 static <T> T와 같이 지정자와 반환형 사이에 <T>으로 기술 첫 번째 인자인 ary는 일반화 유형인 T[] 배열임을 명시 실습예제 7-17 package generics;   public class MyGenerics { public static <T> T get(T[] ary, int index) { return ary[index]; } public static <T> T getLast(T[] ary) { return ary[ary.length-1]; public static void main(String[] args) { Integer n[] = {3, 4, 5, 7}; System.out.println(MyGenerics.get(n, 2) + " " + MyGenerics.getLast(n)); String s[] = {"generics", "type casting", "input", "output"}; System.out.println(MyGenerics.get(s, 1) + " " + MyGenerics.getLast(s));

열거형 정의 열거 자료형(enumeration data type) Section 4 일반화 유형과 열거형 열거형 정의 열거 자료형(enumeration data type) 참조형으로 제공, 키워드 enum과 자료형 클래스 이름 pl로 상수 c, cpp, java, csharp을 정의하는 문장 열거 유형은 정적 메소드 values()를 이용 열거 원소의 상수로 구성된 배열을 반환 상수 목록은 switch 문의 case에 그대로 사용 … public class EnumTest { public enum pl {c, cpp, java, csharp}; public static void main(String[] args) { pl clang = pl.c; //정의한 열거 유형은 하나의 자료 유형으로 이용 System.out.println(clang); //저장된 상수 문자열이 출력 clang = pl.csharp; switch(clang) { case csharp: System.out.println(clang + ": C# 언어 "); } for (pl p : pl.values()) System.out.print(p + " "); System.out.println();

Thank You !