• 검색 결과가 없습니다.

자바의 다양한 클래스

N/A
N/A
Protected

Academic year: 2022

Share "자바의 다양한 클래스"

Copied!
57
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

자바의 다양한 클래스

(2)

단원 07 자바의 다양한 클래스

❖ 자바 클래스 라이브러리를 이해하고 다음 패키지와 클래스를 프로그래밍에 활용 할 수 있다.

▪ • 패키지 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

2

(3)

단원 07 자바의 다양한 클래스 3

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

(4)

단원 07 자바의 다양한 클래스

자바 API

❖ 자바 클래스 라이브러리(java class library)

▪ 자바 언어를 활용하기 위해 이미 만들어 놓은 다양한 자바 클래스

❖ 자바 API 문서

▪ http://docs.oracle.com/javase/7/docs/api

4

(5)

단원 07 자바의 다양한 클래스

주요 패키지

❖ 명명규칙

▪ 패키지 java.

초기에 패키지

▪ 패키지 javax.

이후 추가된
 패키지

▪ 패키지 org.

외부 표준 조직
 에서 만든 패키지

▪ 패키지 com.

외부 회사에서 만든 패키지

❖ 패키지에서 주의할 점

▪ 패키지는 하부 패키지를 포함하지 않음

5

(6)

단원 07 자바의 다양한 클래스

기본 패키지 java.lang

❖ 패키지 java.lang

▪ 자바 프로그램을 위한 기본 클래스가 소속된 패키지가

▪ 주요 클래스

Object, Integer, String, StringBuffer, Math 등

유일하게 import 문장이 필요 없이 사용 가능

6

(7)

단원 07 자바의 다양한 클래스

최상위 클래스 Object

❖ 자동으로 최상위 클래스 Object

▪ 새로운 클래스를 정의하는 경우 상속 관계를 명시하지 않으면 자동으로 클래스 Object가 상위 클래스

❖ 주요 메소드

▪ 메소드 toString()

객체의 문자열 표현 값을 반환

하위 클래스에서 달리 재정의(overriding)하지 않으면

– "클래스이름@16진수해시코드"의 문자열로 표현

▪ 메소드 equals()

객체 내용의 동등 여부를 검사하는데 사용

7

(8)

단원 07 자바의 다양한 클래스

수학 관련 클래스 Math

❖ 정적 메소드와 상수 제공

8

(9)

단원 07 자바의 다양한 클래스

클래스 Object와 Math의 사용

❖ 실습예제

▪ 7-1

9

(10)

단원 07 자바의 다양한 클래스

랩퍼 클래스의 개념과 종류

8 개의 랩퍼 클래스(wrapper class)

▪ 자바의 기본형을 참조형으로 표현한 클래스

▪ 기본형을 참조형으로 포장한 포장 클래스

10

(11)

단원 07 자바의 다양한 클래스

클래스 Integer

❖ Integer 객체의 생성

▪ 정수 또는 정수 형태의 문자열 인자로 생성

Integer age = new Integer(20);

Integer snum = new Integer("20121105");

▪ 저장된 int 값은 한 번 생성되면 수정할 수 없음

▪ int 값은 메소드 intValue()로 반환

11

(12)

단원 07 자바의 다양한 클래스

박싱과 언박싱

❖ Jdk 1.5 이전

▪ 클래스 Double을 사용하여 실수 2.59 를 저장하는 객체를 생성

Double radius = new Double(2.59);

▪ 기본형 double 변수 r에 저장하는 문장

double r =

radius.doubleValue();

12

❖ Jdk 1.5 이후

▪ 자동 박싱(boxing)

기본형에서 랩퍼 객체의 자동 변환

Double radius = 2.59; //boxing

▪ 자동 언박싱(unboxing)

랩퍼 객체에서 기본형의 변환

double r = radius; //unboxing

(13)

단원 07 자바의 다양한 클래스

클래스 Character

❖ 실습예제 7-4

13

(14)

단원 07 자바의 다양한 클래스

클래스 String(1)

❖ 일련의 문자 표현인 문자열

▪ 클래스 String으로 표현

▪ 한번 생성되면 다시 수정될 수 없는 특징

14

(15)

단원 07 자바의 다양한 클래스

클래스 String(2)

❖ 다양한 메소드 제공

▪ 현재 객체의 문자열에서 새로운 문자열을 생성하여 반환하는 메소드로서 자신의 문 자열은 수정되지 않음

15

(16)

단원 07 자바의 다양한 클래스

클래스 String(3)

❖ 실습예제

▪ 7-5

16

(17)

단원 07 자바의 다양한 클래스

클래스 StringBuffer(1)

❖ 생성된 이후에도 문자열의 내용을 계속 수정 가능

▪ 문자열을 저장할 수 있는 용량(capacity)을 갖음

