[Java] Class Wrapper

(Modify : 2017-09-18)

java.lang 패키지

자바프로그래밍에 가장 기본이 되는 클래스들을 포함하고 있다.

Class Wrapper

java.lang.Boolean

java.lang.Byte

java.lang.Character

java.lang.Double

java.lang.Float

java.lang.Integer

java.lang.Long

java.lang.Short

8개의 기본형을 대표하는 8개의 래퍼 클래스.

기본형 값을 객체로 다룰 수 있다.

생성자의 매개변수로 문자열을 제공할 때, 각 자료형에 알맞은 문자열을 사용해야 한다.

Boolean

  • Boolean(boolean value)

  • Boolean(String s)

Java

1

2

Boolean b1 = new Boolean(true);
Boolean b2 = new Boolean("true");

Character

  • Character(char value)

Java

1

Character c = new Character('a');

Byte

  • Byte(byte value)

  • Byte(String s)

Java

1

2

Byte b1 = new Byte(2);
Byte b2 = new Byte("2");

Short

  • Short(short value)

  • Short(String s)

Java

1

2

Short s1 = new Short(2);
Short s2 = new Short("2");

Integer

  • Integer(int value)

  • Integer(String s)

Java

1

2

Integer i1 = new Integer(1000);
Integer i2 = new Integer("1000);

Long

  • Long(long value)

  • Long(String s)

Java

1

2

Long l1 = new Long(1000);
Long l2 = new Long("1000");

Float

  • Float(double value)

  • Float(float value)

  • Float(String s)

Java

1

2

3

Float f1 = new Float(1.0);
Float f1 = new Float(1.0f);
Float f1 = new Float("1.0f");

Double

  • Double(double value)

  • Double(String s)

Java

1

2

Double d1 = new Double(1.0);
Double d2 = new Double("1.0");

boolean equals(Object anObject)

오버라이딩 되어 있어서 주소값이 아닌 객체가 가지고 있는 값을 비교한다.

Java

1

2

3

4

5

Integer i1 = new Integer(2);
Integer i2 = new Integer(2);

System.out.println((i1 == i2));         // false
System.out.println(i1.equals(i2));      // true

int compareTo(Integer anotherInteger)

Integer 객체에 비교 연산자를 사용할 수 없어서 제공된 메서드.

Java

1

2

3

4

5

6

7

8

Integer i1 = new Integer(2);
Integer i2 = new Integer(2);
Integer i3 = new Integer(5);
Integer i4 = new Integer(-5);

System.out.println(i1.compareTo(i2));   // 0
System.out.println(i1.compareTo(i3));   // -1
System.out.println(i1.compareTo(i4));   // 1

String toString()

객체가 가지고 있는 값을 문자열로 변환하여 반환한다.

Java

1

2

3

Integer i = new Integer(2);

System.out.println(i.toString());       // 2

java.lang.Number

내부적으로 숫자를 멤버변수로 갖는 래퍼 클래스들(Byte, Double, Float, Int, Long, Short)의 조상.

추상 클래스.

객체가 가지고 있는 값을 숫자와 관련된 기본형으로 변환하여 반환하는 메서드들을 정의하고 있다.

Java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

public abstract class Number extends Object implements Serializable {

    abstract double doubleValue();
    abstract float floatValue();
    abstract int intValue();
    abstract long longValue();
    
    byte byteValue() {
        return (byte) intValue();
    }
    short shortValue() {
        return (short) intValue();
    }
    
    ...
}

문자열을 숫자로 변환

기본형을 반환하는 '타입.parse타입(String s)'과 래퍼 클래스 타입을 반환하는 '타입.valueOf()'

JDK1.5부터 도입된 오토박싱 덕분에 두 메서드의 차이가 없어졌다.

단, 성능은 valueOf()가 조금 더 느리다.

Java

1

2

3

4

5

6

7

8

9

10

11

12

byte b = Byte.parseByte("2");
Byte B = Byte.valueOf("2");                 // → byte B = Byte.valueOf("2");
short s = Short.parseShort("2");
Short S = Short.valueOf("2");               // → short S = Short.valueOf("2"); 
int i = Integer.parseInt("2");
Integer I = Integer.valueOf("2");           // → int I = Integer.valuseOf("2");
long l = Long.parseLong("2");
Long L = Long.valueOf("2");                 // → long L = Long.valueOf("2");
float f = Float.parseFloat("2.0");
Float F = Float.valueOf("2.0");             // → float F = Float.valueOf("2.0");
double d = Double.parseDouble("2.0");
Double D = Double.valueOf("2.0");           // → double D = Double.valueOf("2.0");

문자열이 10진수가 아닌 다른 진법의 숫자일 때도 변환이 가능하다.

Java

1

2

static int parseInt(String s, int radix);
static Integer valueOf(String s,int radix);

Java

1

2

3

4

5

int i1 = Integer.parseInt("100", 2);      // 4
int i2 = Integer.parseInt("100", 8);      // 64
int i3 = Integer.parseInt("100", 16);     // 256
int i4 = Integer.parseInt("aa", 16);      // 170
int i5 = Integer.parseInt("aa");          // error: NumberFormatException

오토박싱 Autoboxing & 언박싱 Unboxing

기본형과 참조형 간의 연산이 가능하도록 컴파일러가 자동으로 변환하는 코드를 넣어준다.

개발자가 간략하게 쓴 구문을 컴파일러가 원래의 구문으로 변경해주는 것뿐 자바의 원칙이 바뀐 것은 아니다.

  • 오토박싱 :  기본형 값을 래퍼 클래스의 객체로 자동 변환해주는 것.

Java

1

2

3

4

int i = 2;
Integer intg = (Integer) i;       // = Integer.valueOf(i);
Object obj = (Object) i;          // = (Object) Integer.valueOf(i);
Long l = 100L;                    // = new Long(100L);
  • 언박싱 :  래퍼 클래스의 객체를 기본형 값으로 자동 변환해주는 것.

Java

1

2

3

ArrayList list = new ArrayList<>();
list.add(10);                // Autoboxing. 10 → new Integer(10)
int value = list.get(0);     // Unboxing.   new Integer(10) → 10

참고 서적: 자바의 정석 3판

민갤

Back-End Developer

백엔드 개발자입니다.

[Java] Class Math

Java에서 쓰이는 Math 클래스를 설명한 글입니다.

Java

[Java] 정규식

Java에서 쓰이는 정규식을 설명한 글입니다.

Java

v5.0