자바에서
래퍼 클래스(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
-> Integer
char
-> Character
float
-> Float
double
-> Double
byte
-> Byte
short
-> Short
long
-> Long
boolean
-> 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;
}
}
구분 | 오버로딩 | 오버라이딩 |
---|---|---|
메서드 이름 | 동일 | 동일 |
매개변수, 타입 | 달라야 함 | 동일 |
반환 타입 | 상관없음 | 동일 |
변하지 않는 상수 값
이 되어 새롭게 값을 할당할 수 없는 변수가 된다.