32일차

김윤정·2024년 7월 31일

코딩

목록 보기
32/60
post-thumbnail

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

모든 클래스는 Object 클래스를 상속합니다.

subclass는 Object 클래스를 직접 상속 하지는 않지만 간접적으로(Object 클래스를 상속하는 클래스를 상속하는 형태) Object 클래스를 상속하게 됩니다.

2. 주소가 출력되는 이유를 설명하시오.

class A{
}
public static void main(String[] args) {
A a = new A();
System.out.println(a); // String s = String.valueOf(x); -> s가 주소 뿌림
}

1) 기본적으로 모든 클래스는 Object 클래스를 상속하기 때문에 class A는 Object 클래스를 상속합니다.

2) Object 클래스에는 문자열을 반환하는 toString함수가 있습니다. 하지만 class A에는 toStirng함수가 override되어있지 않아서 a가 가리키는 객체의 주소값(가짜)을 출력하게 됩니다.

3. interface 와 class 의 차이는?

1. interface

  • interface + interface명 ();→ 함수 선언부(정의), body없음 (당연히 생성자 만들 수 없음) = 추상메소드

  • implements 키워드로 인터페이스를 구현할 (자손)클래스 표시합니다.

  • 둘 이상의 다중 인터페이스 구현 가능합니다.(implements A, B 쉼표로 구분)

  • body가 없으므로 객체 생성 불가, 선언 혹은 구현만 가능합니다.

  • 무조건 public 이어야 합니다.

  • 이름은 앞에 i를 붙이거나 뒤에 -able로 짓는 것이 관례입니다.

2. class

  • class + class명 () {body} → body 있음(함수, 변수 모두 올 수 있다.)
  • extends 키워드로 상속 표시합니다.
  • 단일 상속만 가능합니다. (자식이 상속)
  • 객체 생성 가능합니다.

4. 다음을 프로그램 하시오.[필수] ⭐️

interface Printable { // MS가 정의하고 제공한 인터페이스
public void print(String doc);
}
//SPrinterDriver 와 LPrinterDriver를 만드시오
public static void main(String[] args) {
String myDoc = "This is a report about...";
// 삼성 프린터로 출력
Printable prn = new SPrinterDriver();
prn.print(myDoc);
System.out.println();
// LG 프린터로 출력
prn = new LPrinterDriver();
prn.print(myDoc);
}

package day_2024_07_31;
interface Printable2 {
    public void print(String doc);
}

//삼성전자 개발자
class SprinterDriver implements Printable2{

   @Override
   public void print(String doc) {
        System.out.println("From Samsung printer");
        System.out.println(doc);      
   }   
}
//LG전자 개발자
class LprinterDriver implements Printable2{

   @Override
   public void print(String doc) {
        System.out.println("From LG printer");
        System.out.println(doc);      
   }   
}

public class PrinterMain2 {
	public static void main(String args[]) {
        String myDoc = "This is a report about...";
        
        Printable2 prn = new SprinterDriver();
        prn.print(myDoc);
        
        prn = new LprinterDriver();
        prn.print(myDoc);
        
  }
}

5. @Override 에 대하여 설명하시오.

@Override 는 현재 메소드가 부모 클래스의 메소드를 오버라이드 한 것임을 컴파일러에게 명시합니다.
부모 클래스에 해당하는 메소드가 없다면 에러를 발생시킵니다.

6. interface 의 구성요소는?

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

인터페이스를 사용하면 함수 선언부를 정의해주고 있어서 그 규약에 맞게 각각의 회사가 맞춰서 구현을 하게되므로 관리에 용이합니다.

선언부분과 구현부분을 분리시켜 독립적으로 프로그램을 작성할 수 있습니다. (외주)
세부 정보를 숨기고 인터페이스를 통해 중요한 정보만 표시해서 보안을 확보할 수도 있습니다.

7. interface에 올 수 있는 두 가지는?

  1. 변수선언시 public static final(상수)
  2. 함수선언시 public abstract(추상메소드)

8. abstract 키워드에 대하여 설명하시오.

추상의 의미입니다. abstract 키워드는 생략 가능합니다.(컴파일러 자동 생성)

인터페이스 내에 있는 함수의 body부분이 없고 선언 부분만 있기 때문에 구현은 자손 클래스에서 해야합니다.

그렇기 때문에 인터페이스는 객체를 만들 수 없습니다.

9. 아래의 출력 결과가 아래와 같이 나오도록 프로그래밍 하시오.

Object obj = new Circle(10);
System.out.println(obj); //출력: 넓이는 100 입니다. (예시)

package day_2024_07_31;

class Circle extends Object {
	private double radius;

	public Circle(double radius) {
		this.radius = radius;
	}

	double getArea() {
		return radius * radius * Math.PI;
	}

	@Override
	public String toString() {
		return "넓이는 " + getArea() + " 입니다";
	}
}

public class ObjectMain2 {
	public static void main(String args[]) {
		Object obj = new Circle(10);

		System.out.println(obj);
	}
}

10. instanceof 연산자에 대하여 예를들어 설명하시오.

현재 객체가 메모리에 가지고있는 클래스라면 true, 아니면 false입니다. 용도는 형변환 유무입니다.

if (box instanceof GoldPaperBox) {
			((GoldPaperBox) box).goldWrap();
		} else if (box instanceof PaperBox) {
			
			PaperBox  pBox=(PaperBox)box;
			pBox.paperWrap();
			
			((PaperBox) box).paperWrap(); //위에 두줄을 요약
		} else {
			box.simpleWrap();
		}
	}

0개의 댓글