Java advanced java lang package
Sponsored Links
This presentation is the property of its rightful owner.
1 / 52

JAVA ADVANCED java.lang package PowerPoint PPT Presentation


  • 100 Views
  • Uploaded on
  • Presentation posted in: General

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.

Download Presentation

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


JAVA ADVANCEDjava.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

  • 문자열을 나타내고 처리하는 메서드를 구현한 클래스

  • 한번 생성된 문자열은 절대 변하지 않음

  • new를 사용한 객체 vs “” 를사용한 객체

  • + 연산 : 문자열 결합

    • 문자 + 문자

    • 문자 + 숫자

    • 숫자 + 문자

    • 문자 + 객체

    • 객체 + 문자


class StringBuffer

  • 변하는문자열을 다룰 때 사용 (cf. String)

  • 저장하고 있는 문자열의 내용을 변경 가능

    • append method

    • insert method

    • replace method

    • setLength method


String/StringBuffer

  • String 클래스는

    • 불변성(immutablity) 특성으로 인해 항상 읽기전용 상태를 유지합니다.

    • 어떠한 메소드 호출에도 원본 문자열이 변경되는 경우는 없습니다.

    • String 클래스에서“문자열의 대소문자 변환”등의 문자열 변경을 위한 메소드는 원래의 문자열의 내용이 변경되는 것이 아니라 원본은 원본대로 있고, 새로운 String 객체(복사본)을 생성하면서 그 내용을 원본과 다르게 바꾸는 것입니다.


String/StringBuffer

  • 반면, StringBuffer클래스에서는 String클래스와는 달리 불변성(immutability)이 없습니다.

    • 즉, StringBuffer클래스의 메소드를 사용하면 자신의 문자열 데이터를 변경시킬 수 있습니다.

  • 문자열 처리가 많은 자바 프로그램을 작성할 때 부하를 최소화 하기 위해서 String 클래스 보다 StringBuffer클래스의 사용을 권장하는 것도 이러한 이유에서 입니다.

  • 그러나, String 클래스를 사용함으로써 얻어지는 장점도 무시할 수 없으므로 어떤 것이 일방적으로 좋다고 말할 수는 없습니다. 일종의 이율배반(tradeoff)의 관계 입니다.


String 클래스

  • 예를들어, 두 개의 문자열 str1, str2를 str3이라는 하나의 문자열로 연결하는 concat() 메소드의 경우 다음과 같은 형식으로 사용됩니다.


String 클래스

  • 실행 결과

    • str1과 str2에 아무런 변경도 가하지 않습니다.

    • 단, str1과 str2을 연결한 문자열을 가지는 새로운 객체가 생성되며 이를 str3이 가리키도록 합니다.

    • 자바 언어에서 일단 한번 String 객체가 생성되면 이 객체의 내용은 어떠한 경우에도 변하지 않습니다.

  • Note :

    • concat(), replace() 와 같이 문자열에 대한 변경을 가할 것 같아 보이는 String 클래스의 메소드라 할지라도 원본 문자열은 변하지 않습니다. 다만 변경된 값을 갖는 새로운 문자열 객체를 생성하고 이를 반환하는 것 뿐입니다.


String 클래스

  • new 키워드 없이 String s = "abc"; 와 같이 표현하면 무조건 새로운 객체를 생성하는 것은 아니고, 이미 존재하는 String 객체 중에서 내용이 동일한 것이 있는지 찾아봅니다.

    • 동일한 내용의 String 객체가 이미 존재한다면 객체를 새로 생성하지 않고, 이미 존재하는 객체의 주소만 참조 변수에 할당받아서 그 String 객체를 공유합니다.

  • new 키워드를 사용하게 되면 같은 내용의 문자열을 포함하는 String 객체의 존재여부와 관계없이 새로운 객체를 생성합니다.


String 클래스

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

  • .


String 클래스

  • 또한, 자바 프로그래밍 언어에서는 ‘+’ 연산자에 대해서 문자열의 접합(concatenation)기능을 하도록 오버로딩(overloading)되어 있습니다.

  • C++이나 여타의 언어처럼 사용자에게 직접 연산자 오버로딩의 기회를 제공하지는 않고, 특이한 경우로 '+' 연산자에 대해서만 미리 오버로딩 해 놓았습니다.


