Wrapper Class와 오버라이딩 vs 오버로딩 + final 키워드

GoldenDusk·2023년 11월 23일
0

CS지식

목록 보기
17/26
post-thumbnail

1. Wrapper Class

자바에서 래퍼 클래스(Wrapper Class)는 기본 데이터 타입(primitive data types)을 객체로 다루기 위해 사용되는 클래스들을 의미하며, 자바에서 래퍼 클래스(Wrapper Class)는 기본 데이터 타입(primitive data types)을 객체로 다루기 위해 사용되는 클래스들을 의미

🍈 사용 용도

  • 객체로 저장해야 할 경우
  • 매개변수로 객체가 요구될 경우(ex. 제네릭, Collection의 타입)
  • 객체 간의 비교가 필요할 경우
  • 제네릭이나 컬렉션에서 사용할 경우, 기본형을 쓸 수 없기 때문에 이를 Wrapping한 형태를 사용해야 한다.

🍈 특징

  • 산술 연산을 위한 클래스가 아니기 때문에 Immutable하다.(불변)
  • 불변 객체이기 때문에 값에 대한 변경은 불가능하고 새로운 값(객체)의 할당이나 참조만 가능하다.
  • Boxing : 기본 자료형 -> Wrapper Class
  • UnBoxing : Wrapper Class -> 기본 자료형
Integer myInt = 5; // 오토 박싱 (int -> Integer)
int myPrimitiveInt = myInt; // 언박싱 (Integer -> int)
  • JDK 1.5부터 오토 박싱, 오토 언박싱을 지원한다.
  • 언박싱 시 사용되는 메소드는 다음과 같은 형태를 갖는다.
    • intValue : 객체 -> int 값으로 변환.

문자를 숫자로 바꾸거나, 숫자를 문자로 바꿀 때 두 가지 방식의 차이점이 존재한다.

[Code]

// 문자열 -> 기본형
int number1 = Integer.parseInt("100");

// 문자열 -> wrapper class
Integer number2 = Integer.valueOf("100");

위에서 언급했듯이, JDK 1.5부터 오토 박싱과 오토 언박싱이 지원되기 때문에 반환값이 기본형이든, wrapper class이든 차이가 없어졌다. 그래서 굳이 구별하지 않고 valueOf()를 사용해도 된다.

단, 성능을 비교하면 valueOf()가 조금 더 느리다고 한다.

🍈 각 기본 데이터 타입에 대응하는 Wrapper Class

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

2. 오버라이딩 vs 오버로딩

🍈 오버라이딩 **(Overriding) = 오버라이드(Override)**

오버라이딩은 자식 클래스가 부모 클래스로부터 상속받은 메서드를 재정의하는 것으로 오버라이딩된 메서드는 상속받은 메서드와 같은 이름, 같은 반환 타입, 같은 매개변수를 가져야 한다. 오버라이딩은 상속의 중요한 부분으로, 다형성을 실현하는 데 필수적

특징

  • 상속받은 메서드를 재정의함.
  • 메서드의 시그니처(이름, 매개변수 목록)는 동일해야 함.
  • 반환 타입, 접근 제어자는 부모 클래스의 메서드와 같거나 더 관대해야 함.
  • 상위 클래스의 메서드가 final이거나 static이면 오버라이딩할 수 없음.
  • 상속 시, 상위 클래스의 private 멤버를 제외한 모든 멤버를 상속받는다.
  • 상속받은 메서드의 내용을 변경 (메서드 시그니처는 동일)
class Animal {
    public void sound() {
        System.out.println("동물 소리");
    }
}

class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("멍멍");
    }
}

오버라이딩(Overriding)과 오버라이드****(Override)의 차이****

언어적 관점에서, "오버라이딩"은 동사형으로 사용되며 행위 자체를 나타내고, "오버라이드"는 명사형 또는 동사형으로 사용되어 그 결과나 행위를 나타낸다. 하지만 실제 프로그래밍 문맥에서는 이 둘을 거의 동일한 의미로 사용

  • 오버라이딩(Overriding)은 주로 이 행위의 과정을 설명할 때 사용된다. 즉, 메서드를 오버라이딩한다고 말할 때, 상속받은 메서드를 재정의하는 과정을 의미
  • 오버라이드(Override)는 이 행위의 결과를 강조하는 경우에 사용될 수 있다. 예를 들어, "이 메서드는 부모 클래스의 메서드를 오버라이드한다"라고 말할 수 있다.

🍈 오버로딩**(Overloading)**

오버로딩같은 이름의 메서드를 여러 개 가질 수 있게 하되, 매개변수의 타입이나 개수를 다르게 하는 것으로, 오버로딩을 통해 같은 이름의 메서드가 다른 매개변수를 받아 다른 기능을 수행할 수 있다. 이는 코드의 가독성과 재사용성을 높이는 데 도움이 된다.

특징

  • 동일한 메서드 이름을 사용함.
  • 매개변수의 타입, 개수, 순서가 달라야 함.
  • 반환 타입과 접근 제어자는 오버로딩에 영향을 주지 않음.
  • 같은 이름의 메서드를 다른 매개변수로 정의 (메서드 시그니처가 달라야 함)
class Calculator {
    public int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }
}
구분오버로딩오버라이딩
메서드 이름동일동일
매개변수, 타입달라야 함동일
반환 타입상관없음동일

3. final 키워드

final class

  • 다른 클래스가 상속받지 못한다.

final method

  • 자식 클래스에서 상위 클래스의 final method를 오버라이드 못한다.

final variable

  • 변하지 않는 상수 값이 되어 새롭게 값을 할당할 수 없는 변수가 된다.
profile
내 지식을 기록하여, 다른 사람들과 공유하여 함께 발전하는 사람이 되고 싶다. gitbook에도 정리중 ~

0개의 댓글