java.lang 패키지 - accidentlywoo/java GitHub Wiki

java.lang 패키지


  1. java.lang 패키지의 클래스 계층 구조를 이해하고, Object클래스 및 Wrapper 클래스의 특징과 메소드들을 설명할 수 있다.
  2. String 클래스와 StringBuffer 클래스의 특징을 이해하여 각 특성에 맞게 메서드를 활용할 수 있다.

java.lang 패키지

java.lang 패키지 개요

-> 가장 기본이 되는 필수 클래스들과 인터페이스들이 포함된 패키지

클래스 구현 시 다른 패키지에 있는 클래스를 이용할 경우, 반드시 import 구문을 사용해서 포함시켜야 함

java.lang 패키지의 클래스나 인터페이스들을 import 구문 없이 사용할 수 있도록 함

  1. Object : java.lang 패키지 내의 최상위 클래스 -->

  2. String : 변하지 않는 문자열을 다룰 때 사용

  3. StringBuffer : 내용이 계속 변하는 문자열을 다룰 때 사용

  4. Boolean

  5. Character

  6. Number -->

  7. Byte

  8. Short

  9. Integer

  10. Long

  11. Float

  12. Double

Object 클래스 소개

  • java.lang.Object 클래스 자바 API의 모든 클래스와 사용자가 정의한 모든 클래스의 최상위 클래스 모든 자바 클래스들은 Object 클래스로부터 상속받는다는 의미임 Object 클래스의 상속은 소스 상에 명시하지 않아도 자동으로 이루어짐
public class HelloWorld {
  main{
     sysout("Hello, Java");
  }
}

--도스 창에서 HelloWorld.java 파일을 컴파일 한 후 javap 명령어 실행-->

$>javac HelloWorld.java
Compiled from "HelloWorld.java"
public class HelloWorld extends java.lang.Object {
  public HelloWorld();
  public static void main(java.lang.String[]);
}

Object 클래스는 클래스 정의 시 클래스 선언부에 명시적으로 extends java.lang.Object를 지정하지 않아도 자동으로 상속받게 됨. -> 자바의 모든 클래스는 부모인 Object 클래스의 모든 변수와 메서드를 상속 받아 사용 가능함

Object 클래스 소개

  • boolean equals(Object obj) : 두 개의 객체가 같은지 비교하여 같으면 true를, 같지 않으면 false를 반환함
  • String toString() : 현재 객체의 문자열을 반환함
  • protected Object clone() : 객체를 복사함
  • protected void finalize() : 가비지 컬렉션 직전에 객체의 리소스를 정리할 때 호출함
  • Class getClass() : 객체의 클래스형을 반환함
  • int hashCode() : 객체의 코드 값을 반환함
  • void notify() : wait된 Thread 실행을 제개할 때 호출함
  • void notifyAll() : wait된 모든 Thread 실행을 재개할 때 호출함
  • void wait() : Thread를 일시적으로 중지할 때 호출함
  • void wait(long timeout) : 주어진 시간만큼 Thread를 일시적으로 중지할 때 호출함
  • void wait(long timeout, int nanos) : 주어진 시간만큼 Thread를 일시적으로 중지할 때 호출함

equals() 메서드

== 연산자는 자바에서 값을 비교하기 위해서 사용하는 연산자

  • 기본형 변수가 값 자체를 가지기 때문에 값을 비교할 수 있음

  • 참조형 메모리의 다른 위치에 생성된 객체의 주소 값이 객체 참조 변수에 저장됨 객체의 내용을 비교하는 것이 아니라 주소 값이 같은지 여부를 비교함

Object 클래스가 제공하는 equals() 메서드는 비교 대상이 되는 두 개의 주소 값을 비교하는 것이 아니라 객체의 내용을 비교할 때 사용함

== : 객체의 주소값 비교 equals : 객체의 내용 비교

Object 클래스가 제공하는 equals() 메서드는 객체의 주소 값을 비교하는 '=='연산자와 동일하게 동작함

public boolean equals(Object obj){
return (this == obj);
}

Object 클래스를 상속한 모든 자식 클래스에서 equals() 메서드를 Overriding 하지 않으면 Object로부터 상속된 메서드를 사용함

특정 클래스로부터 생성된 객체들의 내용을 비교하는 로직을 개발하기 위해서는 모든 클래스에 equals() 메서드를 적절하게 Overriding 해야 함

toString() 메서드

수시로 변하는 객체의 변수 값들을 화면에 간단하게 출력하고자 할 때 사용함 객체의 클래스 타입 이름과 이 객체의 코드 값을 16진수 문자열로 리턴하도록 구현함