String 클래스

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


String 클래스

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


String 클래스

  • String 클래스는 문자열 객체 생성 및 초기화, 문자열 접합 기능외에 다음과 같은 여러 기능들을 제공합니다.

  •   ■ 문자열 비교

  •   ■ 문자열에서 개별문자에 대한 접근

  •   ■ 부분문자열 뽑아내기

  •   ■ 문자열의 대소문자 변환


문자열 비교

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

  • 따라서, String 객체의 문자열 비교를 위해서는 equals() 혹은 compareTo() 메소드를 사용하여야 합니다.


문자열 비교

  • equal() 메소드는 이 메소드를 호출하는 객체의 원본(source) 문자열과 인수로 넘어오는 비교 대상(target) 문자열의 내용이 같을 경우 true를, 그렇지 않은 경우 false를 반환합니다.

  • compareTo() 메소드는 대상 문자열이 원본 문자열보다 알파벳 순서로 앞서면 음수 값을 반환하며, 원본문자열이 대상 문자열보다 앞서면 양수 값을 반환합니다. 두 문자열이 동일하면 0의 값을 리턴합니다.

  • 문자열의 알파벳 순서 비교과정

    • 우선 두 문자열의 첫 번째 알파벳을 비교하고 다른 경우 알파벳 순서상 차이를 리턴하고 첫 번째 비교한 문자가 같은 경우 그 다음 문자를 비교하는 식으로 진행합니다.


문자열 비교

  • 위 메소드들의 사용 예는 다음과 같습니다.


문자열 비교

  • 위 프로그램 코드의 실행결과는 다음과 같습니다.


문자열 비교

  • equals() 메소드의 반환 값은 boolean형식이며 compareTo() 메소드의 반환 값은 int형이기 때문에 위와 같은 결과가 출력되었습니다.

  • str1과 str2는 같은 내용의 문자열을 가지므로 equals() 메소드를 사용한 테스트에서 true 값을 반환하며, str1과 str3의 각 객체가 가지는 문자열의 내용이 다르므로 false를 리턴합니다.

  • str1과 str2의 문자열을 compareTo() 메소드를 사용하여 비교해 보면 동일한 내용의 문자열을 가지므로 0값을 리턴합니다. 그러나, str1과 str3의 비교는 문자열의 첫 번째 문자가 서로 다르고 이들은 알파벳 순서상 10만큼 떨어져 있기 때문에 위와 같은 결과가 출력되었습니다.


문자열에서 개별문자에 대한 접근

  • 프로그램에서 문자열을 다루다 보면 간혹 문자열내 각 개별문자에 대한 접근을 필요로 하는 경우가 있습니다. 이러한 경우에 사용할 수 있도록 String 클래스에서는 charAt() 메소드가 준비되어 있습니다.

  • charAt() 메소드는 문자열의 지정된 위치에 해당하는 문자를 반환합니다. 즉, String 객체 str1가 “abcde"라는 문자열을 가지고 있는 경우 str1.chatAt(3)은 'd‘ 값을 반환합니다.


부분문자열 뽑아내기

  • substring 메소드

    • 한 String 객체가 갖고 있는 전체 문자열 중 일부 문자열만 뽑아내어 새로운 문자열 객체를 생성하고자 할 경우

  • 예를들어, String 객체 str1이 "abcde"라는 문자열을 갖는 경우 str1.substring(2, 4)는 “cd" 값을 반환합니다.

  • str1.substring(2)와 같이 호출하는 경우 문자열 ”cde"를 리턴합니다.


문자열의 대소문자 변환

  • String 객체는 문자열 객체의 내용을 모두 대문자로 변경하거나 소문자로 변경할 수 있도록 하는 기능을 지원합니다.

  • 위 메소드의 사용 예를 들어보면, str1 문자열 객체가 "originally lowercase"을 가질 때, str1.toUpperCase() 메소드 호출을 하면 대문자로 변경된 형태의 문자열인 "ORIGINALLY LOWERCASE"를 돌려줍니다.

  • 반면, str1 문자열 객체가 “ORIGINALLY UPPERCASE"를 가질 때, str1.toLowerCase() 메소드 호출을 하면 소문자로 변경된 ”originally uppercase"를 반환합니다.


