Day 16

·2023년 6월 28일
0

Global_2023_2

목록 보기
15/56
post-thumbnail

1. 추상 클래스 와 interface 의 차이는?

  • 추상 클래스

    • abstract를 함수에 붙일때 클래스에도 같이 붙이면 에러가 안남

      • 자식이 구현하는 클래스 = interface
      • interface에 비해 별로 사용안함
    • 공통점

      • new 연산자로 인스턴스 생성 불가능.

      • 프로토타입만 있는 메서드를 갖는다.

      • 사용하기 위해서는 하위클래스에서 확장/구현 해야 한다.

    • 차이점

      • 사용하는 키워드가 다르다.

      • Abstract는 일반 메서드를 사용할 수 있지만,
        Interface는 메서드 선언만 가능하다.

2. Object 클래스의 11개의 함수를 나열해 보시오.

clone()
equals()
finalize()
getClass()
hashCode()
notify()
notifyAll()
toString()
wait()
wait(long)
wait(long, int)

  • (11개중 equals, hashCode, toString만 알면 된다.)

3. 아래의 프로그램을 하시오(equals 함수).

Member obj1 = new Member("Black");
Member obj2 = new Member("Black");
Member obj3 = new Member("White");

System.out.println(obj1.equals(obj2)); // true가 출력
System.out.println(obj1.equals(obj3)); // false가 출력

class Member extends Object{

   private String color;
   
   public Member(String color) {
      this.color = color;
   }
   
   @Override
   public boolean equals(Object obj) {
      
      Member member = (Member) obj; // 자식 = 부모 되는 케이스 자식 = (자식)부모 시켜서 부모에 있는 주소에 자식이 미리 메모리에 올라가 있어야함

      if (color.equals(member.color))
         return true;

      return false;
      
   }
}

4.아래를 프로그래밍 하시오.(toString() 함수)

Circle circle = new Circle(10);
System.out.println(circle); //원의 넓이는 314.1592 이고 반지름은 10 인원

class Circle{
private double radius; //변수선언 > 게터세터 넣기

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

public double getRadius() {
   return radius;  //원의 넓이를 가져오는 함수
}

public void setRadius(double radius) { //외부값받아서 원의넓이를 변경하는 함수
   this.radius = radius;
}

public double getArea() {
   return radius*radius*Math.PI;  //원의 넓이 곱하는 함수만듦
}

@Override
public String toString() {
	return "원의 넓이는" + getArea()+"이고 반지름은"+radius+"인원";
}

}

5. 아래를 구현하시오.

abstract class Calc{
protected int a;
protected int b;
void setValue(int a, int b) {this.a = a; this.b = b;}
abstract int calculate();
}

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("두 정수와 연산자를 입력하시오>> ");
int a = sc.nextInt();
int b = sc.nextInt();
char c = sc.next().charAt(0);

    if(c == '+'){
        Add add = new Add();
        add.setValue(a, b);
        System.out.println(add.calculate());
    }
    else if(c == '-'){
        Sub sub = new Sub();
        sub.setValue(a, b);
        System.out.println(sub.calculate());
    }
    else if(c == '*'){
        Mul mul = new Mul();
        mul.setValue(a, b);
        System.out.println(mul.calculate());
    }
    else if(c == '/'){
        Div div = new Div();
        div.setValue(a, b);
        System.out.println(div.calculate());
    }
}

class Add extends Calc{
@Override
int calculate() {
return a + b;
}
}
class Sub extends Calc{
@Override
int calculate() {
return a - b;
}
}
class Mul extends Calc{
@Override
int calculate() {
return a * b;
}
}
class Div extends Calc{
@Override
int calculate() {
return a / b;
}
}

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

  • @ 애너테이션
    • 모든곳에 붙을수 있다
    • 기본적으로 일정한 기능을 가진 함수다
      • @Override // 부모에 해당 함수가 있어야 한다. (체크기능)
    • 1.5버전부터 추가됨 (보통 1.5버전이 기준)
      (Generic,For each루프,autoboxing/unboxing,enum과 함께)
    • 1.8버전부터 람다, 스트림

2. 아래를 프로그래밍 하시오.

Person kim = new Person("홍길동",35);
Person park = new Person(new String("홍길동"),35);
Person heo = new Person("홍길동",34);

if(kim.equals(heo))
System.out.println("같은 사람입니다.");
else

System.out.println("다른 사람입니다.");

=========================
같은사람입니다.

class Person1 {
   private String name;
   int age;
   
   public Person1(String name, int age) {
      this.name = name;
      this.age = age;
   }
   
   @Override
   public boolean equals(Object obj) {
      
      
      Person1 person = (Person1) obj;      
      
      if ((this.name == (person.name)) && (this.age == person.age))
         return true;
         
               return false;
   }
}

3. try catch finally 에 대하여 설명하시오.

  • 에러나서 프로그램이 동작하지 않는것을 방지하는 예외처리(에러처리)

  • 예시

try {
int num = sc.nextInt();
System.out.println(num);
// System.out.println(3/0);
} catch (Exception e) {
System.out.println("캐치 안입니다");
}
finally {
System.out.println("파이널리입니다.");
}
System.out.println("프로그램 종료입니다.");


모르겠으면 그냥 一生懸命勉強します🤐


개발자는 들어봤으면 할 수 있는것🆗

(못하는게 어딨어 하라면 공부해서 해야지)


Point

  • Object class
    • 참조형의 최고 조상
    • 11개중 equals, hashCode, toString만 알면 된다.
    • 모든 데이터 타입의 조상이니까 적용되는것
    • object로 받을 경우가 많아서 형변환이 필요하다

0개의 댓글