▪ 용량이 작으면 자동으로 수정되므로 프로그래머는 크게 신경 쓸 필요 없음

▪ StringBuffer를 생성하는 방법

StringBuffer sb1 = new StringBuffer(); //용량은 16

StringBuffer sb2 = new StringBuffer(32); //용량은 32

StringBuffer sb3 = new StringBuffer("java");

17

(18)

단원 07 자바의 다양한 클래스

클래스 StringBuffer(2)

❖ 주요 메소드

▪ 현재 객체의 문자열이 연산이 수행된 내용으로 수정되며, 반환 값은 수정된 문자열 을 StringBuffer 형으로 반환

18

(19)

단원 07 자바의 다양한 클래스

클래스 StringBuffer(3)

❖ 실습예제

▪ 7-6

19

(20)

단원 07 자바의 다양한 클래스 20

2. 패키지 JAVA.UTIL의 클래스

(21)

단원 07 자바의 다양한 클래스

패키지 java.util

❖ 다양한 유틸리티 클래스

▪ 프로그램에서 이용할 수 있는 각종 유틸리티가 제공되는 패키지

▪ Calendar, GregorianCalendar, Date

주요 클래스로는 날짜와 시간정보를 표현

▪ Random

난수(random number)를 생성

▪ Vector, Stack

다양한 자료형의 객체를 배열의 원소로 이용할 수 있는 자료구조를 지원

자료 구조에서 가장 많이 이용하는 구조 중의 하나인 스택 구조를 지원

▪ Collection, Set, List, Queue, Map 등의 다양한 인터페이스와 클래스

여러 항목의 원소를 가변적으로 삽입과 삭제가 편리

21

(22)

단원 07 자바의 다양한 클래스

클래스 Random

❖ int, long, float, double 등의 다양한 형의 난수를 만들어 제공

❖ 기본 생성자

▪ 현재 시간 정보로 시드 값을 지정하여 난수를 생성

▪ long 형 인자의 생성자는 시드 값을 직접 지정하여 난수를 생성

Random rnd1 = new Random();

Random rnd2 = new Random(45);

22

(23)

단원 07 자바의 다양한 클래스

다양한 난수의 발생

❖ 실습예제

▪ 7-7

23

(24)

단원 07 자바의 다양한 클래스

클래스 StringTokenizer(1)

❖ 하나의 문자열에서 여러 토큰(token)을 생성

▪ 지정된 분리자(delimiters)를 사용

기본 분리자는 " \t\n\r\f"으로 공백문자와 탭 \t과 같은 4개의 제어문자

다른 분리자를 지정하고 싶다면 StringTokenizer의 생성자에서 2번째 인자에 기술

▪ 기본적으로 분리자를 토큰에 속하지 않게 분리

분리자를 토큰에 포함시키려면 StringTokenizer의 생성자에서 3번째 인자를 true로 지정

24

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);

(25)

단원 07 자바의 다양한 클래스

클래스 StringTokenizer(2)

❖ 다음은 StringTokenizer의 메소드

▪ 반복문을 사용하여 여러 토큰을 분리자로 분리하여 토큰을 추출하는데 유용하게 사 용

25

(26)

단원 07 자바의 다양한 클래스

실습예제

❖ 7-8

26

(27)

단원 07 자바의 다양한 클래스

클래스 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에 있는 클래스로 국가 정보를 정의한 클래스

27

Date now = new Date();

System.out.println(now);

System.out.println(now.getTime());

(28)

단원 07 자바의 다양한 클래스

실습예제

❖ 7-9

28

(29)

단원 07 자바의 다양한 클래스

클래스 Calendar

❖ 날짜와 시간에 관한 정보를 제공하는 추상 클래스

▪ 자체의 생성자를 이용하여 객체를 생성 불가능

▪ 정적 메소드 getInstance()

현재 시간 정보를 갖는 객체를 생성해주는

▪ 메소드 getTime()

반환형은 Date로서, 바로 출력하면 영문 표현의 시간 정보를 출력 가능

29

Calendar now = Calendar.getInstance();

System.out.println(now.getTime());

(30)

단원 07 자바의 다양한 클래스

클래스 Calendar

❖ 실습예제 7-10

30

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 +

"초");

} }

(31)

단원 07 자바의 다양한 클래스 31

3. 컬렉션 프레임워크

(32)

단원 07 자바의 다양한 클래스

컬렉션 프레임워크 개요

❖ 인터페이스 계층

▪ 컬렉션 프레임워크 collection framework

여러 객체 원소의 삽입과 삭제가 편리한 자료 구조를 지원하는 인터페이스

– 인터페이스 Collection, Set, List, Queue, Map

이를 구현한 여러 클래스로 컬렉션 프레임워크를 구성

32

(33)

단원 07 자바의 다양한 클래스

