0411 DTO, VO, 상속, interface

Fifty·2025년 4월 11일

2. JAVA

목록 보기
24/33

DTO와 VO 클래스 비교


VO 클래스는 대부분 테이블과 1:1로 매칭된다.

싱글턴패턴

private를 생성자에 붙이면
디자인패턴 중 싱글턴패턴: 인스턴스를 단 하나만 만들어야 할 때, 객체 만들 이유가 없는 클래스

클래스 내부 메소드 f()에서 f2()를 호출할 때, f2()가 외부에서 접근하면 안될 경우 private f2()를 한다.

계산기 클래스 calculater (사칙연산)

계산기 클래스는 또한 제네릭함수로 구현할 수 없다.

왜냐면 Java의 제네릭만으로는 +, -, *, / 같은 연산자를 직접 사용할 수 없다.
이는 Java의 제네릭이 컴파일 타임 타입 소거(type erasure) 를 사용하기 때문인데 타입 T가 실제 어떤 클래스인지 컴파일 시점에 알 수 없어서 연산자를 사용할 수 없다.

사칙연산 기능 작성(int 외 작성 생략)

	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;
	}

절대값을 구해주는 기능 추가(int 외 작성 생략)

	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);
}

interface class

  1. 인터페이스 클래스 내에서 메소드를 선언할 때 매개변수도 함께 선언
  2. 인터페이스 클래스를 상속받는 클래스는 implements로 표현해주고
    인터페이스 클래스 내에 선언된 메소드를 전부 구현해준다.
    구현해주지 않을 경우 abstract 표시한다.
  3. 인터페이스 클래스에서 메소드를 가지고 온 것을 구현한 것이라는 의마로 @Override를 작성해줘야 한다.
  • @Override는 "나 이 메서드, 상위 인터페이스/클래스에서 온 거 다시 구현하고 있어요!" 라고 알려주는 표시이자, 컴파일러한테도 검증 받는 안전장치예요.
  1. interface class에 추상메소드가 아닌 메소드를 선언할 때는 default를 선언해준다.

CalculaterInterface (추상, 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;
	}
	
}

Calculater.java (사칙연산만 구현)

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;
	}

}

Calculater2.java (절대값 추가 구현)

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);
	}

}

CalculaterTest.java(Main)

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));
	}
}

0개의 댓글