StringBuffer 클래스

  • String 클래스가 불변성(immutability)을 갖는 문자열을 구현하는 반면에 StringBuffer 클래스는 불변성이 없습니다.

  • StringBuffer 객체가 갖고 있는 문자열 자체가 임의로 변경될 수 있습니다.

  • StringBuffer 클래스에는 존재하는 capacity라는 멤버변수의 값에 의해서 StringBuffer 객체의 버퍼 크기가 동적으로 변화할 수 있습니다.


StringBuffer 클래스

  • 앞에서 String 객체의 생성 및 초기화는 new 키워드를 사용하는 방법과 사용하지 않는두가지 방법으로 할 수 있다고 하였습니다.

  • StringBuffer 객체의 생성 및 초기화는 반드시 new 키워드를 사용하여야 합니다. 만일, new 키워드를 사용하지 않고 다음과 같이 StringBuffer 객체를 생성하고 초기화하려 하면, 에러가 발생합니다.


StringBuffer 클래스

  • 즉, "JAVA 2 SCJP" 라는 문자열 객체를 StringBuffer 클래스 타입으로 변환할 수 없다는 것입니다.

  • StringBuffer 클래스는 다음과 같은 기능을 제공합니다.

      ■ StringBuffer 객체의 문자열과 같은 문자열을 갖는 String 객체 생성하기

      ■ StringBuffer 객체의 문자열 변경, 삭제

      ■ StringBuffer 객체의 문자열에 임의 문자열 삽입

      ■ StringBuffer 객체의 버퍼 크기 조정

      ■ StringBuffer 객체가 가지는 문자열의 길이 알아내기


StringBuffer 객체의 문자열과 같은 문자열을 갖는 String 객체 생성하기

  • StringBuffer 클래스를 사용하는 경우 다른 함수에서는 String 클래스 타입으로 문자열을 요구하는 경우가 종종 발생합니다.

  • StringBuffer 클래스는 현재의 문자열 내용을 String 클래스 타입으로 변환하여 반환하도록 하는 toString() 메소드를 제공합니다.

  • 이 메소드는 원래 Object 클래스에서 정의되어 있는 것이지만 StringBuffer 클래스 내에서 다시 오버라이드(override)되어 있습니다.


StringBuffer 객체의 문자열과 같은 문자열을 갖는 String 객체 생성하기

  • 예를들어, StringBuffer 객체 strbuf1이 "JAVA 2 SCJP" 문자열을 포함하고 있는 경우 strbuf1.toString()을 호출하면 "JAVA 2 SCJP" 라는 동일한 문자열을 갖는 String 객체를 반환합니다.

SCJP 5.0 대비 강좌


StringBuffer 객체의 문자열 변경, 삭제

  • StringBuffer 객체 문자열의 특정 문자를 임의 문자로 대치하기 위해서는 setCharAt() 메소드를 사용합니다. 현재 객체의 문자열에서 특정 문자를 읽어내기 위해서는 charAt()메소드를 사용합니다. 함수 원형은 다음과 같습니다.

  • StringBuffer 객체 strbuf1이 "abcde"라는 문자열을 가지고 있을때 strbuf1.charAt(3)은 문자 ‘d’를 반환합니다. 또, strbuf1.setCharAt(3, 'z')은 StringBuffer 객체 strbuf1이 "abcze"의 문자열을 갖도록 변경합니다.

SCJP 5.0 대비 강좌


