
자바에서
래퍼 클래스(Wrapper Class)는 기본 데이터 타입(primitive data types)을 객체로 다루기 위해 사용되는 클래스들을 의미하며, 자바에서 래퍼 클래스(Wrapper Class)는 기본 데이터 타입(primitive data types)을 객체로 다루기 위해 사용되는 클래스들을 의미
Immutable하다.(불변)Integer myInt = 5; // 오토 박싱 (int -> Integer)
int myPrimitiveInt = myInt; // 언박싱 (Integer -> int)
문자를 숫자로 바꾸거나, 숫자를 문자로 바꿀 때 두 가지 방식의 차이점이 존재한다.
[Code]
// 문자열 -> 기본형
int number1 = Integer.parseInt("100");
// 문자열 -> wrapper class
Integer number2 = Integer.valueOf("100");
위에서 언급했듯이, JDK 1.5부터 오토 박싱과 오토 언박싱이 지원되기 때문에 반환값이 기본형이든, wrapper class이든 차이가 없어졌다. 그래서 굳이 구별하지 않고 valueOf()를 사용해도 된다.
단, 성능을 비교하면 valueOf()가 조금 더 느리다고 한다.
int -> Integerchar -> Characterfloat -> Floatdouble -> Doublebyte -> Byteshort -> Shortlong -> Longboolean -> Boolean오버라이딩은 자식 클래스가 부모 클래스로부터 상속받은 메서드를
재정의하는 것으로 오버라이딩된 메서드는 상속받은 메서드와같은 이름, 같은 반환 타입, 같은 매개변수를 가져야 한다. 오버라이딩은 상속의 중요한 부분으로, 다형성을 실현하는 데 필수적
final이거나 static이면 오버라이딩할 수 없음.내용을 변경 (메서드 시그니처는 동일)class Animal {
public void sound() {
System.out.println("동물 소리");
}
}
class Dog extends Animal {
@Override
public void sound() {
System.out.println("멍멍");
}
}
언어적 관점에서, "오버라이딩"은 동사형으로 사용되며 행위 자체를 나타내고, "오버라이드"는 명사형 또는 동사형으로 사용되어 그 결과나 행위를 나타낸다. 하지만 실제 프로그래밍 문맥에서는 이 둘을 거의 동일한 의미로 사용
- 오버라이딩(Overriding)은 주로 이 행위의 과정을 설명할 때 사용된다. 즉, 메서드를 오버라이딩한다고 말할 때, 상속받은 메서드를
재정의하는 과정을 의미- 오버라이드(Override)는 이 행위의 결과를 강조하는 경우에 사용될 수 있다. 예를 들어, "이 메서드는 부모 클래스의 메서드를 오버라이드한다"라고 말할 수 있다.
오버로딩은
같은 이름의 메서드를 여러 개 가질 수 있게 하되, 매개변수의 타입이나 개수를 다르게 하는 것으로, 오버로딩을 통해 같은 이름의 메서드가 다른 매개변수를 받아 다른 기능을 수행할 수 있다. 이는 코드의 가독성과 재사용성을 높이는 데 도움이 된다.
다른 매개변수로 정의 (메서드 시그니처가 달라야 함)class Calculator {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
}
| 구분 | 오버로딩 | 오버라이딩 |
|---|---|---|
| 메서드 이름 | 동일 | 동일 |
| 매개변수, 타입 | 달라야 함 | 동일 |
| 반환 타입 | 상관없음 | 동일 |
변하지 않는 상수 값이 되어 새롭게 값을 할당할 수 없는 변수가 된다.