본문 바로가기

Certification/OCAJP

OCAJP 복습(1)

  1. 지역 변수:
    • 메서드나 블록 안에서 선언
    • 선언된 블록을 벗어나면 사용할 수 없음
    • 기본적으로 외부에서 접근이 불가능하며, 접근 제한자가 필요하지 않음
  2.  멤버 변수:
    • 클래스 수준에서 선언된 변수
    • 클래스의 인스턴스(객체)가 소유
    • 외부 접근을 제한하거나 허용하기 위해 private, public, protected 등의 접근 제한자를 사용할 수 있음

** 인터페이스의 메서드를 구현하지 않은 클래스는 추상 클래스로 선언해야 함

   (명시되어 있지 않더라도)


Book book1 = new EBook(); 구문에 대해 <feat.다형성(Polymorphism)>

  • Book 참조 변수를 사용해 EBook 객체를 참조
  • **참조 변수의 타입(Book)**이 정의한 메서드만 호출할 수 있음
    그러나, **메서드의 실행(실체화)**은 **실제 객체(EBook)**에서 구현된 메서드가 호출

** super.r은 유효하지 않은 구문

상속과 생성자의 관계

상속받은 클래스의 생성자는 반드시 상위 클래스의 생성자를 호출해야 함

  • 암묵적으로 호출: 상위 클래스의 **기본 생성자(매개변수가 없는 생성자)**가 자동으로 호출
  • 명시적으로 호출:
    상위 클래스에 기본 생성자가 없고, 매개변수를 받는 생성자만 있다면, super(...)를 사용해 명시적으로 호출

acct.getAmount()는 getAmount() 메서드의 반환값을 가져옴.

이 반환값은 읽기 전용이며, 값을 설정하거나 변경할 수 XXXX


Exception은 Checked Exception이므로,
이를 호출하는 코드에서는 반드시 try-catch 블록으로 처리하거나, 메서드에서 다시 throws로 던져야 함

 

public class Test {
    void readCard(int cardNo) throws Exception {
        System.out.println("Reading Card");
    }

    void checkCard(int cardNo) throws RuntimeException {
        System.out.println("Checking Card");
    }

    public static void main(String[] args) {
        Test ex = new Test();
        int cardNo = 12344;

        try {
            ex.readCard(cardNo);  // Checked Exception 처리
        } catch (Exception e) {
            System.out.println("Exception caught: " + e.getMessage());
        }

        ex.checkCard(cardNo);  // RuntimeException은 예외 처리 강제되지 않음
    }
}

 

위와 같이 메서드 자체에도 트라이 캐치를 해주거나 main 메서드에 throws exception 해주어야 함


public static void main(String[] args) {
    int x = 5;
    while (isAvailable(x)) {
        System.out.print(x);
    }
}

public static boolean isAvailable(int x) {
    return x-- > 0 ? true : false;
}

왜 x가 공용으로 사용되지 않는가?

  1. isAvailable 메서드의 매개변수 x는 복사본이다:
    • isAvailable(int x) 메서드가 호출될 때, main 메서드에서 선언된 x 값이 메서드의 매개변수로 전달
    • 하지만 이 전달은 값 복사 방식!!!!!!!
      즉, isAvailable 메서드는 main 메서드의 원래 x를 수정할 수 없음.
      메서드 내부에서 사용되는 x는 독립적인 복사본
  2. 서로 다른 스코프:
    • isAvailable의 x와 main의 x는 서로 다른 메모리 공간에 존재
    • isAvailable 메서드 내에서 x--가 실행되더라도, 이는 isAvailable 메서드 내부에서만 영향을 미치고, main 메서드의 x에는 영향을 주지 않음

Java에서 switch 문이 지원하는 타입:

  • byte, short, char, int
  • String (Java 7 이후)
  • enum >> 열거형(enum) 데이터 타입으로, 상수들을 그룹으로 묶을 때 사용

enum과 컬렉션의 차이점

  1. 용도:
    • enum: 미리 정해진 값의 집합을 표현 (상수 집합).
    • 컬렉션(List, Set, Map): 데이터의 동적 집합을 저장하고 관리.
  2. 동적/정적:
    • enum: 값이 고정되어 있으며 변경 불가능.
    • 컬렉션: 값이 동적으로 추가, 삭제 가능.
  3. 구조:
    • enum은 상수 값들만 포함하며, 이 값들은 enum 타입에 종속
    • 컬렉션은 여러 타입의 객체를 저장할 수 있는 일반 데이터 구조

String s3 = String.valueOf(s1 + s2);

숫자 변환할 때. string에서 숫자연산값은 parse쓰면 됨


remove(Object o) 메서드는 리스트에서 첫 번째로 일치하는 요소를 제거


javac Greeting.java : To compile the program

java Greeting Duke : To run the program with argument "Duke"


 

  • 인스턴스 변수:
    • 객체마다 독립적으로 저장
    • 생성된 객체마다 고유의 값
  • 클래스 변수(static):
    • 모든 객체가 값을 공유

discount = (qty >= 90) ? 0.5 : (qty > 80) ? 0.2 : 0;

 

앞에가 참이면 뒤 연산이 계산 안되어서 False라고 생각했는데,

90을 충족하지 못하면 90보다 작고 80보다 큰것은 0.2를 반환하기 때문에 True


Base b1 = new DerivedB();
Base b2 = new DerivedA();
Base b3 = new DerivedB();
b1 = (Base) b3;
Base b4 = (DerivedA) b3;
b1.test();
b4.test();

 

Base b4 = (DerivedA) b3;

  • b3는 DerivedB 객체를 참조하, 이는 DerivedA를 상속했으므로 정상적으로 캐스팅
  • 따라서 b4는 DerivedB 객체를 참조하지만, DerivedA 타입으로 선언

객체를 다루는 관점을 변경하는 것. 객체 자체는 캐스팅을 통해 타입이 바뀌지 않음

 

DerivedA는 Base를 상속했으므로, DerivedA에 정의된 메서드도 참조할 수 있게 됨

  • 예를 들어, DerivedA에만 정의된 메서드가 있다면 이를 호출할 수 있음

>> 캐스팅은 컴파일러에게 객체의 실제 타입에 대한 정보를 추가로 알려주는 역할.
        이를 통해 더 구체적인 타입의 메서드나 필드에 접근할 수 있음


 

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

OCAJP 복습(3)  (0) 2024.12.09
OCAJP 복습(2)  (0) 2024.12.08
OCAJP 준비 (Q219 - Q236)  (1) 2024.11.28
OCAJP 준비 (Q201 - Q218)  (2) 2024.11.27
OCAJP 준비 (Q177 - Q200)  (0) 2024.11.26