본문 바로가기

Certification/OCAJP

OCAJP 복습(4)

 

. Error class is extendable

  • Error 클래스는 확장 가능
  • 하지만, Error를 상속받아 새 클래스를 만드는 것은 일반적으로 잘못된 설계로 간주

Error 확장의 비추천 이유

  • Error는 주로 JVM에서 발생하며, 개발자가 처리할 필요가 없음
  • 이를 확장하여 사용자 정의 클래스를 만들면 혼란을 초래할 가능성 발

Error is a Throwable.

  • 설명:
    • Error는 Throwable의 서브클래스
    • Throwable은 예외와 오류를 모두 나타내는 최상위 클래스

for (int e : data) {
    if (e != key) {
        continue;
        count++; // 이 위치는 절대 실행되지 않습니다.
    }
}

 

continue가 count++보다 먼저 실행되어 절대 count++에 도달할 수 없음


LocalDateTime dt = LocalDateTime.of(2014, 7, 31, 1, 1);
System.out.println(dt.format(DateTimeFormatter.ISO_DATE));

LocalDateTime dt = LocalDateTime.of(2014, 7, 31, 1, 1);
System.out.println(dt.format(DateTimeFormatter.ISO_DATE_TIME));

 

1. 2014-07-31

2. 2014-07-31T01:01


. static 메서드와 매개변수의 관계

  • static 메서드는 매개변수를 자유롭게 사용할 수 있음
  • 매개변수는 메서드 호출 시 전달되는 값이며, 해당 값은 메서드 실행 시 스택 메모리에 로드
  • 매개변수는 static 또는 인스턴스와 관계가 없다...

Interface Exportable

  • void export(); 메서드가 선언됨.
  • public 접근 제어자가 암묵적으로 포함됨.

인터페이스에서는 public이 암묵적 선언임을 기억


class Parent {
    public void show() {
        System.out.println("Parent's show method");
    }
}

class Child extends Parent {
    public void show() {
        System.out.println("Child's show method");
    }
}

public class Test {
    public static void main(String[] args) {
        Parent p = new Parent(); // 부모 객체 생성
        Child c = (Child) p; // 다운캐스팅 시도 (실패)
        c.show(); // 런타임 예외 발생
    }
}

 

애초에 자식 객체라서 같은  참조변수로는 다운캐스팅이 가능하지만

애초에 부모타입의 객체 였다면 자식 타입으로 다운캐스팅 실패

 

>Exception in thread "main" java.lang.ClassCastException: Parent cannot be cast to Child


import static clothing.Shirt.getColor;

public void matchShirt() {
    String color = getColor();
    if (color.equals("Green")) {
        System.out.print("Fit");
    }
}

 

  • Line n1에 import static clothing.Shirt.getColor;를 추가
    이는 getColor() 메서드를 정적으로 가져와 클래스 이름 없이 사용할 수 있도록 함
  • Line n2에 String color = getColor();를 추가

for (String s : days) {
    switch (s) {
        case "sat":
            wd -= 1;
            break; // switch 문만 종료
        case "sun":
            wd -= 1;
            break;
    }
    if (wd < -1) { // 조건에 따라 for 루프 종료
        break; // for 루프 전체 종료
    }
}

 

 

switch 문 안에서의 break는 단순히 switch문 만을 break

만약 for문 자체를 종료학 싶다면 그 밖에서 break 걸어야함


인터페이스 구현과 추상 클래스

  • 인터페이스를 구현하는 클래스는 인터페이스의 모든 메서드를 반드시 구현해야 함
  • 만약 일부 메서드를 구현하지 않았다면, 해당 클래스는 추상 클래스로 선언해야 함
  • 추상 메서드가 없어도, 구현되지 않은 인터페이스 메서드가 남아 있는 경우 추상 클래스로 선언해야 함

추상 클래스가 되는 조건 요약

  • 추상 메서드가 있을 경우: 자동으로 추상 클래스
  • 인터페이스를 구현했으나 일부 메서드를 구현하지 않았을 경우: 추상 클래스여야 함
// 인터페이스 정의
interface Downloadable {
    // 인터페이스 메서드는 기본적으로 public abstract
    void download();
}

interface Readable extends Downloadable { // Readable은 Downloadable을 확장
    void readBook();
}

// 추상 클래스 Book
abstract class Book implements Readable {
    // Readable 인터페이스의 readBook 메서드를 구현
    public void readBook() {
        System.out.println("Read Book");
    }
    // Downloadable 인터페이스의 download 메서드는 구현하지 않음 -> 추상 클래스여야 함
}

// 일반 클래스 EBook
class EBook extends Book {
    // Book 클래스의 readBook 메서드를 오버라이딩
    public void readBook() {
        System.out.println("Read E-Book");
    }
    // Downloadable 인터페이스의 download 메서드를 구현하지 않음 -> 여전히 상위 클래스의 추상 상태 유지
}

// 테스트 코드
public class Test {
    public static void main(String[] args) {
        Book book1 = new EBook(); // EBook은 Book을 상속받았으므로 업캐스팅 가능
        book1.readBook(); // EBook 클래스에서 오버라이딩된 readBook 호출
    }
}

 

마지막 EBook클래스에서 downloadable 메서드를 구현하지 않았기 때문에 Compilation fails 


abstract class Toy {
    int price; // 기본 필드 정의
    // line n1
}

 

Line n1에 들어갈 수 있는 코드들

 

1.public static void insertToy() {
    // 정적 메서드는 추상 클래스에서도 허용
    // 클래스 단위로 객체가 올라가기 때문
}

 

2.final Toy getToy() {
    return new Toy(); // 오류 발생: 추상 클래스는 객체생성 불가
}

 

3.public int calculatePrice() {
    return price;  // 구현된 일반메서드
}

 

4.public void printToy(); // 오류 발생: 구현이 없는 메서드는 abstract여야 함.

'Certification > OCAJP' 카테고리의 다른 글

OCAJP 복습(6)  (0) 2024.12.12
OCAJP 복습(5)  (1) 2024.12.11
OCAJP 복습(3)  (0) 2024.12.09
OCAJP 복습(2)  (0) 2024.12.08
OCAJP 복습(1)  (1) 2024.12.05