
VO 클래스는 대부분 테이블과 1:1로 매칭된다.
private를 생성자에 붙이면
디자인패턴 중 싱글턴패턴: 인스턴스를 단 하나만 만들어야 할 때, 객체 만들 이유가 없는 클래스
클래스 내부 메소드 f()에서 f2()를 호출할 때, f2()가 외부에서 접근하면 안될 경우 private f2()를 한다.
계산기 클래스는 또한 제네릭함수로 구현할 수 없다.
왜냐면 Java의 제네릭만으로는 +, -, *, / 같은 연산자를 직접 사용할 수 없다.
이는 Java의 제네릭이 컴파일 타임 타입 소거(type erasure) 를 사용하기 때문인데 타입 T가 실제 어떤 클래스인지 컴파일 시점에 알 수 없어서 연산자를 사용할 수 없다.
public int plus(int x, int y) {
return x + y;
}
public int minus(int x, int y) {
return x - y;
}
public int mul(int x, int y) {
return x * y;
}
public int div(int x, int y) {
return x / y;
}
public int abs(int x) {
if(x>=0) return x;
else return (0-x);
}
package ex0411;
public interface CalculaterInterface {
int plus(int x, int y);
int minus(int x, int y);
int mul(int x, int y);
int div(int x, int y);
double plus(double x, double y);
double minus(double x, double y);
double mul(double x, double y);
double div(double x, double y);
}
- 인터페이스 클래스 내에서 메소드를 선언할 때 매개변수도 함께 선언
- 인터페이스 클래스를 상속받는 클래스는 implements로 표현해주고
인터페이스 클래스 내에 선언된 메소드를 전부 구현해준다.
구현해주지 않을 경우 abstract 표시한다.- 인터페이스 클래스에서 메소드를 가지고 온 것을 구현한 것이라는 의마로 @Override를 작성해줘야 한다.
- @Override는 "나 이 메서드, 상위 인터페이스/클래스에서 온 거 다시 구현하고 있어요!" 라고 알려주는 표시이자, 컴파일러한테도 검증 받는 안전장치예요.
- interface class에 추상메소드가 아닌 메소드를 선언할 때는 default를 선언해준다.
package ex0411;
public interface CalculaterInterface {
int plus(int x, int y);
int minus(int x, int y);
int mul(int x, int y);
int div(int x, int y);
double plus(double x, double y);
double minus(double x, double y);
double mul(double x, double y);
double div(double x, double y);
default int pow(int x) {
return x*x;
};
default double pow(double x) {
return x*x;
}
}
package ex0411;
public class Calculater implements CalculaterInterface{
public void f() {};
@Override
public int plus(int x, int y) {
return x + y;
}
@Override
public int minus(int x, int y) {
return x - y;
}
@Override
public int mul(int x, int y) {
return x * y;
}
@Override
public int div(int x, int y) {
return x / y;
}
@Override
public double plus(double x, double y) {
return x + y;
}
@Override
public double minus(double x, double y) {
return x - y;
}
@Override
public double mul(double x, double y) {
return x * y;
}
@Override
public double div(double x, double y) {
return x / y;
}
}
package ex0411;
public class Calculater2 extends Calculater{
// 절대값
public int abs(int x) {
if(x>=0) return x;
else return (0-x);
}
public double abs(double x) {
if(x>=0) return x;
else return (0-x);
}
}
package ex0411;
public class CalculaterTest {
public static void main(String[] args) {
Calculater c = new Calculater();
System.out.println(c.plus(3.0, 3.0));
Calculater2 c2 = new Calculater2();
System.out.println(c2.abs(-3));
System.out.println(c2.abs(-5.5));
System.out.println(c.pow(3));
System.out.println(c2.pow(5.5));
}
}