Collection

❖ 크게 인터페이스 Collection과 Map으로 구분

▪ 인터페이스 Collection

인터페이스 Set과 List 그리고 Queue로 분류

– 인터페이스 Set은 수학의 집합을 표현한 인터페이스 – 원소의 중복을 허용하지 않음

– 인터페이스 List와 Queue는 원소의 중복을 허용하고 순서도 의미가 있음

객체 하나를 컬렉션의 원소로 처리

▪ 인터페이스 Map

키(key)와 값(value)의 쌍으로 구성된 자료 구조를 컬렉션의 원소로 처리

원소의 중복을 허용하지 않음

33

(34)

단원 07 자바의 다양한 클래스

다양한 컬렉션 클래스

❖ 자바의 컬렉션 인터페이스를 구현한 클래스는 매우 다양

▪ 관련 클래스 이름

HashMap과 같이 [내부구현방법][인터페이스이름]으로 구성

HashMap인 클래스는 Hash는 구현 방법이고 Map은 인터페이스 이름

34

(35)

단원 07 자바의 다양한 클래스

Collection 인터페이스

❖ 자바 컬렉션 프레임워크를 대표하는 인터페이스 Collection

원소의 추가, 삭제 등의 연산

List, Set, Queue가 가져야 할 기본적인 연산을 추상 메소드로 선언

35

(36)

단원 07 자바의 다양한 클래스

Iterator 인터페이스

❖ 컬렉션을 구성하는 원소 집합을 순차적으로 처리하기 위한 인터페이스

▪ iterator() 메소드

인터페이스 Iterator의 객체를 반환

인터페이스 Collection을 구현하는 컬렉션 클래스 객체인 참조 변수 c에서

– 메소드 iterator()를 호출하여 인터페이스 Iterator의 객체를 얻음 – 메소드 hasNext()와 next()를 사용 반복

36

Iterator it = c.iterator();

while ( it.hasNext() ) {

System.out.println(it.next());

}

(37)

단원 07 자바의 다양한 클래스

List 인터페이스

❖ 순차적으로 나열된 원소를 처리하는 구조

▪ 첨자를 인자로 하는 메소드를 제공

▪ 인터페이스 List를 상속받아 구현한 대표적인 클래스

LinkedList, ArrayList, Vector, Stack 등

37

(38)

단원 07 자바의 다양한 클래스

ListIterator 인터페이스

❖ 상위로 Iterator를 상속받는 인터페이스

▪ 컬렉션을 구성하는 원소 집합에서 순방향과 역방향으로 순차적 처리에 편리

38

(39)

단원 07 자바의 다양한 클래스

양방향의 연결 리스트인 클래스 LinkedList

❖ 인터페이스 List와 Queue 등을 구현한 클래스

▪ 내부적으로 양방향의 연결 리스트로 구성

❖ 처음부터 순방향으로 또는 마지막부터 역방향으로 순회 가능

▪ null을 포함한 모든 종류의 객체를 처리

▪ addFirst() : 맨 앞에

▪ add() 와 addLsat() : 가장 끝에

▪ add(index)

지정된 첨자 위치 등 자유자재로 삽입 가능

39

(40)

단원 07 자바의 다양한 클래스

클래스 LinkedList

❖ 주요 메소드

40

(41)

단원 07 자바의 다양한 클래스

실습예제

❖ 7-12

41

(42)

단원 07 자바의 다양한 클래스

클래스 Vector(1)

❖ 모든 종류의 객체를 저장할 수 있는 배열 구조

▪ 용량 capacity으로 저장할 수 있는 객체의 개수를 정함

용량이 모두 객체 원소로 모두 채워지면 자동으로 용량이 2배로 증가

▪ Vector<Object>

벡터의 원소를 Object로 사용한다는 의미

42

Vector<Object> data = new Vector<Object>();

data.addElement(2012);

data.add("년도");

(43)

단원 07 자바의 다양한 클래스

클래스 Vector(2)

❖ 주요 메소드

43

(44)

단원 07 자바의 다양한 클래스

실습예제

❖ 7-13

44

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());

} }

(45)

단원 07 자바의 다양한 클래스

Set 인터페이스

❖ 중복을 허용하지 않는 컬렉션

▪ Collection에서 상속받아 재정의한 메소드로 구성

▪ 인터페이스 Set을 구현한 클래스

클래스 TreeSet

– Set에서 정렬을 지원하는 SortedSet 인터페이스를 상속받고 – 내부적으로 트리를 이용하여 Set을 지원

클래스 HashSet

– 내부적으로 원소를 해시 테이블(hash table)을 이용하여 저장하는 구조

▪ Set 은 인터페이스 Collection이 상위이므로

Collection의 모든 메소드를 상속

45

(46)

단원 07 자바의 다양한 클래스

실습 예제