public String toString(){
return getClass().getName() + "@"+Integer.toHexString(hashCode());
}

Object 클래스로부터 상속받은 메서드를 그대로 이용하면 의도했던 객체의 상태를 확인할 수 없음 -> toString() 메서드는 Object를 상속한 자식 클래스에서 적절하게 Overriding 하여 사용해야 함

sysout 메서드 호출 시 자동으로 호출되기 때문에 생략 가능함

equals(), toString() 자동 생성

Object 클래스를 상속한 자식 클래스에서 반드시 재정의해야 원래의 의도대로 사용 가능함

이클립스는 equals() 메서드와 toString() 메서드를 자동으로 생성할 수 있는 기능을 제공함

Wrapper 클래스 소개

자바에서는 8가지 기본 데이터 타입을 객체로 사용할 수 있도록 지원함 -> 기본 데이터 타입에 해당하는 클래스가 제공된다는 의미임

기본 데이터 타입에 따른 객체를 지원하기 위해 각각의 데이터 타입과 관련된 클래스를 제공함 -> Wrapper 클래스

  • Boolean : boolean
  • Character : char
  • Byte : byte
  • Short : short
  • Integer : int
  • Long : long
  • Float : float
  • Double : double

8가지의 Wrapper 클래스의 특징은? -> 사용자의 문자열 입력을 다양한 기본 데이터 타입으로 변환하는 편리한 메서드들을 제공함 Wrapper 클래스 객체는 한 번 생성되면 그 값이 변할 수 없음

Integer(int value) : value 값의 정수를 저장한 객체를 생성함 Integer(String s) : s 값의 문자열을 정수로 저장한 객체를 생성함

  • Integer 클래스의 메서드 byte byteValue() : 현재 객체의 값을 byte 값으로 변환함 int compareTo(Integer anotherInteger) : 현재 객체의 정수값을 다른 Integer 객체의 정수 값과 비교하여 그 결과를 음수, 양수, 0으로 변환함 int compareTo(Object o) : o 객체와 같은 값을 가진 객체인지 비교하여 그 결과를 음수, 양수, 0으로 변환함 static Integer decode(String nm) : nm 값을 정수 값으로 변환하여 저장한 객체를 변환함 double doubleValue() : 현재 객체의 값을 double 값으로 변환함 boolean equals(Object obj) : obj 객체와 같은 값을 가졌는지의 여부를 true, false로 변환함 float floatValue() : 현재 객체의 값을 float값으로 변환함 int hashCode() : 현재 객체의 코드 값으로 변환함 int intValue() : 현재 객체를 int 형으로 변환함 long longValue() : 현재 객체를 long형으로 변환함 static int parseInt(String s) : 문자열을 10진수의 int형으로 변환함 *static int parseInt(String s, int radix) : 문자열을 주어진 radix의 int형으로 변환함 short shortValue() : 현재 객체를 short형으로 변환함 static String toBinaryString(int i) : 현재 객체를 2진수 값을 문자열로 변환함 static String toHexString(int i) : 현재 객체의 16진수 값을 문자열로 변환함 static String toOctalString(int i) : 현재 객체의 8진수 값을 문자열로 변환함 String toString() : 현재 객체를 String으로 변환함 static String toString(int i) : i값을 String으로 변환함 static String toString(int i, int radix) : i값을 주어진 radix의 String으로 변환함 static Integer valueOf(String s) : s의 정수값을 가진 객체로 변환함 static Integer valueOf(String s, int radix) : s의 정수값을 주어진 radix형을 가진 객체로 뱐환함

String 클래스

String 객체는 여러 개의 문자들로 이루어진 문자 배열 형태로 생성되고, 인덱스는 0부터 시작함

