1 / 52

JAVA ADVANCED java.lang package

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.

asher-mcgee
Télécharger la présentation

JAVA ADVANCED java.lang package

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. JAVA ADVANCEDjava.lang package IT 아카데미

  2. java.lang package

  3. class Object • 자바 모든 클래스의 최상위 클래스 • extends java.lang.Object • 주요 메서드 • boolean equals(Object obj); • String toString(); • protected Object clone(); • Class getClass(); • void notify(); • void notifyAll(); • void wait();

  4. class String • 문자열을 나타내고 처리하는 메서드를 구현한 클래스 • 한번 생성된 문자열은 절대 변하지 않음 • new를 사용한 객체 vs “” 를사용한 객체 • + 연산 : 문자열 결합 • 문자 + 문자 • 문자 + 숫자 • 숫자 + 문자 • 문자 + 객체 • 객체 + 문자

  5. class StringBuffer • 변하는문자열을 다룰 때 사용 (cf. String) • 저장하고 있는 문자열의 내용을 변경 가능 • append method • insert method • replace method • setLength 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() 메소드의 경우 다음과 같은 형식으로 사용됩니다.

  9. String 클래스 • 실행 결과 • str1과 str2에 아무런 변경도 가하지 않습니다. • 단, str1과 str2을 연결한 문자열을 가지는 새로운 객체가 생성되며 이를 str3이 가리키도록 합니다. • 자바 언어에서 일단 한번 String 객체가 생성되면 이 객체의 내용은 어떠한 경우에도 변하지 않습니다. • Note : • concat(), replace() 와 같이 문자열에 대한 변경을 가할 것 같아 보이는 String 클래스의 메소드라 할지라도 원본 문자열은 변하지 않습니다. 다만 변경된 값을 갖는 새로운 문자열 객체를 생성하고 이를 반환하는 것 뿐입니다.

  10. String 클래스 • new 키워드 없이 String s = "abc"; 와 같이 표현하면 무조건 새로운 객체를 생성하는 것은 아니고, 이미 존재하는 String 객체 중에서 내용이 동일한 것이 있는지 찾아봅니다. • 동일한 내용의 String 객체가 이미 존재한다면 객체를 새로 생성하지 않고, 이미 존재하는 객체의 주소만 참조 변수에 할당받아서 그 String 객체를 공유합니다. • new 키워드를 사용하게 되면 같은 내용의 문자열을 포함하는 String 객체의 존재여부와 관계없이 새로운 객체를 생성합니다.

  11. String 클래스 • 따라서, 다음과 같은 str3, str4, str5의 3개 문자열을 선언하였다고 하면, • .

  12. String 클래스 • 또한, 자바 프로그래밍 언어에서는 ‘+’ 연산자에 대해서 문자열의 접합(concatenation)기능을 하도록 오버로딩(overloading)되어 있습니다. • C++이나 여타의 언어처럼 사용자에게 직접 연산자 오버로딩의 기회를 제공하지는 않고, 특이한 경우로 '+' 연산자에 대해서만 미리 오버로딩 해 놓았습니다.

  13. String 클래스 • 위의 프로그램 코드가 실행되었을 때 메모리 상의 객체 및 참조변수들은 다음과 같은 상태를 가집니다.

  14. String 클래스 • "str3과 str4가 내용이 같은데 참조변수 str3과 str4가 왜 같은 객체를 가리키지 않는가?“ 라고 의문을 제기할 수 있습니다. 자바 프로그래밍 언어에서는 ‘+’ 연산자를 오버로딩할 때 new 키워드를 사용하여 두 문자열을 결합한 형태의 새로운 문자열을 생성하도록 하였기 때문에 str4가 str3의 객체를 공유하는 것이 아닌 새로운 객체가 생성되는 것입니다.

  15. String 클래스 • String 클래스는 문자열 객체 생성 및 초기화, 문자열 접합 기능외에 다음과 같은 여러 기능들을 제공합니다. •   ■ 문자열 비교 •   ■ 문자열에서 개별문자에 대한 접근 •   ■ 부분문자열 뽑아내기 •   ■ 문자열의 대소문자 변환

  16. 문자열 비교 • 자바 프로그래밍 언어에서 String 객체를 사용하여 문자열을 처리할 때 ‘==’ 연산자를 사용하여서는 문자열 비교를 제대로 할 수 없습니다. 앞에서도 언급한 바와 같이, ‘==’ 연산자는 해당 참조변수가 가지는 주소값을 테스트 하며, 문자열의 내용을 테스트하지는 않습니다. • 따라서, String 객체의 문자열 비교를 위해서는 equals() 혹은 compareTo() 메소드를 사용하여야 합니다.

  17. 문자열 비교 • equal() 메소드는 이 메소드를 호출하는 객체의 원본(source) 문자열과 인수로 넘어오는 비교 대상(target) 문자열의 내용이 같을 경우 true를, 그렇지 않은 경우 false를 반환합니다. • compareTo() 메소드는 대상 문자열이 원본 문자열보다 알파벳 순서로 앞서면 음수 값을 반환하며, 원본문자열이 대상 문자열보다 앞서면 양수 값을 반환합니다. 두 문자열이 동일하면 0의 값을 리턴합니다. • 문자열의 알파벳 순서 비교과정 • 우선 두 문자열의 첫 번째 알파벳을 비교하고 다른 경우 알파벳 순서상 차이를 리턴하고 첫 번째 비교한 문자가 같은 경우 그 다음 문자를 비교하는 식으로 진행합니다.

  18. 문자열 비교 • 위 메소드들의 사용 예는 다음과 같습니다.

  19. 문자열 비교 • 위 프로그램 코드의 실행결과는 다음과 같습니다.

  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‘ 값을 반환합니다.

  22. 부분문자열 뽑아내기 • substring 메소드 • 한 String 객체가 갖고 있는 전체 문자열 중 일부 문자열만 뽑아내어 새로운 문자열 객체를 생성하고자 할 경우 • 예를들어, String 객체 str1이 "abcde"라는 문자열을 갖는 경우 str1.substring(2, 4)는 “cd" 값을 반환합니다. • str1.substring(2)와 같이 호출하는 경우 문자열 ”cde"를 리턴합니다.

  23. 문자열의 대소문자 변환 • String 객체는 문자열 객체의 내용을 모두 대문자로 변경하거나 소문자로 변경할 수 있도록 하는 기능을 지원합니다. • 위 메소드의 사용 예를 들어보면, str1 문자열 객체가 "originally lowercase"을 가질 때, str1.toUpperCase() 메소드 호출을 하면 대문자로 변경된 형태의 문자열인 "ORIGINALLY LOWERCASE"를 돌려줍니다. • 반면, str1 문자열 객체가 “ORIGINALLY UPPERCASE"를 가질 때, str1.toLowerCase() 메소드 호출을 하면 소문자로 변경된 ”originally uppercase"를 반환합니다.

  24. StringBuffer 클래스 • String 클래스가 불변성(immutability)을 갖는 문자열을 구현하는 반면에 StringBuffer 클래스는 불변성이 없습니다. • StringBuffer 객체가 갖고 있는 문자열 자체가 임의로 변경될 수 있습니다. • StringBuffer 클래스에는 존재하는 capacity라는 멤버변수의 값에 의해서 StringBuffer 객체의 버퍼 크기가 동적으로 변화할 수 있습니다.

  25. StringBuffer 클래스 • 앞에서 String 객체의 생성 및 초기화는 new 키워드를 사용하는 방법과 사용하지 않는두가지 방법으로 할 수 있다고 하였습니다. • StringBuffer 객체의 생성 및 초기화는 반드시 new 키워드를 사용하여야 합니다. 만일, new 키워드를 사용하지 않고 다음과 같이 StringBuffer 객체를 생성하고 초기화하려 하면, 에러가 발생합니다.

  26. StringBuffer 클래스 • 즉, "JAVA 2 SCJP" 라는 문자열 객체를 StringBuffer 클래스 타입으로 변환할 수 없다는 것입니다. • StringBuffer 클래스는 다음과 같은 기능을 제공합니다.   ■ StringBuffer 객체의 문자열과 같은 문자열을 갖는 String 객체 생성하기   ■ StringBuffer 객체의 문자열 변경, 삭제   ■ StringBuffer 객체의 문자열에 임의 문자열 삽입   ■ StringBuffer 객체의 버퍼 크기 조정   ■ StringBuffer 객체가 가지는 문자열의 길이 알아내기

  27. StringBuffer 객체의 문자열과 같은 문자열을 갖는 String 객체 생성하기 • StringBuffer 클래스를 사용하는 경우 다른 함수에서는 String 클래스 타입으로 문자열을 요구하는 경우가 종종 발생합니다. • StringBuffer 클래스는 현재의 문자열 내용을 String 클래스 타입으로 변환하여 반환하도록 하는 toString() 메소드를 제공합니다. • 이 메소드는 원래 Object 클래스에서 정의되어 있는 것이지만 StringBuffer 클래스 내에서 다시 오버라이드(override)되어 있습니다.

  28. StringBuffer 객체의 문자열과 같은 문자열을 갖는 String 객체 생성하기 • 예를들어, StringBuffer 객체 strbuf1이 "JAVA 2 SCJP" 문자열을 포함하고 있는 경우 strbuf1.toString()을 호출하면 "JAVA 2 SCJP" 라는 동일한 문자열을 갖는 String 객체를 반환합니다. SCJP 5.0 대비 강좌

  29. StringBuffer 객체의 문자열 변경, 삭제 • StringBuffer 객체 문자열의 특정 문자를 임의 문자로 대치하기 위해서는 setCharAt() 메소드를 사용합니다. 현재 객체의 문자열에서 특정 문자를 읽어내기 위해서는 charAt()메소드를 사용합니다. 함수 원형은 다음과 같습니다. • StringBuffer 객체 strbuf1이 "abcde"라는 문자열을 가지고 있을때 strbuf1.charAt(3)은 문자 ‘d’를 반환합니다. 또, strbuf1.setCharAt(3, 'z')은 StringBuffer 객체 strbuf1이 "abcze"의 문자열을 갖도록 변경합니다. SCJP 5.0 대비 강좌

  30. StringBuffer 객체의 문자열 변경, 삭제 • StringBuffer 객체 문자열의 특정 위치에 있는 문자를 삭제하고자 하는 경우는 deleteCharAt() 혹은 delete() 메소드를 사용합니다. • 예를들어, StringBuffer 객체 strbuf1이 문자열 “abcdefg"를 가지고 있을 때, delete(1, 3)은 "첫번째 이후부터 3번째 문자열까지를 삭제한 "adefg"을 돌려줍니다. • 현재의 StringBuffer 객체 strbuf1은 문자열 "adefg"을 가지는 객체가 되며 불변성을 가지는 String 객체와는 달리 원본 자체가 변경됩니다. • 특정 위치의 한 문자만 삭제하고자 하는 경우에는 deleteCharAt() 메소드를 사용합니다. 현재의 StringBuffer 객체 strbuf1은 문자열 ”adefg"를 가지고 있으며, deleteCharAt(2)를 실행하면 두 번째 이후의 한 문자 'e'가 삭제된 “adfg"을 반환합니다.

  31. StringBuffer 객체의 문자열에 임의 문자열 추가, 삽입 • StringBuffer 객체에 임의의 문자열을 추가하고자 하는 경우 append() 메소드를 사용합니다. • 대개 인수로 String 객체를 받지만, int, float, long, double, character array 등의 타입도 사용가능하도록 오버로딩(overloading)되어 있습니다.

  32. StringBuffer 객체의 문자열에 임의 문자열 추가, 삽입 • append() 메소드를 사용한 예를 들어보면, StringBuffer객체 strbuf3이 "abcd"의 문자열을 가지고 있을 때, append("_1234")를 호출하면 strbuf3 객체의 문자열이 "abcd_1234"로 변경됩니다. • StringBuffer객체의 append() 메소드는 자바 프로그래밍 언어에서 ‘+’ 연산자 오버로딩에 내부적으로 사용되어 있습니다. • StringBuffer객체의 끝 부분에 문자열를 추가하는 것 외에 자바 프로그래밍 언어는 StringBuffer객체 문자열의 임의 위치에 다른 문자열을 삽입할 수 있는 기능을 insert() 메소드를 통하여 지원합니다. SCJP 5.0 대비 강좌

  33. StringBuffer 객체의 문자열에 임의 문자열 추가, 삽입 • insert() 메소드 역시 append() 메소드처럼 String 객체 외에도 여러 가지 타입의 인수를 받을 수 있도록 오버로딩(overloading)되어 있습니다. • 인수 offset은 삽입 위치를 나타냅니다. StringBuffer 객체 strbuf1이 문자열 “abcde"를 가질 때, insert(1, "_1234_")를 실행하면 "a_1234_bcde"를 돌려줍니다.

  34. StringBuffer 객체의 버퍼 크기 조정 • StringBuffer 객체의 버퍼 크기는 동적으로 변경될 수 있습니다. 버퍼 크기 조정과 관련하여 제공되는 메소드로는 capacity(), setLength()이 있습니다. • capacity() 메소드는 현재의 버퍼 capacity를 돌려주는 메소드입니다. 버퍼를 원하는 크기로 조정하고자 하는 경우 setLength() 메소드를 사용합니다. • StringBuffer 객체 strbuf1의 버퍼 크기를 30으로 조정하고자 한다면 strbuf1.setLength(30)과 같이 사용하면 됩니다. 물론 null 문자 등이 추가되어 크기가 약간씩 차이날 수 있습니다.

  35. StringBuffer 객체가 가지는 문자열의 길이 알아내기 • StringBuffer 객체가 현재 포함하고 있는 문자열의 길이를 알고 싶은 경우 length() 메소드를 사용합니다. 함수 원형은 다음과 같습니다. • 예를들어, StringBuffer 객체 strbuf1이 "abcde"의 문자열을 포함하고 있는 경우 strbuf1.length() 는 5를 리턴합니다.

  36. Wrapper classes • Boolean • Character • Byte • Short • Integer • Long • Float • Double

  37. Utility APIjava.util Package

  38. java.util package

  39. 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)

  40. class Calendar • int 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)

  41. class Calendar Calendar 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);

  42. class Vector • 배열 vs 벡터 • class Vector • void addElement(Object o) • int capacity() • int elementCount(); • boolean contains(Object o) • int indexOf(Object o)

  43. JAVA ADVANCEDJTree / JTable

  44. JTree • JTree(TreeNode root) • class DefaultTreeNode implements TreeNode • DefaultTreeNode(Object o) • add(Object o)

  45. JTable String[] 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);

  46. File IO

  47. Input / Output (IO) • IO programming • 데이터를 입력받아 처리하거나 (Input) • 결과를 어떤 출력장치로 출력하도록 (Output) • stream • 순서가 있는 일련의 데이터를 의미하는 추상적 개념 • source -> destination • IO stream • 순차적 데이터의 흐름 : 랜덤엑세스 불가능 • 단방향 : 입력 / 출력 스트림이 따로 존재 • 모든 스트림의 형태는 같음

  48. 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

More Related