❖ 7-14: HashSet 의 활용

▪ Set은 집합이므로 7을 여러 번 삽입해도 중복을 허용하지 않고 하나만 삽입

▪ 객체 HashSet의 내부 원소로 Integer만 지원한다면 자료형 HashSet<Integer>

를 사용

46 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()+ " ");

} }

(47)

단원 07 자바의 다양한 클래스

Map 인터페이스(1)

❖ 키(key)와 값(value)으로 원소를 처리

▪ 메소드 put(key, value)으로 저장

▪ 메소드 get(key)로 조회

❖ 하위 클래스

▪ HashMap, TreeMap 등이 있으며

▪ HashMap 은 키와 값의 Map을 해시테이블을 사용하여 구현한 클래스

47

(48)

단원 07 자바의 다양한 클래스

Map 인터페이스(2)

❖ 주요 메소드

48

(49)

단원 07 자바의 다양한 클래스

클래스 HashMap

❖ 인터페이스 Map을 상속받아 구현한 대표적

▪ 키와 값으로 null 값을 모두 지원

▪ 내부적으로 해시 테이블을 사용하여 구현

❖ 실습예제 7-15

49

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("태국");

hm.put("중국", "북경");

  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);

} }

}

(50)

단원 07 자바의 다양한 클래스 50

4. 일반화 유형과 열거형

(51)

단원 07 자바의 다양한 클래스

Generic 의 사용

❖ 일반화 유형(generic type)

▪ 컬렉션을 사용할 때 내부 원소를 구성하는 객체의 자료형을 하나의 자료형으로 한 정하고 싶을 때

▪ 클래스 HashMap<String, String>의 일반화 유형을 사용하면

Map의 키와 값으로 String만으로 제한

String으로의 자료형 변환이 필요없음

▪ 일반화 유형을 <Object, Object>로 이용

모든 종류의 객체를 키와 값으로 사용 가능

51

(52)

단원 07 자바의 다양한 클래스

Generic 클래스 정의

❖ 일반화 유형을 지원하는 클래스 정의 방법

▪ 클래스 MyContainer<E>는 원소로 일반화 유형을 지원하는 클래스로 정의

E는 MyContainer를 구성하는 원소(element)의 자료형을 의미

❖ MyContainer<E> 에서 원소로 문자열만 사용하려면

▪ 클래스 MyContainer<String>을 사용

객체 변수 pl은 pl.add(“algol”)과 같이 문자열만 삽입이 가능

▪ 모든 객체를 삽입하려면 MyContainer<Object>를 사용

52

(53)

단원 07 자바의 다양한 클래스

실습예제

❖ 7-16

53

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) + " ");

} }

(54)

단원 07 자바의 다양한 클래스

Generic 메소드 구현

❖ 정적인 메소드 get()

▪ 인자인 일반화 유형 <T>의 배열에서 첨자에 해당하는 원소를 반환하는 메소드를 구현

매개변수의 일반화 유형은 static <T> T와 같이 지정자와 반환형 사이에 <T>으로 기술

첫 번째 인자인 ary는 일반화 유형인 T[] 배열임을 명시

❖ 실습예제 7-17

54

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));

} }

(55)

단원 07 자바의 다양한 클래스

열거형 정의

❖ 열거 자료형(enumeration data type)

▪ 참조형으로 제공, 키워드 enum과 자료형 클래스 이름 pl로

상수 c, cpp, java, csharp을 정의하는 문장

▪ 열거 유형은 정적 메소드 values()를 이용

열거 원소의 상수로 구성된 배열을 반환

▪ 상수 목록은 switch 문의 case에 그대로 사용

55

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();

} }

(56)
(57)

Thank You !

참조

관련 문서

File[] listFiles() : 해당 경로에 있는 파일의 목록을 File 배열로 리턴합니다.. String getName() : 해당 경로에 있는 파일이나

the association name, common when drawing a domain model, is often excluded (though still legal) when using class diagrams for a software.. perspective

자료형태 &lt;physicalDescription&gt;&lt;form&gt; 필수 디지털 품질 &lt;physicalDescription&gt;&lt;reformattingQuality&gt; 필수

프로그램 적 용 후 학생들은 &lt;안다&gt;는 것은 &lt;행동함&gt;과 연결된다는 것을 알게 되었으며 하나의 문제를 해 결하기 위해 다양한 과목과 역량이 필요하다는

• 애플리케이션의 여러 자원들과 메인 프레임 클래스, View 클래스, Document 클래스 등을 하나의 묶 음으로 가지는

 클래스는 필드와 메소드로

상속에 의한 클래스 인스턴스의

학습창은 강좌 제목이 표시되는 상단영역, 강의 목차가 표시 되는 좌측영역, 그리고 학습 콘텐츠가 보여지는 중앙 영역으