문자열 객체를 생성하고 처리하기 위해서는 String 클래스를 사용해야 함

  • String 클래스의 생성자 *String() : 빈 문자열인 객체를 생성함 *String(byte[] bytes) : byte 배열의 내용을 String 객체로 생성함 String(byte[] byte, int offset, int length) : byte배열의 offset 위치부터 count개만큼의 내용을 String 객체로 생성함 String(byte[] bytes, int offset, int length, String charsetName) : byte배열의 offset 위치부터 count개만큼의 내용을 지정된 문자 세트로 String 객체로 생성함 String(char[] value) : char 배열의 내용을 String 객체로 생성함 String(char[] value, int offset, int count) : char배열의 offset 위치로부터 count개만큼의 내용을 String 객체로 생성함 String(String original) : String 문자열을 가진 객체를 생성함 String(StringBuffer buffer) : StringBuffer문자열을 가진 객체를 생성함

  • String 클래스의 메서드 *char charAt(int index) : index번째 문자를 반환함 int compareTo(Object o) : o와 비교하여 결과로 양수, 음수 0의 값을 반환함 int compareTo(String anotherString) : 2개의 문자열을 비교하여 결과로 양수, 음수, 0의 값을 반환함 int compareToIgnoreCase(String str) : 대소문자를 구분하지 않고 2개의 문자열을 비교하여 결과로 양수, 음수, 0의 값을 반환함 *String concat(String str) : '+'연산자처럼 문자열을 결합함 boolean contentEquals(StringBuffer sb) : StringBuffer와 문자열을 비교하여 true,false를 반환함 static String copyValueOf(char[] data) : 문자 배열값을 문자열로 복사함 static String copyValueOf(char[] data, int offset, int count) : 문자 배열의 특정 위치부터 몇 개의 문자 값을 문자열로 복사함 *boolean endsWidth(String suffix) : 특정 문자열로 끝나는지 확인하여 true,false를 반환함 *boolean equals(Object anObject) : 2개의 문자열 값을 비교하여 true,false를 반환함 *boolean equalsIgnoreCase(String anotherString) : 대소문자를 구분하지 않고 2개의 문자열 값과 비교하여 true, false를 반환함 *byte[]getBytes() : 문자열을 바이트 배열로 변환함 byte[]getBytes(String charsetName) : 문자열을 지정된 문자 세트의 바이트 배열로 변환함 void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) : 문자열의 일부를 문자 배열로 생성함 int hashCode() : Object 클래스의 메서드를 재정의함 *int indexOf(int ch) : ch를 유니코드로 하는 문자의 위치를 반환함 *int indexOf(int ch, int fromIndex) : fromIndex위치로부터 ch를 유니코드로 하는 문자의 위치를 반환함 *indexOf(String str) : str 문자열의 위치를 반환함 *int indexOf(String str, int fromIndex) : fromIndex위치로부터 str문자열의 위치를 반환함 *int lastIndexOf(int ch) : ch를 유니코드로 하는 문자의 마지막 인덱스의 위치를 반환함 *int lastIndexOf(int ch, int fromIndex) : fromIndex로부터 ch를 유니코드로 하는 문자의 마지막 인덱스의 위치를 반환함 *int lastIndexOf(String str) : str문자의 마지막 위치를 반환 *int lastIndexOf(String str, int fromIndex) : fromIndex로부터 str문자열의 마지막 위치를 반환함 *int length() : 문자열의 길이를 반환함 boolean matches(String regex) : 두 개의 문자열이 일치하는지의 여부를 비교함 String replace(char oldChar, char newChar) : oldChar를 newChar로 변환함 *String[]split(String regex) : 지정된 regex를 중심으로 여러 개의 문자열로 배열로 분리함 *String[]split(String regex, int limit) : 지정된 개수만큼 지정된 regex를 중심으로 여러 개의 문자열 배열로 분리함 *boolean startsWith(String prefix) : 특정 문자열로 시작하는지 비교함 *String substring(int beginIndex) : 특정 위치부터의 문자열만 반환함 *String substring(int beginIndex, int endIndex) : 지정된 특정 위치부터 특정 위치까지의 문자열만 반환함 char[]toCharArray() : 문자배열을 반환함 *String toLowerCase() : 소문자로 변환함 String toString() : String으로 변환함.Object클래스의 메서드 Overriding임 *String toUpperCase() : 대문자로 변환함 *String trim() : 문자열 양쪽의 공백을 제거함 static String valueOf(boolean b) : boolean 데이터 타입을 문자열로 변환함 static String valueOf(char c) : char데이터 타입을 문자열로 변환함 static String valueOf(char[] data) : 문자 배열 데이터 타입을 문자열로 변환함 static String valueIf(char[] data,int offset, int count) : 문자 배열의 특정 위치부터 몇 개의 문자만을 문자열로 변환함 static String valueOf(double d) : double데이터 타입을 문자열로 변환함 static String valueOf(float f) : float 데이터 타입을 문자열로 변환함 static String valueOf(int i) : int 데이터 타입을 문자열로 변환함 static String valueOf(long l) : long 데이터 타입을 문자열로 변환함 static String valueOf(Object obj) : 객체를 문자열로 변환함

String 클래스의 특징

String 객체는 한 번 생성되면 문자열 내용이 변경되지 않음 String 클래스가 제공하는 모든 메서드는 메서드 실행 결과를 또 다른 문자열 객체로 리턴함 -> 프로그램에서 변하지 않은 문자열을 표현할 때 많이 사용함

