32일 차 - 인터페이스(Interface), 애너테이션(Annotation), 오브젝트(Object) (23.02.09)

yvonne·2023년 2월 9일
0

📂Java

목록 보기
32/51
post-thumbnail

1. 아래가 돌아가도록 하시오.

interface ICalculator{
	public abstract int add(int num,int num2);
	public abstract int sub(int num,int num2);
	public abstract int mul(int num,int num2);
	 int div(int num,int num2);
}

class PrintableInterface {
    public static void main(String[] args) {
    	ICalculator calculator = new MyCalculator();
    	System.out.println(calculator.add(10, 20)); //30
    	System.out.println(calculator.sub(10, 20)); //-10
    	
    	//Printable prn = new Printer();
        //prn.print("Hello Java");
    }
}

package inhertest;

interface ICalculator {
	public abstract int add(int num, int num2);

	public abstract int sub(int num, int num2);

	public abstract int mul(int num, int num2);

	int div(int num, int num2);
}

class MyCalculator implements ICalculator {
	@Override
	public int add(int num, int num2) {
		return num + num2;
	}

	@Override
	public int sub(int num, int num2) {
		return num - num2;
	}

	@Override
	public int mul(int num, int num2) {
		return num * num2;
	}

	@Override
	public int div(int num, int num2) {
		return num / num2;
	}
}

public class InterfaceTest {
	public static void main(String[] args) {
		ICalculator calculator = new MyCalculator();
		System.out.println(calculator.add(10, 20));
		System.out.println(calculator.sub(10, 20));
		System.out.println(calculator.mul(10, 20));
		System.out.println(calculator.div(10, 20));

	}
}
  • 출력결과




2. 아래가 돌아가도록 하시오.

interface Printable {
    public abstract void print(String doc) ;
}
main(){
    	Printable prn = new Printer();
        prn.print("Hello Java");
}

interface Printable3 {
	public abstract void print(String doc);
}

class Printer3 implements Printable3 {
	@Override
	public void print(String doc) {
		System.out.println(doc);
	}
}

public class InterfaceTest {
	public static void main(String[] args) {
		Printable3 prn = new Printer3();
		prn.print("Hello Java");
	}
}
  • 출력결과




3. 애너테이션(Annotation)이란?

  • 애너테이션(Annotation): 사전적 의미로는 주석, 주해, 메모로 프로그래밍 언어에 영향을 미치지 않지만 다른 프로그램에게 유용한 정보를 제공하는 용도
  • 표준 애너테이션과 메타 애너테이션으로 나뉨

📌표준 애너테이션

애너테이션설명
@Override컴파일러에게 오버라이딩하는 메소드라는 것을 알림
@Deprecated앞으로 사용하지 않을 것을 권장하는 알림이 생김
@SuppressWarnings컴파일러의 특정 경고메시지가 나타나지 않게 해줌
@SafeVarangs제네릭스 타입의 가변인자에 사용
@FunctionalInterface함수형 인터페이스라는 것을 알림
@NativeNative메소드에서 참조되는 상수 앞에 붙임




4. 아래의 연산과정에서 호출되는 함수(원리)를 써서 표현해 보세요.

String str = "age: " + 17;




5. Object 클래스에 대하여 설명하시오.

  • Object클래스는 모든 클래스의 최상위 클래스로 모든(All) 클래스는 Object 클래스를 상속한다.
  • 아무것도 상속받지 않으면 자동으로 Object를 상속받는다.
  • Object가 가지고 있는 메소드는 모든 클래스에서 다 사용할 수 있다는 것을 의미한다.

  • 데이터 멤버는 없고, 함수 11개가 있다.
  • 11개의 함수는 모든 클래스에서 (object class와 상속 관계이기 때문에)사용이 가능하다.

📌 hashCode(), toString(), equals()는 꼭 알아야함





6. 아래와 같이 출력되는 이유를 설명하시오.

class A{

}

public class Test {
	public static void main(String[] args) {
		A a = new A();
		System.out.println(a); // a의 주소 뿌림
	}
}
  • 1) 기본적으로 모든 클래스는 Object 클래스를 상속하기 때문에 class A는 Object 클래스를 상속한다.
  • 2) Object 클래스에는 문자열을 반환하는 toString함수가 있다. 하지만 class A에는 toStirng함수가 override되어있지 않아서 a가 가리키는 객체의 주소값(가짜)을 출력하게 된다.




7. Interface 에 대하여 설명하시오.

  • 인터페이스는 표준이자 규약이다. (함수명도 규약이 됨. 강제시킴 = 표준화)

📌 인터페이스의 역할

  • 개발자 사이의 코드 규약을 정한다.
  • 여러 구현체에서 공통적인 부분을 추상화한다.(다형성)

interface Printable {    
	public void print(String doc); // 추상 메소드(=함수정의, 선언만)
   //(abstrct 생략 가능)인터페이스 무조건 public, abstract 함수
}
  • 자바 인터페이스는 기본적으로 추상메소드의 모음이다.
  • <<추상메소드>>는 위와 같이 구현부가 없는 메서드를 말한다.
class Printer3 implements Printable3 {
	@Override
	public void print(String doc) {
		System.out.println(doc);
	}
}
  • 구현부가 없으므로 인터페이스를 만든다면 반드시 구현하는 클래스를 만들어야 하며, 인터페이스를 구현하기로 한 클래스는 반드시 인터페이스에 명시되어 있는 추상메소드들을 모두 구현해야 한다. 만약 이를 구현하지 않으면 컴파일 에러가 발생한다.
  • 인터페이스를 사용하는 구체 클래스는 해당 인터페이스를 구현해야한다.
  • 인터페이스를 사용하면 다중 상속이 가능하다.
  • 인터페이스 사이에서도, 구체 클래스에서도 여러 인터페이스를 구현 및 상속할 수 있다.
profile
개발 연습장

0개의 댓글