[Java] 클래스와 객체2
2024. 5. 9. 15:44ㆍBackend/Java
728x90
🎯클래스와 객체2
1. 오버로딩(overloading)
오버로딩이란 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것이다.
보통 하나의 메서드 이름에 하나의 기능만을 구현하는데, 하나의 메서드 이름으로
여러 기능을 구현할 수 있다.
1.2 오버로딩 조건
- 메서드 이름이 같아야 한다.
- 매게변수의 개수 또는 타입이 탈라야 한다.
- 반환 타입으로는 오버로딩이 되지 않는다.
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 특징
- 클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙인다.
-모든 인스턴스에서 같은 값이 유지되어야 하는 변수는 static을 붙여서 클래스변수로 정의해야 한다. - 클래스 변수(static변수)는 인스턴스를 생성하지 않아도 사용할 수 있다.
-static이 붙은 변수는 클래스가 메모리에 올라갈 때 이미 자동적으로 생성되기 때문이다. - 클래스 메서드(static메서드)는 인스턴스 변수를 사용할 수 없다.
-인스턴스변수나 인스턴스메서드에서는 static이 붙은 멤버들을 사용하는것이 가능하다. - 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려한다.
-메서드 호출시간이 짧아져 성능이 향상된다. static을 안 붙인 메서드는 실행 시 호출되어야할 메서드를 찾는 - 과정이 추가적으로 필요하기 때문에 시간이 더 걸린다.
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 |