본문 바로가기

Certification/OCAJP

OCAJP 준비 (Q66 - Q90)

1.

1) JDK (Java Development Kit) - 개발할 때 필요 (컴파일러 포함)

개발자가 Java 프로그램을 개발할 때 필요한 도구 모음

컴파일러(javac), JRE, 개발도구들

>> 소스코드(.java) -> javac 컴파일러 -> 바이트코드(.class)

 

2) JRE (Java Runtime Environment) - 실행

Java 프로그램을 실행하기 위한 환경

JVM(Java Virtual Machine), 기본 라이브러리

>> 바이트코드(.class) -> JVM -> 프로그램 실행

 

2.

public class Triangle {
   static double area;  >>>>>>> 클래스 변수
   int b = 2, h = 3;    >>>>>>> 인스턴스 변수
   public static void main(String[] args) {
       double p, b, h;       //line n1
       if (area == 0) {
           b = 3;
           h = 4;
           p = 0.5;
           area = p * b * h;     //line n2
       }
       System.out.println("Area is " + area);
   }
}

 

인스턴스 변수를 사용하려면 객체를 따로 main에서 생성해줘야 함

 

public class Triangle {
    static double area;   
    int b = 2, h = 3;    // 인스턴스 변수
    
    public static void main(String[] args) {
        // 인스턴스 변수를 사용하려면 객체 생성 필요!
        Triangle triangle = new Triangle();
        
        double p;        // 지역변수 p만 선언
        if (area == 0) {     
            // b, h는 인스턴스 변수 사용
            p = 0.5;
            area = p * triangle.b * triangle.h;  
        }
        System.out.println("Area is " + area);
    }
}

 

3.

Java 7 이전의 switch 문에서 허용되는 타입:

  1. byte, short, char, int의 기본형(primitive)
  2. Byte, Short, Character, Integer의 래퍼 클래스
  3. enum 타입

이후에는 String도 사용가능

Switch의 변수가 무엇으로 선언되어 있는지 확인해야함

 

4.

Boolean[] bool = new Boolean[2];

// bool[0]에는 true 값을 가진 Boolean 객체 생성
bool[0] = new Boolean(Boolean.parseBoolean("true"));

// bool[1]에는 null을 가진 Boolean 객체 생성
bool[1] = new Boolean(null);    // null을 파라미터로 받으면 false로 처리됨!

System.out.println(bool[0] + " " + bool[1]);
// 출력: "true false"

 

Boolean은 null 자체를 파라미터로 받으면 False처리.

만약 null예외 나게하려면

Boolean b = null;
b.toString();    // NullPointerException!

// 또는
Boolean[] bool = new Boolean[2];
bool[1] = null;  // null 자체를 할당
System.out.println(bool[0] + " " + bool[1]);  // NullPointerException

 

위와 같이 null 자체를 변수에 할당해야 한다.

 

5.

public class MyException extends RuntimeException { }

public class Test {
   public static void main(String[] args) {
       try {
           method1();
       } catch (MyException ne) {
           System.out.print("A");
       }
   }
   
   public static void method1() {
       try {
           throw Math.random() > 0.5 ? new MyException() : new RuntimeException();
       } catch (RuntimeException re) {
           System.out.print("B");
       }
   }
}

 

여기서 중요한 점은  MyException이 RuntimeException을 상속받고 있다는 점이다. 

따라서 Math.random() > 0.5면 MyException 발생할지라도 MyException도 RuntimeException의 자식이라

RuntimeException으로 처리가 됨

 

6.

public class App {
    String myStr = "7007";    // 인스턴스 변수로 "7007" 초기화

    public void doStuff(String str) {
        int myNum = 0;        // 지역변수 myNum 초기화
        try {
            String myStr = str;   // 지역변수 myStr에 "9009" 할당
                                 // 인스턴스 변수 myStr은 여전히 "7007"
            myNum = Integer.parseInt(myStr);  // myNum = 9009
        } catch (NumberFormatException ne) {
            System.err.println("Error");
        }
        // 여기서 myStr은 인스턴스 변수 참조 (7007)
        System.out.println("myStr: " + myStr + ", myNum: " + myNum);
    }

    public static void main(String[] args) {
        App obj = new App();
        obj.doStuff("9009");
    }
}

 

7.

C. More dynamic code at runtime

다형성은 런타임 시점에 객체의 실제 타입에 따라 올바른 메서드를 호출할 수 있게 해줌

이를 통해 코드를 더 동적으로 만들 수 있

 

D. More flexible and reusable code

다형성 덕분에 여러 타입의 객체를 같은 방식으로 처리할 수 있어서, 코드의 유연성과 재사용성을 높일 수 있음

 

B. More efficient code at runtime > 안되는 이유

 

  • 실제로 다형성은 약간의 성능 오버헤드를 발생시킬 수 있음
  • 가상 메소드 테이블을 검색하고 적절한 메소드를 찾는 과정 필요
  • 따라서 "더 효율적"이라고 할 수 없음

8.

char var1 = 'a';     // 지역변수 var1 = 'a'
char var2 = var1;    // 지역변수 var2 = 'a'
var2 = 'e';         // 지역변수 var2를 'e'로 변경

Vowel obj1 = new Vowel();
Vowel obj2 = obj1;   // obj1과 같은 객체를 참조
obj1.var = 'o';      // 둘 다 같은 객체의 var를 'o'로 변경
obj2.var = 'i';      // 둘 다 같은 객체의 var를 'i'로 변경

// 출력
System.out.println(var1 + ", " + var2);     // "a, e" 출력
System.out.print(obj1.var + ", " + obj2.var); // "i, i" 출력

 

 

9.

// a 생성
boolean a = new Boolean(Boolean.valueOf(args[0]));
// 1. Boolean.valueOf("1")은 false 반환
// 2. new Boolean(false)는 false

// b 생성
boolean b = new Boolean(args[1]);
// "null" 문자열로 Boolean 생성 -> false

 

  • Boolean.valueOf()는:
    • "true"(대소문자 무관) -> true
    • 그 외 모든 문자열 -> false
  • new Boolean(String)은:
    • "true"(대소문자 무관) -> true
    • 그 외 모든 문자열(null 포함) -> false

10.

 

StringBuilder의 주요 메소드들:

  • delete(int start, int end): 지정된 범위의 문자 삭제
  • length(): 현재 길이 반환
  • append(): 문자열 추가
  • insert(): 지정 위치에 삽입
  • reverse(): 문자열 뒤집기

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

OCAJP 준비 (Q106 - Q125)  (8) 2024.11.13
OCAJP 준비 (Q91 - Q105)  (1) 2024.11.07
OCAJP 준비 (Q45 - Q65)  (0) 2024.11.06
OCAJP 준비 (Q26 - Q44)  (0) 2024.11.05
OCAJP 준비 (Q01 - Q25)  (0) 2024.11.04