개인적으로 풀이한 내용이므로 오답일 수 있습니다.
답이 다르다 생각되시면 댓글 부탁드리겠습니다!
1. 자바 클래스와 객체에 대한 설명 중 틀린 것은?
정답 4번
설명 클래스 바깥에 전역 변수를 생성할 수 없는 이유는 캡슐화 원칙이 있기 때문이다.
단 static을 활용하여 전역 변수를 지정할 수 있지만 객체에 대한 설명이므로 위의 설명과 같다.
2. 생성자에 대한 설명 중 틀린 것은?
정답 4번
설명 생성자에서 아예 안 되는 것은 아니다. return 자체가 메소드의 실행을 끝내고 원래 호출한 영역으로의 반환의 의미를 갖는다. 생성자에 타입을 부여하여 자체 return을 넣는 것이 안도는 것뿐이지 생성자 코드 내 어디서든 return; 문을 사용하면 할 수 있다. 위 캡처 본을 보면 if 문에 return을 받는다고 에러가 되지는 않는다.
3. 다음 코드 중 오류가 있는 것은?
정답 3번
설명 문제는 객체 배열 선언을 한 경우이다.
객체 배열의 경우 좌측에 배열의 크기를 지정하는 경우 컴파일 오류가 발생한다. 또한 기본형 배열들도 동일하게 좌측에 크기를 지정하면 동일하게 컴파일 오류가 발생한다.
4. 다음 코트에 대해 설명하는 문항 중 틀린 것은?
정답 2번
설명
1
|
Book [] book = new Book [10];
|
위와 같은 객체 배열은 10개를 생성하는 것이 아닌 크기가 10인 배열을 생성하는 것이다.
5. 다음 중 메소드 오버로딩에 실패한 사례는?
정답 1번
설명 오버로딩은 이름이 동일하며, 매개변수의 타입이나 개수가 서로 다른 여러 개의 메소드를 중복해서 작성하는 것이 오버 로딩이다.
1
2
3
4
5
6
|
public int pro(int a, int b){
return a - b;
}
public int pro(int a, int b, int c){
return a + b + c;
}
|
2. 오버로딩이 실패한 사례
1
2
3
4
5
6
|
public int pro(int a, int b){
return a - b;
}
public int prob(int a, int b, int c){
return a + b + c;
}
|
(댓글로 부족한 부분 언급해주셔서 감사드립니다!)
(2022-06-01 수정완료.)
6. 다음 코드에 대해 답하라.
(1) this()를 이용하여 생성자를 수정하라
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
class TV{
private int size = 0;
private String manufacturer = null;
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);
}
}
public class Ex {
public static void main(String[] args) {
TV tv = new TV();
TV tv1 = new TV("삼성");
TV tv2 = new TV(65, "삼성");
}
}
|
설명 불필요한 코드 중복을 막기 위해서 최종 참조 위치의 생성자를 제외하고 System.out.println을 제거한다.
this와 this()는 값을 참조받으므로 this()는 다른 생성자를 참조하기에 System.out.println()을 호출 또한 참조된다. 때문에 각 라인에 있는 출력문을 제거하지 않으면 각 2번씩 호출하며 중복된다.
(2) new TV();와 new Tv("삼성"); 를 실행하면 실행 결과는 각각 무엇인가?
설명 (1) 번의 작은 캡처와 동일하다.
단 System.out.println을 중복하여 작성하면 다음과 같이 나온다.
(3) 65인치 "삼성" TV 객체를 생성하는 코드를 적어라.
1
|
TV tv2 = new TV(65, "삼성");
|
설명 매개변수를 전달받는 객체를 생성하면 된다.
(4) this()를 이용하는 장점은 무엇인가?
설명 같은 클래스 내 선언된 다른 생성자들을 호출하여 사용할 수 있다.
즉 생성자들을 참조하여 사용할 수 있다.
7. 다음 클래스에는 컴파일 오류가 있다. 오류 부분을 지적하고 오류를 수정할 수 있는 방법을 모두 제시하라. 그리고 그중 객체 지향 프로그래밍에 가장 적합한 방법을 설명하라.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class Person{
private int age=0;
public Person() {}
public Person(int age) {
this.age = age;
}
}
public class Example {
public static void main(String[] args) {
Person person= new Person(17);
}
}
|
설명 객체를 클래스를 생성하고 생성자를 통하여 클래스를 초기화하여 내용을 클래스 내부의 캡슐화된 상태로 다루는 것이 객체 지향 프로그래밍에 가장 적합하다.
8. 다음 코드를 객체 지향 프로그래밍 관점에서 바람직한 코드로 수정하라.
(1) 생성자를 이용하여 수정하라.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
class Power{
private int kick=0;
private int punch=0;
public Power() {}
public 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);
}
}
|
(2) 생성자 대신 메소드를 추가하여 수정하라.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
class Power{
private int kick=0;
private int punch=0;
public void set(int i, int j) {
this.kick = i;
this.punch = j;
}
}
public class Example {
public static void main(String[] args) {
Power robot = new Power();
robot.set(10,20);
}
}
|
9. 다음은 객체 소멸에 대한 설명이다. 보기에서 빈칸에 적절한 말을 삽입하라.
정답 1. 소멸시킬 / 2. 다행한 / 3. 레퍼런스 / 4. 가비지 / 5. 가비지 컬렉션 / 6.System.gc()
자바에서는 객체를 임의로 _____수 없으며, 이것은 개발자에게 매우 _____일이다. 참조하는_____가 하나도 없는 객체를 _____라고 판단하고, 이를 가용 메모리로 자동 수집하는_____을 진행시킨다. 응용프로그램에서 자바 플랫폼에게 이 과정을 지시하고자 하면_____ 코드를 호출하면 된다. |
설명
자바는 C/C++과 다르게 객체를 임의로 소멸시킬 수 없다.
소멸자를 활용하여 메모리 반환을 안 했을 때 생기는 문제를 제거해주므로 개발자에게 매우 다행한 일이다.
참조하는 레퍼런스가 하나도 없는 객체를 가비지라고 판단한다. 이때 가용 메모리로 자동 수집하는 가비지 컬렉션을 진행시킨다. 지시하고자 하면 System.gc() 코드를 호출하면 된다.
10. 다음 코드가 실행될 때 가비지가 발생하는가? 만일 발생한다면 발생하는 위치와 과정을 설명하라.
1
2
3
4
5
|
String s = null;
for(int n=0; n<10; n++){
s = new String("Hello"+n);
System.out.println(s);
}
|
정답 3번 라인에서 가비지가 발생한다.
설명 문자열 s를 반복문 안에서 s = new String("Hello"+n); 을 통하여 객체가 참조되는 것이 아닌 생성된다.
이때 n은 반복하여 값을 재활용 하지만 s = new String("Hello"+n); 의 라인에는 s라는 객체를 10번 반복해서 생성하기 때문에 생성 -> 반환 -> 생성 -> 반환 코드를 지속적으로 반복하므로 가비지가 발생된다.
1
2
3
4
5
|
String a = new String("aa");
String b = a;
String c = b;
a=null;
b=null;
|
정답 가비지가 발생하지 않는다.
설명 문자열 a객체에 aa가 저장되며 생성된 값을 b가 참조하고 b를 c가 참조한다. 값 참조 이후에 a와 b의 값을 모두 null로 초기화를 해줬기 때문에 c에 aa객체가 존재하며, 나머지 객체는 null로 아무 곳도 참조하지 않기 때문에 가비지가 존재하지 않는다.
11. 다음 클래스에서 멤버 함수의 사용이 잘못된 것은?
정답 4번
설명 static에서 default으로 이동할 때는 사용이 가능하지만 default에서 static로 반대로는 불가능하다.
12. 다음 코드에서 잘못된 문장은?
정답 1번
설명
static의 경우 전역 변수와 전역 함수를 만들 때 사용된다. public int x;는 static으로 선언되지 않았기 때문에 객체를 StaticSample ss(객체 명) = new StaticSample();를 통하여 생성 이후 ss.x =5;를 선언하는 방법과 public static int x;로 멤버 변수를 바꿔주는 방법이 있다.
13. 다음 소스에 틀린 부분이 있는지 판단하라. 만일 있다면 수정하라.
설명 f 함수를 public static int f(int a, intb)로 수정하여 전역 함수로 변경한다.
14. 다음 코드에는 final과 관련하여 3가지 잘못된 것이 있다. 잘못된 내용을 설명하라.
1
2
3
4
5
6
7
|
final class Rect {
final protected int x =5;
final public void f() {
x++;
System.out.println(x);
}
}
|
설명
1) 2번 라인 = final은 public으로 선언해야 한다. protected를 수정한다.
2) 3번 라인 = final은 상수로 사용된다. 즉 String, int형 등 변수 타입이 존재해야 한다.
3) 4번 라인 = x++; final public은 변수가 아닌 상수값이므로 값을 변경할 수 없다.
15. 가비지와 가비지 컬렉션은 표준 C나 C++ 에는 없는 자바 언어의 독특한 특성이다. 가비지란 무엇인지, 자바에는 왜 가비지 컬렉션이 필요한지, 가비지 컬렉션이 개발자에게 주는 장점과 단점은 무엇인지 설명하라.
설명
가비지 컬렉션의 장점
개발자가 소멸자로 인한 디버깅 오류에 신경을 안 써도 된다는 점이다. 또한 자동으로 자바 프로그램에서 잡아주기 때문에 소멸자가 따로 존재하지 않는 점에서 안전성이 많이 확보된다.
가비지 컬렉션의 단점
가비지 컬렉션이 프로그램 내부에서 돌아가기 때문에 언제 작동될지 모르는 문제로 인하여 자바는 실시간 프로그램에 적합하지 못하며, 중간에 가비지 컬렉션이 실행되면서 프로그램이 버벅거리는 현상이 발생될 수 있다.
16. 다음 표를 완성하라. 멤버가 4가지 접근 지정자로 각각 선언되었을 때 같은 패키지의 클래스와 다른 패키지의 클래스에서 이 멤버를 접근할 수 있는지 O, X로 표기하라.
default |
public |
protected |
private |
|
같은 패키지 클래스 |
O |
O |
O |
X |
다른 패키지 클래스 |
X |
O |
X / 상속시에는 가능하다. |
X |
오답이라 생각되는 부분이 있다면 댓글로 남겨주시면 감사드리겠습니다.
다음 포스팅 때 뵙겠습니다!
감사합니다!
'개인 학습용 해설 > 명품 Java Programming' 카테고리의 다른 글
명품 JAVA Programming 4판 5장 연습문제 - 이론문제 (0) | 2021.12.04 |
---|---|
명품 JAVA Programming 4판 4장 연습문제 - 실습문제 (0) | 2021.11.18 |
명품 JAVA Programming 4판 3장 연습문제 - 실습문제 개인 풀이 (0) | 2021.11.08 |
명품 JAVA Programming 4판 3장 연습문제 - 이론문제 개인 풀이 및 개인해설 (0) | 2020.10.16 |
명품 JAVA Programming 4판 2장 연습문제 - 실습문제 (0) | 2020.10.15 |