String 클래스는 두 가지 형태의 객체 생성 방법을 제공함

String name1 = new String("자바전자");
String name2 = "자바마트";

String 클래스의 객체 생성은 배열 객체 생성과 비슷함 String객체도 new 연산자를 사용하지 않고 객체 생성이 가능함

자바의 기본 데이터 타입처럼 변수에 값을 할당하는 방법으로 객체 생성이 가능함 new 연산자를 사용하지 않고 문자열을 저장한 변수는 컴파일 시점에 생성되어 메모리를 할당 받음 동일한 문자열을 가진 String이라면 같은 문자열이 저장된 주소 값을 재사용함

String cN1 = "자바전자";
String cN2 = "자바전자";

이미 동일한 문자열 객체가 있기 때문에 기존의 문자열의 주소만 복사하여 사용함

String cN1 = "자바전자";
String cN2 = cN1;

동일하게 동작

  • '+'연산자 문자열과 '+'연산자를 결합하여 사용할 경우 '문자열 결합'의 의미로 사용함 '+'를 기준으로 연산자 양쪽 중 어느 하나라도 String 타입의 데이터가 오면 나머지 한쪽도 String 타입으로 변환되어 두 개의 문자열을 결합함

String클래스는 문자열이 사용될 때마다 문자의 길이를 다시 계산할 필요가 없기 때문에 편리함

StringBuffer 클래스

자바 프로그램 내에서 변하는 문자열을 다룰 떄 사용함 StringBuffer 클래스의 객체는 크기가 동적임 -> 객체 생성시 크기를 지정하지 않아도 기본적으로 16개의 문자를 저장할 수 있는 버퍼 공간을 가짐

  • String 클래스의 객체 한 번 생성되면 그 내용이 변하지 않음

  • StringBuffer 클래스의 객체 한 번 생성된 후에도 계속하여 저장하고 있는 문자열의 내용을 변경할 수 있음 -> StringBuffer 클래스의 메서드는 문자열 처리 후의 결과를 원래의 StringBuffer객체에 반영함 메서드 리턴 타입은 void임

  • StringBuffer 클래스의 생성자 StrinfBuffer() : 초기 문자열이 없고 16개의 문자를 저장할 수 있는 버퍼를 가진 객체를 생성함 StringBuffer(String str) : str의 초기 문자열을 가지고 16개의 문자를 저장할 수 있는 버퍼를 가진 객체를 생성함 StringBuffer(int length) : 초기 문자열이 없고 length개의 문자를 저장할 수 있는 버퍼를 가진 객체를 생성함

  • StringBuffer 클래스의 메서드 *StringBuffer append(String str) : 문자열 데이터를 현재 문자열 끝에 추가함 -> 모든 데이터타입 지원~ *int capacity() : 현재 문자열의 총 용량임 *char charAt(int index) : index위치의 문자를 반환함 *StringBuffer delete(int start, int end) : start에서 end까지의 문자열 중에서 삭제한 문자열을 반환함 *StringBuffer insert(int offset, String str) : offset위치에 문자열 데이터를 삽입함 -> 모든 데이터타입 지원~ *int lastIndexOf(String str) : str의 최종 인덱스 위치를 반환함 *int lastIndexOf(String str, int fromIndex) : fromIndex로부터 시작하여 str의 최종 인덱스 위치를 반환함 *int length() : 문자열 내의 문자 개수를 반환함 *StringBuffer replace(int start, int end, String str) : start에서 end의 문자열을 str 문자열로 대체하여 반환함 *String substring(int start) : start 위치로부터의 일부 문자열을 반환함 *String substring(int start, int end) : start에서 end까지의 일부 문자열을 반환함 *String toString() : String으로 반환함

StringBuffer 클래스 사용

'+'연산자를사용하여 문자열 결합X new연산자를 사용하지 않고 객체를 생성X

  • String 클래스 메모리 처리 방법 내부적으로 StringBuffer객체를 생성한 후에 문자열을 결합 후 toString() 메서드를 호출하여 새로운 String 객체를 리턴함 -> String클래스는 간단한 문자열을 처리할 때 가독성이 좋고, 손쉽게 문자열을 처리할 수 있음.

  • StringBuffer 클래스 메모리 처리 방법 StringBuffer 객체에 문자열을 직접 추가하므로, 하나의 StringBuffer객체만 유지할 수 있음 ->StringBuffer클래스를 선호함 StringBuffer클래스는 문자열 처리 시 속도가 빠르고 메모리 사용을 덜 하게 되므로 효율적임