java advanced java.lang package
DESCRIPTION
JAVA ADVANCED java.lang package. IT 아카데미. java.lang package. class Object. 자바 모든 클래스의 최상위 클래스 extends java.lang.Object 주요 메서드 boolean equals(Object obj); String toString(); protected Object clone(); Class getClass(); void notify(); void notifyAll(); void wait();. class String. - PowerPoint PPT PresentationTRANSCRIPT
IT 아카데미
java.lang package
class Object자바 모든 클래스의 최상위 클래스extends java.lang.Object 주요 메서드
boolean equals(Object obj);String toString();protected Object clone();Class getClass();void notify();void notifyAll();void wait();
class String문자열을 나타내고 처리하는 메서드를 구현한
클래스한번 생성된 문자열은 절대 변하지 않음new 를 사용한 객체 vs “” 를 사용한 객체+ 연산 : 문자열 결합
문자 + 문자문자 + 숫자숫자 + 문자문자 + 객체객체 + 문자
class StringBuffer 변하는 문자열을 다룰 때 사용 (cf. String)저장하고 있는 문자열의 내용을 변경 가능
append methodinsert methodreplace methodsetLength method
6
String/StringBuffer String 클래스는
불변성 (immutablity) 특성으로 인해 항상 읽기전용 상태를 유지합니다 .
어떠한 메소드 호출에도 원본 문자열이 변경되는 경우는 없습니다 .
String 클래스에서“문자열의 대소문자 변환”등의 문자열 변경을 위한 메소드는 원래의 문자열의 내용이 변경되는 것이 아니라 원본은 원본대로 있고 , 새로운 String 객체 ( 복사본 ) 을 생성하면서 그 내용을 원본과 다르게 바꾸는 것입니다 .
7
String/StringBuffer반면 , StringBuffer 클래스에서는 String 클래스와는
달리 불변성 (immutability) 이 없습니다 . 즉 , StringBuffer 클래스의 메소드를 사용하면 자신의
문자열 데이터를 변경시킬 수 있습니다 . 문자열 처리가 많은 자바 프로그램을 작성할 때 부하를
최소화 하기 위해서 String 클래스 보다 StringBuffer 클래스의 사용을 권장하는 것도 이러한 이유에서 입니다 .
그러나 , String 클래스를 사용함으로써 얻어지는 장점도 무시할 수 없으므로 어떤 것이 일방적으로 좋다고 말할 수는 없습니다 . 일종의 이율배반 (tradeoff) 의 관계 입니다 .
8
String 클래스 예를들어 , 두 개의 문자열 str1, str2 를 str3
이라는 하나의 문자열로 연결하는 concat() 메소드의 경우 다음과 같은 형식으로 사용됩니다 .
str3 = str1.concat(str2);
9
String 클래스실행 결과
str1 과 str2 에 아무런 변경도 가하지 않습니다 . 단 , str1 과 str2 을 연결한 문자열을 가지는 새로운 객체가
생성되며 이를 str3 이 가리키도록 합니다 . 자바 언어에서 일단 한번 String 객체가 생성되면 이
객체의 내용은 어떠한 경우에도 변하지 않습니다 . Note :
concat(), replace() 와 같이 문자열에 대한 변경을 가할 것 같아 보이는 String 클래스의 메소드라 할지라도 원본 문자열은 변하지 않습니다 . 다만 변경된 값을 갖는 새로운 문자열 객체를 생성하고 이를 반환하는 것 뿐입니다 .
10
String 클래스
new 키워드 없이 String s = "abc"; 와 같이 표현하면 무조건 새로운 객체를 생성하는 것은 아니고 , 이미 존재하는 String 객체 중에서 내용이 동일한 것이 있는지 찾아봅니다 . 동일한 내용의 String 객체가 이미 존재한다면 객체를 새로 생성하지
않고 , 이미 존재하는 객체의 주소만 참조 변수에 할당받아서 그 String 객체를 공유합니다 .
new 키워드를 사용하게 되면 같은 내용의 문자열을 포함하는 String 객체의 존재여부와 관계없이 새로운 객체를 생성합니다 .
String str1 = "JAVA 2 SCJP";String str1 = new String("JAVA 2 SCJP");
11
String 클래스따라서 , 다음과 같은 str3, str4, str5 의 3 개
문자열을 선언하였다고 하면 ,
.
String str3 = "I love java.";String str4 = "I love java.";String str5 = "I love java.";
12
String 클래스또한 , 자바 프로그래밍 언어에서는 ‘ +’ 연산자에
대해서 문자열의 접합 (concatenation) 기능을 하도록 오버로딩 (overloading) 되어 있습니다 .
C++ 이나 여타의 언어처럼 사용자에게 직접 연산자 오버로딩의 기회를 제공하지는 않고 , 특이한 경우로 '+' 연산자에 대해서만 미리 오버로딩 해 놓았습니다 .
String str3 = "I love java."String substr1 = "I love";String substr2 = "java.";String str4 = substr1 + substr2;
13
String 클래스위의 프로그램 코드가 실행되었을 때 메모리 상의
객체 및 참조변수들은 다음과 같은 상태를 가집니다 .
14
String 클래스"str3 과 str4 가 내용이 같은데 참조변수 str3 과
str4 가 왜 같은 객체를 가리키지 않는가 ?“ 라고 의문을 제기할 수 있습니다 . 자바 프로그래밍 언어에서는 ‘ +’ 연산자를 오버로딩할 때 new 키워드를 사용하여 두 문자열을 결합한 형태의 새로운 문자열을 생성하도록 하였기 때문에 str4 가 str3 의 객체를 공유하는 것이 아닌 새로운 객체가 생성되는 것입니다 .
15
String 클래스String 클래스는 문자열 객체 생성 및 초기화 ,
문자열 접합 기능외에 다음과 같은 여러 기능들을 제공합니다 .
■ 문자열 비교 ■ 문자열에서 개별문자에 대한 접근 ■ 부분문자열 뽑아내기 ■ 문자열의 대소문자 변환
16
문자열 비교 자바 프로그래밍 언어에서 String 객체를 사용하여
문자열을 처리할 때 ‘ ==’ 연산자를 사용하여서는 문자열 비교를 제대로 할 수 없습니다 . 앞에서도 언급한 바와 같이 , ‘==’ 연산자는 해당 참조변수가 가지는 주소값을 테스트 하며 , 문자열의 내용을 테스트하지는 않습니다 .
따라서 , String 객체의 문자열 비교를 위해서는 equals() 혹은 compareTo() 메소드를 사용하여야 합니다 .
public boolean equals(Object anObject);
17
문자열 비교equal() 메소드는 이 메소드를 호출하는 객체의 원본 (source)
문자열과 인수로 넘어오는 비교 대상 (target) 문자열의 내용이 같을 경우 true 를 , 그렇지 않은 경우 false 를 반환합니다 .
compareTo() 메소드는 대상 문자열이 원본 문자열보다 알파벳 순서로 앞서면 음수 값을 반환하며 , 원본문자열이 대상 문자열보다 앞서면 양수 값을 반환합니다 . 두 문자열이 동일하면 0 의 값을 리턴합니다 .
문자열의 알파벳 순서 비교과정 우선 두 문자열의 첫 번째 알파벳을 비교하고 다른 경우 알파벳 순서상
차이를 리턴하고 첫 번째 비교한 문자가 같은 경우 그 다음 문자를 비교하는 식으로 진행합니다 .
public int compareTo(String anotherString);
18
문자열 비교위 메소드들의 사용 예는 다음과 같습니다 .
String str1 = "test";String str2 = "test";String str3 = "java"; System.out.println(str1.equals(str2));System.out.println(str1.equals(str3)); System.out.println(str1.compareTo(str2));System.out.println(str1.compareTo(str3));System.out.println(str3.compareTo(str1));
19
문자열 비교위 프로그램 코드의 실행결과는 다음과 같습니다 .
truefalse010-10
20
문자열 비교equals() 메소드의 반환 값은 boolean 형식이며
compareTo() 메소드의 반환 값은 int 형이기 때문에 위와 같은 결과가 출력되었습니다 .
str1 과 str2 는 같은 내용의 문자열을 가지므로 equals() 메소드를 사용한 테스트에서 true 값을 반환하며 , str1 과 str3 의 각 객체가 가지는 문자열의 내용이 다르므로 false 를 리턴합니다 .
str1 과 str2 의 문자열을 compareTo() 메소드를 사용하여 비교해 보면 동일한 내용의 문자열을 가지므로 0 값을 리턴합니다 . 그러나 , str1 과 str3 의 비교는 문자열의 첫 번째 문자가 서로 다르고 이들은 알파벳 순서상 10 만큼 떨어져 있기 때문에 위와 같은 결과가 출력되었습니다 .
21
문자열에서 개별문자에 대한 접근 프로그램에서 문자열을 다루다 보면 간혹 문자열내 각
개별문자에 대한 접근을 필요로 하는 경우가 있습니다 . 이러한 경우에 사용할 수 있도록 String 클래스에서는 charAt() 메소드가 준비되어 있습니다 .
charAt() 메소드는 문자열의 지정된 위치에 해당하는 문자를 반환합니다 . 즉 , String 객체 str1 가 “abcde" 라는 문자열을 가지고 있는 경우 str1.chatAt(3) 은 'd‘ 값을 반환합니다 .
char charAt(int index);
부분문자열 뽑아내기 substring 메소드
한 String 객체가 갖고 있는 전체 문자열 중 일부 문자열만 뽑아내어 새로운 문자열 객체를 생성하고자 할 경우
예를들어 , String 객체 str1 이 "abcde" 라는 문자열을 갖는 경우 str1.substring(2, 4) 는 “ cd" 값을 반환합니다 .
str1.substring(2) 와 같이 호출하는 경우 문자열 ”cde" 를 리턴합니다 .
String substring(int beginIndex);String substring(int beginIndex, int endIndex);
23
문자열의 대소문자 변환 String 객체는 문자열 객체의 내용을 모두 대문자로 변경하거나
소문자로 변경할 수 있도록 하는 기능을 지원합니다 .
위 메소드의 사용 예를 들어보면 , str1 문자열 객체가 "originally lowercase" 을 가질 때 , str1.toUpperCase() 메소드 호출을 하면 대문자로 변경된 형태의 문자열인 "ORIGINALLY LOWERCASE" 를 돌려줍니다 .
반면 , str1 문자열 객체가 “ ORIGINALLY UPPERCASE" 를 가질 때 , str1.toLowerCase() 메소드 호출을 하면 소문자로 변경된 ”originally uppercase" 를 반환합니다 .
String toLowerCase();String toUpperCase();
24
public class StringMethodsTest { public static void main(String[] args) { String str1 = "test"; String str2 = "test"; String str3 = "tava"; String str4 = "abcde"; String str5 = "originally lowercase"; String str6 = "ORIGINALLY UPPERCASE"; System.out.println("equals() : " + str1.equals(str2)); System.out.println("equals() : " + str1.equals(str3)); System.out.println("compareTo() : " + str1.compareTo(str2)); System.out.println("compareTo() : " + str1.compareTo(str3)); System.out.println("compareTo() : " + str3.compareTo(str1)); System.out.println("charAt() : " + str4.charAt(3)); System.out.println("substring() : " + str4.substring(2)); System.out.println("substring() : " + str4.substring(2, 4)); System.out.println("toUpperCase() : " + str5.toUpperCase()); System.out.println("toLowerCase() : " + str6.toLowerCase()); }}
25
equals() : trueequals() : falsecompareTo() : 0compareTo() : 4compareTo() : -4charAt() : dsubstring() : cdesubstring() : cdtoUpperCase() : ORIGINALLY LOWERCASEtoLowerCase() : originally uppercase
26
StringBuffer 클래스 String 클래스가 불변성 (immutability) 을 갖는
문자열을 구현하는 반면에 StringBuffer 클래스는 불변성이 없습니다 .
StringBuffer 객체가 갖고 있는 문자열 자체가 임의로 변경될 수 있습니다 .
StringBuffer 클래스에는 존재하는 capacity 라는 멤버변수의 값에 의해서 StringBuffer 객체의 버퍼 크기가 동적으로 변화할 수 있습니다 .
27
StringBuffer 클래스앞에서 String 객체의 생성 및 초기화는 new
키워드를 사용하는 방법과 사용하지 않는두가지 방법으로 할 수 있다고 하였습니다 .
StringBuffer 객체의 생성 및 초기화는 반드시 new 키워드를 사용하여야 합니다 . 만일 , new 키워드를 사용하지 않고 다음과 같이 StringBuffer 객체를 생성하고 초기화하려 하면 , 에러가 발생합니다 .
StringBuffer strbuf1 = "JAVA 2 SCJP";
28
StringBuffer 클래스즉 , "JAVA 2 SCJP" 라는 문자열 객체를
StringBuffer 클래스 타입으로 변환할 수 없다는 것입니다 .
StringBuffer 클래스는 다음과 같은 기능을 제공합니다 .
■ StringBuffer 객체의 문자열과 같은 문자열을 갖는 String 객체 생성하기
■ StringBuffer 객체의 문자열 변경 , 삭제 ■ StringBuffer 객체의 문자열에 임의 문자열 삽입 ■ StringBuffer 객체의 버퍼 크기 조정 ■ StringBuffer 객체가 가지는 문자열의 길이 알아내기
StringBuffer 객체의 문자열과 같은 문자열을 갖는 String 객체 생성하기 StringBuffer 클래스를 사용하는 경우 다른
함수에서는 String 클래스 타입으로 문자열을 요구하는 경우가 종종 발생합니다 .
StringBuffer 클래스는 현재의 문자열 내용을 String 클래스 타입으로 변환하여 반환하도록 하는 toString() 메소드를 제공합니다 .
이 메소드는 원래 Object 클래스에서 정의되어 있는 것이지만 StringBuffer 클래스 내에서 다시 오버라이드 (override) 되어 있습니다 .
String toString();
30 SCJP 5.0 대비 강좌
StringBuffer 객체의 문자열과 같은 문자열을 갖는 String 객체 생성하기예를들어 , StringBuffer 객체 strbuf1 이 "JAVA
2 SCJP" 문자열을 포함하고 있는 경우 strbuf1.toString() 을 호출하면 "JAVA 2 SCJP" 라는 동일한 문자열을 갖는 String 객체를 반환합니다 .
31 SCJP 5.0 대비 강좌
StringBuffer 객체의 문자열 변경 , 삭제 StringBuffer 객체 문자열의 특정 문자를 임의 문자로
대치하기 위해서는 setCharAt() 메소드를 사용합니다 . 현재 객체의 문자열에서 특정 문자를 읽어내기 위해서는 charAt() 메소드를 사용합니다 . 함수 원형은 다음과 같습니다 .
StringBuffer 객체 strbuf1 이 "abcde" 라는 문자열을 가지고 있을때 strbuf1.charAt(3) 은 문자 ‘ d’ 를 반환합니다 . 또 , strbuf1.setCharAt(3, 'z') 은 StringBuffer 객체 strbuf1 이 "abcze" 의 문자열을 갖도록 변경합니다 .
char charAt(int index);void setCharAt(int index, char ch);
32
StringBuffer 객체의 문자열 변경 , 삭제StringBuffer 객체 문자열의 특정 위치에 있는 문자를 삭제하고자 하는
경우는 deleteCharAt() 혹은 delete() 메소드를 사용합니다 .
예를들어 , StringBuffer 객체 strbuf1 이 문자열 “ abcdefg" 를 가지고 있을 때 , delete(1, 3) 은 "첫번째 이후부터 3 번째 문자열까지를 삭제한 "adefg" 을 돌려줍니다 .
현재의 StringBuffer 객체 strbuf1 은 문자열 "adefg" 을 가지는 객체가 되며 불변성을 가지는 String 객체와는 달리 원본 자체가 변경됩니다 .
특정 위치의 한 문자만 삭제하고자 하는 경우에는 deleteCharAt() 메소드를 사용합니다 . 현재의 StringBuffer 객체 strbuf1 은 문자열 ”adefg" 를 가지고 있으며 , deleteCharAt(2) 를 실행하면 두 번째 이후의 한 문자 'e' 가 삭제된 “ adfg" 을 반환합니다 .
char deleteCharAt(int index);void delete(int start, int end);
33
StringBuffer 객체의 문자열에 임의 문자열 추가 , 삽입 StringBuffer 객체에 임의의 문자열을 추가하고자
하는 경우 append() 메소드를 사용합니다 . 대개 인수로 String 객체를 받지만 , int, float,
long, double, character array 등의 타입도 사용가능하도록 오버로딩 (overloading) 되어 있습니다 . StringBuffer append(String str);StringBuffer append(char[] str);StringBuffer append(char[] str, int offset, int len);StringBuffer append(char c);StringBuffer append(boolean b);StringBuffer append(int i);StringBuffer append(long l);StringBuffer append(float f);StringBuffer append(double d);
34 SCJP 5.0 대비 강좌
StringBuffer 객체의 문자열에 임의 문자열 추가 , 삽입append() 메소드를 사용한 예를 들어보면 ,
StringBuffer 객체 strbuf3 이 "abcd" 의 문자열을 가지고 있을 때 , append("_1234") 를 호출하면 strbuf3 객체의 문자열이 "abcd_1234" 로 변경됩니다 .
StringBuffer 객체의 append() 메소드는 자바 프로그래밍 언어에서 ‘ +’ 연산자 오버로딩에 내부적으로 사용되어 있습니다 .
StringBuffer 객체의 끝 부분에 문자열를 추가하는 것 외에 자바 프로그래밍 언어는 StringBuffer 객체 문자열의 임의 위치에 다른 문자열을 삽입할 수 있는 기능을 insert() 메소드를 통하여 지원합니다 .
StringBuffer 객체의 문자열에 임의 문자열 추가 , 삽입
insert() 메소드 역시 append() 메소드처럼 String 객체 외에도 여러 가지 타입의 인수를 받을 수 있도록 오버로딩 (overloading) 되어 있습니다 .
인수 offset 은 삽입 위치를 나타냅니다 . StringBuffer 객체 strbuf1 이 문자열 “ abcde" 를 가질 때 , insert(1, "_1234_") 를 실행하면 "a_1234_bcde" 를 돌려줍니다 .
StringBuffer insert(int offset, Object obj);StringBuffer insert(int offset, String str);StringBuffer insert(int offset, char[] str);StringBuffer insert(int offset, char c);StringBuffer insert(int offset, boolean b);StringBuffer insert(int offset, int i);StringBuffer insert(int offset, long l);StringBuffer insert(int offset, float f);StringBuffer insert(int offset, double d);
StringBuffer 객체의 버퍼 크기 조정 StringBuffer 객체의 버퍼 크기는 동적으로 변경될
수 있습니다 . 버퍼 크기 조정과 관련하여 제공되는 메소드로는 capacity(), setLength() 이 있습니다 .
capacity() 메소드는 현재의 버퍼 capacity 를 돌려주는 메소드입니다 . 버퍼를 원하는 크기로 조정하고자 하는 경우 setLength() 메소드를 사용합니다 .
StringBuffer 객체 strbuf1 의 버퍼 크기를 30 으로 조정하고자 한다면 strbuf1.setLength(30) 과 같이 사용하면 됩니다 . 물론 null 문자 등이 추가되어 크기가 약간씩 차이날 수 있습니다 .
int capacity();void setLength(int newLength);
StringBuffer 객체가 가지는 문자열의 길이 알아내기 StringBuffer 객체가 현재 포함하고 있는 문자열의 길이를 알고 싶은 경우 length() 메소드를 사용합니다 . 함수 원형은 다음과 같습니다 .
예를들어 , StringBuffer 객체 strbuf1 이 "abcde" 의 문자열을 포함하고 있는 경우 strbuf1.length() 는 5를 리턴합니다 .
int length();
Wrapper classesBooleanCharacterByteShortIntegerLongFloatDouble
java.util package
class Date생성자
Date()Date(long msec) : from 1970-01-01 00:00:00
메서드boolean after(Date when)boolean before(Date when)int compareTo(Date anotherDate)long getTime()void setTime(long time)
class Calendarint get(int field)void set(int year, int month, int date)void set(int year, int month, int date, int hour,
int minute)void set(int year, int month, int date, int hour,
int minute, int second)long getTimeInMillis()void setTimeInMillis(long millis)
class CalendarCalendar cal = Calendar.getInstance();int year = cal.get(Calendar.YEAR);int mon = cal.get(Calendar.MONTH) + 1;int day = cal.get(Calendar.DAY_OF_MONTH);int hour = cal.get(Calendar.HOUR_OF_DAY);int min = cal.get(Calendar.MINUTE);int sec = cal.get(Calendar.SECOND);System.out.print(“ 현재시간 : ”);System.out.print(year + “-” + mon + “-” + day + “ ”);
System.out.println(hour + “:” + min + “:” + sec);
class Vector배열 vs 벡터class Vector
void addElement(Object o)int capacity()int elementCount();boolean contains(Object o)int indexOf(Object o)
JTreeJTree(TreeNode root)class DefaultTreeNode implements TreeNode
DefaultTreeNode(Object o)add(Object o)
JTableString[] col_names = {"ID", "이름 ", "직업 ", " 참석 여부 "};
String data[][] = {
{"0181", "Bill Cat", "Political Candidate", "예 "},
{"0915", "Opus Penguin", "Science", "아니오 "}
};
JFrame frame = new JFrame();
frame.addWindowListener(new WindowDestroyer());
JTable table = new JTable(data, col_names);
frame.add(new JScrollPane(table));
frame.pack();
frame.setVisible(true);
Input / Output (IO)IO programming
데이터를 입력받아 처리하거나 (Input)결과를 어떤 출력장치로 출력하도록 (Output)
stream순서가 있는 일련의 데이터를 의미하는 추상적 개념source -> destination
IO stream순차적 데이터의 흐름 : 랜덤엑세스 불가능단방향 : 입력 / 출력 스트림이 따로 존재모든 스트림의 형태는 같음
JFileChooser showDialog(Component parent, String title)
showOpenDialog(Component parent)showSaveDialog(Component parent)setFileSelectionMode(int mode)
JFileChooser.FILES_ONLY JFileChooser.DIRECTORIES_ONLY JFileChooser.FILES_AND_DIRECTORIES
class File파일이나 폴더에 대한 제어Methods
boolean canRead()boolean canWrite()boolean delete()String getPath()String getName()String getParent()boolean isDirectory()String[] list()
Practice파일 정보창 만들기폴더안의 파일 리스트와 속성 보여주기