StringBuffer 객체의 문자열 변경, 삭제

  • StringBuffer 객체 문자열의 특정 위치에 있는 문자를 삭제하고자 하는 경우는 deleteCharAt() 혹은 delete() 메소드를 사용합니다.

  • 예를들어, StringBuffer 객체 strbuf1이 문자열 “abcdefg"를 가지고 있을 때, delete(1, 3)은 "첫번째 이후부터 3번째 문자열까지를 삭제한 "adefg"을 돌려줍니다.

  • 현재의 StringBuffer 객체 strbuf1은 문자열 "adefg"을 가지는 객체가 되며 불변성을 가지는 String 객체와는 달리 원본 자체가 변경됩니다.

  • 특정 위치의 한 문자만 삭제하고자 하는 경우에는 deleteCharAt() 메소드를 사용합니다. 현재의 StringBuffer 객체 strbuf1은 문자열 ”adefg"를 가지고 있으며, deleteCharAt(2)를 실행하면 두 번째 이후의 한 문자 'e'가 삭제된 “adfg"을 반환합니다.


StringBuffer 객체의 문자열에 임의 문자열 추가, 삽입

  • StringBuffer 객체에 임의의 문자열을 추가하고자 하는 경우 append() 메소드를 사용합니다.

  • 대개 인수로 String 객체를 받지만, int, float, long, double, character array 등의 타입도 사용가능하도록 오버로딩(overloading)되어 있습니다.


StringBuffer 객체의 문자열에 임의 문자열 추가, 삽입

  • append() 메소드를 사용한 예를 들어보면, StringBuffer객체 strbuf3이 "abcd"의 문자열을 가지고 있을 때, append("_1234")를 호출하면 strbuf3 객체의 문자열이 "abcd_1234"로 변경됩니다.

  • StringBuffer객체의 append() 메소드는 자바 프로그래밍 언어에서 ‘+’ 연산자 오버로딩에 내부적으로 사용되어 있습니다.

  • StringBuffer객체의 끝 부분에 문자열를 추가하는 것 외에 자바 프로그래밍 언어는 StringBuffer객체 문자열의 임의 위치에 다른 문자열을 삽입할 수 있는 기능을 insert() 메소드를 통하여 지원합니다.

SCJP 5.0 대비 강좌


StringBuffer 객체의 문자열에 임의 문자열 추가, 삽입

  • insert() 메소드 역시 append() 메소드처럼 String 객체 외에도 여러 가지 타입의 인수를 받을 수 있도록 오버로딩(overloading)되어 있습니다.

  • 인수 offset은 삽입 위치를 나타냅니다. StringBuffer 객체 strbuf1이 문자열 “abcde"를 가질 때, insert(1, "_1234_")를 실행하면 "a_1234_bcde"를 돌려줍니다.


StringBuffer 객체의 버퍼 크기 조정

  • StringBuffer 객체의 버퍼 크기는 동적으로 변경될 수 있습니다. 버퍼 크기 조정과 관련하여 제공되는 메소드로는 capacity(), setLength()이 있습니다.

  • capacity() 메소드는 현재의 버퍼 capacity를 돌려주는 메소드입니다. 버퍼를 원하는 크기로 조정하고자 하는 경우 setLength() 메소드를 사용합니다.

  • StringBuffer 객체 strbuf1의 버퍼 크기를 30으로 조정하고자 한다면 strbuf1.setLength(30)과 같이 사용하면 됩니다. 물론 null 문자 등이 추가되어 크기가 약간씩 차이날 수 있습니다.


StringBuffer 객체가 가지는 문자열의 길이 알아내기

  • StringBuffer 객체가 현재 포함하고 있는 문자열의 길이를 알고 싶은 경우 length() 메소드를 사용합니다. 함수 원형은 다음과 같습니다.

  • 예를들어, StringBuffer 객체 strbuf1이 "abcde"의 문자열을 포함하고 있는 경우 strbuf1.length() 는 5를 리턴합니다.


Wrapper classes

  • Boolean

  • Character

  • Byte

  • Short

  • Integer

  • Long

  • Float

  • Double


Utility APIjava.util Package


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


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


class Vector

  • 배열 vs 벡터

  • class Vector

    • void addElement(Object o)

    • int capacity()

    • int elementCount();

    • boolean contains(Object o)

    • int indexOf(Object o)


JAVA ADVANCEDJTree / JTable


JTree

  • JTree(TreeNode root)

  • class DefaultTreeNode implements TreeNode

    • DefaultTreeNode(Object o)

    • add(Object o)


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


File IO


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

  • 파일 정보창 만들기

  • 폴더안의 파일 리스트와 속성 보여주기


  • Login