[문제] 자바의 VM은 기본적으로 멀티 쓰레드 방식이다. 처리를 동시에 할 수 있다는 장점이 있지만 반면에 동시성을 유발할 수 있다. 이때 어떤 동작에서만 싱글 쓰레드로 동작하게 할 수 있는 키워드는 무엇인가?
- ① synchronized
- ② singleThread
- ③ wait
- ④ goto
[문제] 다음 예제 프로그램에 대한 설명으로 올바르지 않는 것은?
public class Test { public static void main(String[] args) { String data="jeonhye0"; //(a) int num=Integer.parseInt(data); //(b) System.out.println(num); //(c) } }
- ① 컴파일 에러난다.
- ② (b)라인에서 java.lang.NumberFormatException 발생한다.
- ③ NumberFormatException은 RuntimeException 하위 클래스이다.
- ④ try{ int num=Integer.parseInt(data); //(b)}catch(Exception e){}와 같이 하면 실행 시 문제가 발생한다.
[문제] 다음중 최상위 예외객체는 어느것인가?
- ① Exception
- ② IOException
- ③ RemoteException
- ④ RunTimeException
(java.lang.Object -> java.lang.Throwable -> java.lang.Exception -> java.lang.RuntimeException)
[문제] 다음 중 기능이 다른 셋과 다른 제어문은?
- ① for
- ② do-while
- ③ if
- ④ while
[문제] 다음 중 객체지향 개념의 하나인 Encapsulation의 장점이 아닌 것은 무엇인가?
- ① 다른 클래스에 어느 정도 의존적인가를 나타내는 정도이다.
- ② 인터페이스를 변경하지 않고 클래스의 구현을 변경할 수 있다.
- ③ 클래스의 내부 및 구현 방법을 알 필요 없이 본인의 클래스를 개발 할 수 있다.
- ④ 클래스의 어트리뷰트가 부적절하게 변경되는 것을 막을 수 있다.
[문제] 다음은 리팩토링의 특징에 대해서 설명한 것이다. 내용이 올바르지 않은 것은 무엇인가?
- ① 리팩토링은 새로운 기능을 추가하는 것은 아니다.
- ② 패턴을 적용하게 되면 리팩토링은 할 필요가 없다.
- ③ 복잡한 코드일수록 리팩토링을 해야 할 필요가 있다.
- ④ 유지보수가 용이하려면 리팩토링을 해야만 한다.
[문제] 다음 중 컴파일과 실행이 가능한 main()메서드의 형태를 두 개 고르시오.
- ① public static void main();
- ② public static void main(String[] args[]);
- ③ public static void main(String args);
- ④ public static void main(String args[]);
- ⑤ public static void main(String[] args);
※ 참조
컴파일과 실행이 가능한 main() 메소드의 형태는 아래의 4가지.
public static void main(String args[])
public static void main(String[] args)
static public void main(String args[])
static public void main(String[] args)
그렇지만
static void main(String[] args)는 컴파일에서는 문제가 없지만,
수행시에 Main method not public으로 보인다.
컴파일과 실행이 가능한 main() 메소드의 형태는 아래의 4가지.
public static void main(String args[])
public static void main(String[] args)
static public void main(String args[])
static public void main(String[] args)
그렇지만
static void main(String[] args)는 컴파일에서는 문제가 없지만,
수행시에 Main method not public으로 보인다.
[문제] 다음 중 에러 없이 컴파일되며 상속되지 않는 클래스를 고르시오.
- ① final abstract class Test{
int i;
void methodA(){}
} - ② private class Test{
int i;
abstract void methodA();
} - ③ abstract Test{
final int i = 0;
final void methodA(){}
} - ④ final class Test{
final int i=0;
final void methodA(){}
} - ⑤ final class Test{
int i;
void methodA(){}
}
※ 참조
1,2는 클래스 선언이 잘못되었다.
final과 abstract는 함께 올 수 없으며, private는 클래스 앞에 올 수 없는 접근 제한자이다.
단 nested class로 선언된 경우 (클래스 안에 클래스 선언) private 또한 사용 가능하다.
3 abstract 클래스는 상속할 수 있고, final 변수나 메소드를 가지는 클래스도 상속할 수 있으므로 4도 상속 할 수 있다.
1,2는 클래스 선언이 잘못되었다.
final과 abstract는 함께 올 수 없으며, private는 클래스 앞에 올 수 없는 접근 제한자이다.
단 nested class로 선언된 경우 (클래스 안에 클래스 선언) private 또한 사용 가능하다.
3 abstract 클래스는 상속할 수 있고, final 변수나 메소드를 가지는 클래스도 상속할 수 있으므로 4도 상속 할 수 있다.
[문제] 다음 프로그램의 실행결과는?
public class Test{ public static void leftShift(int i, int j){ i<<=j; } public static void main(String[] args){ int i=4, j=2; leftShift(i,j); System.out.println(i); } }
- ① 2
- ② 4
- ③ 8
- ④ 16
- ⑤ 컴파일 에러
※ 참조
leftShift 함수에서 변수 i의 값을 바꾸기는 했지만 이는 main 메소드에서 정의된 i와 j의 값에는 영향을 미치지 못함.
leftShift 함수에서 변수 i의 값을 바꾸기는 했지만 이는 main 메소드에서 정의된 i와 j의 값에는 영향을 미치지 못함.
[문제] point x 위치에 올 수 있는 문장을 모두 고르시오.
class Super{ public float getNumber(){ return 3.0f; } } public class Sub extends Super{ // point x }
1) public float getNumber(){return 4.f;}
2) public void getNumber(){return 4.0f;}
3) public void getNumber(double d);
4) public double getNumber(float f){return 4.0f;}
1)는 제한자의 범위와 반환형 매개변수의 개수가 모두 일치하는 메소드 오버라이딩이므로 해당 위치에 올 수 있다. 3)와 4)의 경우에는 매개변수의 수가 다르기 때문에 오버로딩의 의미로 해당 위치에서 사용될 수 있다.
단, 2)의 경우 매개변수의 수와 메소드 이름이 상위 클래스의 메소드와 일치하지만 반환형은 일치하지 않으므로, 오버라이딩이 잘못되었다는 컴파일 에러를 발생시킨다.
단, 2)의 경우 매개변수의 수와 메소드 이름이 상위 클래스의 메소드와 일치하지만 반환형은 일치하지 않으므로, 오버라이딩이 잘못되었다는 컴파일 에러를 발생시킨다.
[문제] 다음 코드가 실행된 뒤 temp변수의 값은?
public static void main(Stirng[] args){ Long temp = (int)3.9; temp %= 2; }
- ① 0
- ② 1
- ③ 2
- ④ 3
- ⑤ 4
int형 변환 시 내림하므로 3%2=1이 된다.
[문제] 다음 중 맞는 선언문을 두 가지 고르시오.
- ① String s = null;
- ② String s = 'null';
- ③ String s = (String)'abc';
- ④ String s = "This is a string";
- 5 String s = "This is a very\n long string";
[문제] ()안에 올 수 없는 코드를 두 가지 고르시오.
( ) public class A{}
- ① package B;
- ② class B{}
- ③ public class B{}
- ④ protected class B{}
- ⑤ import java.lang.*;
public class는 파일에 하나만 존재하며, protected 접근제한자는 클래스 앞에 올 수 없다.