자바의 클래스와 객체에 대한 설명 중 틀린 것은?
생성자에 대한 설명 중 틀린 것은?
다음 코드 중 오류가 있는 것은?
다음 코드에 대해 설명하는 문항 중 틀린 것은?
Book[] book = new Book[10];
for(int i=0; i<book.size; i++) book[i] = new Book();
로 객체들을 만들어야 비로소 배열이 완성된다.다음 중 메소드 오버로딩에 실패한 사례는?
class A{
int x;
void f(int a) { x = a; }
int f(int b) { return x+b; }
}
class A{
int x;
void f(int a ) { x = a; }
void f() { x = 0; }
}
class A {
int x;
inf f() { return x; }
int f(int a, int b) { return a+b; }
}
class A {
static int x=0;
static int f(int a) { return a+x; }
static int f() { return 3; }
}
1번의 void f(int a)와 int f(int b)는 메소드 이름과 매개변수 개수 및 타입이 모두 다르므로 메소드 오버로딩이 실패한 사례이다.
다음 코드에 대해 답해라.
class TV {
int size;
String manufacturer;
public TV() {
size = 32;
manufacturer = "LG";
System.out.println(size+"인치 "+manufacturer);
}
public TV(String manufacturer) {
this.size = 32;
this.manufacturer = manufacturer;
System.out.println(size+"인치 "+manufacturer);
}
public TV(int size, String manufacturer) {
this.size = size;
this.manufacturer = manufacturer;
System.out.println(size+"인치 "+manufacturer);
}
}
class TV {
int size;
String manufacturer;
public TV() {
this(32, "LG"):
}
public TV(String manufacturer) {
this(32, manufacturer);
}
public TV( int size, String manufacturer) {
this.size = size;
this.manufacturer = manufacturer;
System.out.println(size + "인치" + manufacturer);
}
}
32인치 LG
32인치 삼성
new TV(65, "삼성");
다음 클래스에는 컴파일 오류가 있다. 오류 부분을 지적하고 오류를 수정할 수 있는 방법을 모두 제시하라. 그리고 그 중 객체 지향 프로그래밍에 가장 적합한 방법을 설명하라.
class Person {
private int age;
}
public class Example {
public static void main (String args[]) {
Person aPerson = new Person();
aPerson.age = 17;
}
}
class Person {
private int age;
public Person() {}
public Person(int age) {
this.age = age;
}
}
public class Example {
public static void main (String args[]) {
Person aPerson = new Person(17);
}
}
class Person {
private int age;
public getAge(int age) {
this.age=age;
}
}
public class Example {
public static void main (String args[]) {
Person aPerson = new Person();
aPerson.getAge(17);
}
}
다음 코드를 객체 지향 프로그래밍 관점에서 바람직한 코드로 수정하라.
class Power {
public int kick;
public int punch;
}
public class Example {
public static void main (String args[]) {
Power robot = new Power();
robot.kick = 10;
robot.punch = 20;
}
}
class Power {
private int kick;
private int punch;
public void Power() {}
public void Power(int kick, int punch) {
this.kick = kick;
this.punch = punch;
}
}
public class Example {
public static void main (String args[]) {
Power robot = new Power(10,20);
}
}
class Power {
private int kick;
private int punch;
public void set(int kick, int punch) {
this.kick = kick;
this.punch = punch;
}
}
public class Example {
public static void main (String args[]) {
Power robot = new Power();
robot.set(10,20);
}
}
다음은 객체 소멸에 대한 설명이다. 보기에서 빈칸에 적절한 말을 삽입하라.
자바에서는 객체를 임의로 __수 없으며, 이것은 개발자에게 매우 ___ 일이다. 참조하는 __가 하나도 없는 객체를 _라고 판단하고, 이를 가용 메모리로 자동 수집하는 _을 진행시킨다. 응용프로그램에서 자바 플랫폼에게 이 과정을 지시하고자 하면 ___코드를 호출하면 된다.
소멸시킬 / 다행한 / 레퍼런스 / 가비지 / 가비지 컬렉션 / System.gc()
다음 코드가 실행될 때 가비지가 발생하는가? 만일 발생한다면 발생하는 위치와 과정을 설명하라.
String s = null;
for(int n=0; n<10; n++) {
s = new String("Hello"+n);
System.out.println(s);
}
s가 가리키는s = new String("Hello"+n);
코드가 반복될수록 가비지가 발생한다.
String a = new String("aa");
String b = a;
String c = b;
a = null;
b = null;
String c = b;
에서 c가 가리키는 것은 aa가 되었으므로 이후 a와 b가 null이 됐어도 가비지가 발생하지 않는다.
다음 클래스에서 멤버 함수의 사용이 잘못된 것은?
class StaticTest {
static int a;
static int getA() { return a; } //(1)
int b;
int getB() { return b; } //(2)
int f() { return getA(); } //(3)
static int g() { return getB(); } //(4)
}
(4) static int g() { return getB(); }
static 메소드에서 non-static 메소드로 접근 불가하다.
다음 코드에서 잘못된 문장은?
class StaticSample {
public int x;
public static int y;
public static int f() { return y; }
}
public class UsingStatic {
public static void main (String[] args) {
StaticSample.x = 5; //(1)
StaticSample.y = 10; //(2)
int tmp = StaticSample.f(); //(3)
StaticSample a = new StaticSample();
tmp = a.y; //(4)
}
}
(1) public int x;
는 static 메소드가 아니므로 main 안에서 StaticSample ss = new StaticSample();
를 써줘야 한다.
다음 소스에 틀린 부분이 있는지 판단하라. 만일 있다면 수정하라.
class Test {
public int f(int a, int b) {
return a + b;
}
public static void main (String[] args) {
int sum = f(2,4);
}
}
class Test {
public static int f(int a, int b) {
return a + b;
}
public static void main (String[] args) {
int sum = f(2,4);
}
}
main이 static 메소드이므로 f()도 static 메소드여야 한다.
다음 코드에는 final과 관련하여 3가지 잘못된 것이 있다. 잘못된 내용을 설명하라.
final class Rect {
final protected int x = 5;
final public void f() {
x++;
System.out.pring(x);
}
}
class SpecialRect extends Rect { // SpecialRect는 Rect를 상속받는다.
public void f() {
System.out.print(super.x); // super.x는 Rect의 x
}
}
가비지와 가비지 컬렉션은 표준 C나 C++에는 없는 자바 언어의 독특한 특성이다. 가비지란 무엇인지, 자바에서는 왜 가비지 컬렉션이 필요한지, 가비지 컬렉션이 개발자에게 주는 장점과 단점은 무엇인지 설명하라.
참조하는 레퍼런스가 하나도 없는 객체나 배열이 가비가 된다. 가비지가 많아지면 상대적으로 자바 가상 기계에서 응용 프로그램에게 할당해 줄 수 있는 가용 메모리의 양이 줄어들어 자바 응용프로그램의 실행에 영향을 줄 수 있으므로 가비지 컬렉션이 필요하다. JVM은 가용 공간이 일정 크기 이하로 줄어들게 되면 자동으로 가비지를 회수하여 가용 메모리 공간을 늘려 개발자는 할당받은 메모리를 반환하는 코딩 부담을 덜게 된다.
다음 표를 완성하라. 멤버가 4가지 접근 지정자로 각각 선언되었을 때, 같은 패키지의 클래스와 다른 패키지의 클래스에서 이 멤버를 접근할 수 있는지 O, X로 표기하라.
default | public | protected | private | |
---|---|---|---|---|
같은 패키지 클래스 | o | o | o | x |
다른 패키지 클래스 | x | o | x | x |