[Java] 클래스와 객체2

2024. 5. 9. 15:44Backend/Java

728x90

🎯클래스와 객체2

1. 오버로딩(overloading)

오버로딩이란 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것이다.

보통 하나의 메서드 이름에 하나의 기능만을 구현하는데, 하나의 메서드 이름으로

여러 기능을 구현할 수 있다.

 

1.2 오버로딩 조건

  1. 메서드 이름이 같아야 한다.
  2. 매게변수의 개수 또는 타입이 탈라야 한다.
  3. 반환 타입으로는 오버로딩이 되지 않는다.

 

1.3 오버로딩 예시

class Overloading{
    public int add(int a, int b) {
        return a + b;
    }

	// 매개변수 타입이 다름
    public double add(double a, double b) {
        return a + b;
    }

	// 매개변수 개수가 다름
    public int add(int a, int b, int c) {
        return a + b + c;
    }
}

public class Test {
    public static void main(String[] args) {

        Overloading o1 = new Overloading();
        o1.add(1, 2);		// 출력: 3
        o1.add(1.0, 2.0);	// 출력: 3.0
        o1.add(1, 2, 3);	// 출력: 6
    }
}
  • 오버로딩을 사용하면 메서드들이 하나의 이름으로 정의되어 오류의 가능성을 줄인다.
  • 메서드의 이름을 절약해 이름을 짓는데 고민할 시간을 줄인다.

 

2. Static

자바에서 static 키워드는 클래스 레벨의 변수나 메소드, 블록을 정의할 때 사용된다. 

 

static 키워드를 통해 생성된 멤버는 staic 영역에 할당되고, 할당된 메모리는 모든 객체가 공유하여 하나의 멤버를 어디서든지 참조할 수 있다.

 

2.1 Static 특징

  1. 클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙인다. 
    -모든 인스턴스에서 같은 값이 유지되어야 하는 변수는 static을 붙여서 클래스변수로 정의해야 한다.
  2. 클래스 변수(static변수)는 인스턴스를 생성하지 않아도 사용할 수 있다.
    -static이 붙은 변수는 클래스가 메모리에 올라갈 때 이미 자동적으로 생성되기 때문이다.
  3. 클래스 메서드(static메서드)는 인스턴스 변수를 사용할 수 없다.
    -인스턴스변수나 인스턴스메서드에서는 static이 붙은 멤버들을 사용하는것이 가능하다.
  4. 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려한다.
    -메서드 호출시간이 짧아져 성능이 향상된다. static을 안 붙인 메서드는 실행 시 호출되어야할 메서드를 찾는
  5. 과정이 추가적으로 필요하기 때문에 시간이 더 걸린다.

 

2.2 Static 예시

class MyMath{
    long a, b;

    // 인스턴스변수와 관계없이 매개변수만으로 작업이 가능.
    static long add(long a, long b) { return a + b;}
    static long subtract(long a, long b) { return a - b;}
    static long multiply(long a, long b) { return a * b;}
    static double divide(double a, double b) { return a / b;}

}
public class Test {
    public static void main(String[] args) {
        // 클래스메서드 호출. 인스턴스 생성없이 호출가능
        System.out.println(MyMath.add(200L, 100L));		// 출력: 300
        System.out.println(MyMath.subtract(200L, 100L));	// 출력: 100
        System.out.println(MyMath.multiply(200L, 100L));	// 출력: 20000
        System.out.println(MyMath.divide(200.0, 100.0));	// 출력: 2.0
    }
}

  • 클래스의 멤버변수 중 모든 인스턴스에 공통된 값을 유지해야하는 것이 있는지 살펴보고 있으면 static을 붙이자.
  • 작성한 메서드 중에서 인스턴스 변수나 인스턴스 메서드를 사용하지 않는 메서드에 static 을 붙일 것을 고려한다.
  • static 키워드의 남용은 객체지향 프로그래밍의 원칙과 상반되며, 메모리 사용량 증가로 이어질 수 있다. 따라서 static 멤버의 사용은 신중하게 결정해야 한다.

'Backend > Java' 카테고리의 다른 글

[Java] 오버로딩  (0) 2024.05.09
[Java] 상속  (0) 2024.05.09
[Java] 클래스와 객체  (0) 2024.05.08
[Java] 반복문  (0) 2024.05.06
[Java] 조건문  (0) 2024.05.06