연습 문제
20-25분 분량
시험 안내
문제 유형 (총 3가지)
- 코드 읽기 (이 문제 유형을 보여주기 위해 아래 연습 문제 제공)
- 코드 작성하기 (예: Animal 상속하여 Dog 클래스를 작성하시오. ~~한 간단한 시스템을 설계 및 구현하세요(클래스 3~4개 정도 규모))
- 어떤 개념에 대한 설명하기 (예: OOP의 장점은 무엇인가?)
중간고사에 대비해서 공부해야 할 주제들 (1주 ~ 6주에서 배운 내용 전부)
- Java 언어의 기본 문법
- 개체지향 프로그래밍(OOP)의 필요성
- OOP의 4대 특성 소개
- 클래스와 개체
- 참조형과 포인터
- 생성자
- 접근 제어자(access modifier)
- getter/setter 메서드
- 캡슐화
- 데이터 추상화
- 클래스 다이어그램
- 유연성과 재사용성
- 정적(static) 멤버 변수 및 메서드
- 싱글턴
- 내포(nested) 클래스
- 상속
- 개체의 명시적/암시적 캐스팅
- RTTI(run time type identification) 기능
- Object 클래스
- 다중 상속
1
아래에 있는 각 코드를 읽고 다음 질문에 답하세요. a) 이 코드에 오류가 있나요? 경우에 따라 아래처럼 답안지에 써주세요
- 컴파일 오류가 있다면: ‘컴파일 오류’
- 실행 중 오류가 있다면: ‘런타임 오류’
- 아무 문제 없다면: ‘문제 없음’
b) a)에서 오류가 있었다고 답했으면 그 문제를 어떻게 고칠지 설명하세요. 설명은 문장으로 하셔도 되고 코드를 직접 수정하셔도 됩니다. 코드를 직접 수정하실 경우 아래 형식을 따라주세요.
예: 전) a = p; 후) a = p + 11;
c) a)에서 ‘문제 없음’이라고 답했으면 코드 실행 후 출력되는 결과를 적으세요.
1-a)
// Bar.java
package academy.pocu.comp2500;
public class Bar {
private int x;
public Bar(int x) {
this.x = x;
}
public int getX() {
return this.x;
}
public void setX(int x) {
this.x = x;
}
}
// Program.java
package academy.pocu.comp2500;
public class Program {
public static void main(String[] args) {
Bar bar = new Bar(34);
bar.x -= 10;
bar.setX(20);
System.out.println(bar.getX());
}
}1-b)
// Point.java
package academy.pocu.comp2500;
public class Point {
private int x;
private int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return this.x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return this.y;
}
public void setY(int y) {
this.y = y;
}
public void add(Point other) {
this.y += other.y;
this.x += other.x;
}
public void addTo(Point other) {
other.y += this.y;
other.x += this.x;
}
}
// Program.java
package academy.pocu.comp2500;
public class Program {
public static void main(String[] args) {
Point p1 = new Point(5, 10);
Point p2 = new Point(-1, -1);
Point p3 = new Point(10, 0);
p1.addTo(p2);
p2.add(p3);
p3.addTo(p1);
System.out.println(p1.getX());
System.out.println(p1.getY());
}
}1-c)
// Foo.java
package academy.pocu.comp2500;
public class Foo {
protected String s1;
protected String s2;
public Foo(String s1, String s2) {
this.s1 = s1;
this.s2 = s2;
}
public String getS1() {
return this.s1;
}
public String getS2() {
return this.s2;
}
}
// Bar.java
package academy.pocu.comp2500;
public class Bar extends Foo {
private int x;
private Bar(int x) {
this("POCU", "Academy", x);
}
public Bar(String s1, String s2, int x) {
super(s1, s2);
this.x = x;
}
public int getX() {
return this.x;
}
public void setX(int x) {
this.x = x;
}
private void blackMagic(String s) {
this.s1 = s;
}
}
// Baz.java
package academy.pocu.comp2500;
public class Baz extends Bar {
public Baz(int x) {
super(x);
}
public String magic() {
blackMagic("Rock");
return this.s1 + " " + this.s2;
}
}
// Program.java
package academy.pocu.comp2500;
public class Program {
public static void main(String[] args) {
Baz baz = new Baz(10);
System.out.println(baz.magic());
}
}2
아래의 코드를 읽고 질문에 답하세요.
// Foo.java
package academy.pocu.comp2500;
public class Foo {
private int value = 10;
public Foo(int value) {
}
public int getValue() {
return this.value;
}
public void darkMagic() {
this.value += 20;
}
}
// Bar.java
package academy.pocu.comp2500;
public class Bar {
private int a = 20;
public void lightMagic(Foo foo) {
this.a = foo.getValue();
foo.darkMagic();
}
public int getA() {
return this.a;
}
}
// Program.java
package academy.pocu.comp2500;
public class Program {
public static void main(String[] args) {
Foo foo0 = new Foo(7);
Foo foo1 = new Foo(7);
foo0.darkMagic();
foo1.darkMagic();
Bar bar0 = new Bar();
Bar bar1 = new Bar();
Bar bar2 = new Bar();
bar0.lightMagic(foo1);
System.out.println(foo0.getValue());
System.out.println(bar2.getA());
}
}코드를 실행하면 무엇이 출력되나요?
3
OOP의 4가지 특성을 열거하세요.
4
멤버 변수를 public으로 선언하는 대신 getter와 setter을 사용하는게 더 좋은 이유를 5문장 이내로 설명하시요.
5
아래에 있는 각 코드를 읽고 다음 질문에 답하세요. a) 이 코드에 오류가 있나요? 경우에 따라 아래처럼 답안지에 써주세요
- 컴파일 오류가 있다면: ‘컴파일 오류’
- 실행 중 오류가 있다면: ‘런타임 오류’
- 아무 문제 없다면: ‘문제 없음’
b) a)에서 오류가 있었다고 답했으면 그 문제를 어떻게 고칠지 설명하세요. 설명은 문장으로 하셔도 되고 코드를 직접 수정하셔도 됩니다. 코드를 직접 수정하실 경우 아래 형식을 따라주세요.
예: 전) a = p; 후) a = p + 11;
c) a)에서 ‘문제 없음’이라고 답했으면 코드 실행 후 출력되는 결과를 적으세요.
5-a)
// Person.java
package academy.pocu.comp2500;
public class Person {
private static String myName;
public Person(String name) {
myName = name;
}
public String getMyName() {
return myName;
}
public void setMyName(String name) {
myName = name;
}
}
// Program.java
package academy.pocu.comp2500;
public class Program {
public static void main(String[] args) {
Person person1 = new Person("Greg");
Person person2 = new Person("Bob");
person1.setMyName("Jim");
System.out.println(person1.getMyName());
System.out.println(person2.getMyName());
}
}5-b)
// A.java
package academy.pocu.comp2500;
public class A {
private static int x;
public A(int x) {
this.x = x;
}
public int getX() {
return this.x;
}
public static void darkMagic(int increment) {
this.x += increment;
}
}
// Program.java
package academy.pocu.comp2500;
public class Program {
public static void main(String[] args) {
A a1 = new A(3);
A a2 = new A(6);
A.darkMagic(4);
System.out.println(a1.getX());
System.out.println(a2.getX());
}
}5-c)
// Foo.java
package academy.pocu.comp2500;
public class Foo {
private static int count;
private int x;
public Foo(int x) {
this.x = x;
increaseCount();
}
public static void increaseCount() {
++count;
}
public static int getCount() {
return count;
}
public int getX() {
return this.x;
}
public void setX(int x) {
this.x = x;
increaseCount();
}
}
// Program.java
package academy.pocu.comp2500;
public class Program {
public static void main(String[] args) {
Foo foo = new Foo(7);
foo.setX(8);
int x = foo.getX();
foo.increaseCount();
System.out.println(foo.getCount());
}
}6
다음 코드를 실행하면 무엇이 출력되나요?
// Foo.java
package academy.pocu.comp2500;
public class Foo {
public int m;
}
// Program.java
package academy.pocu.comp2500;
public class Program {
public static void main(String[] args) {
Foo foo1 = new Foo();
Foo foo2 = new Foo();
foo1.m = 20;
foo2.m = 10;
doSomething(foo1, foo2);
System.out.println(foo1.m);
System.out.println(foo2.m);
}
private static void doSomething(Foo foo1, Foo foo2) {
foo1.m = foo2.m;
foo2.m = foo1.m;
}
}7
다음 코드를 실행하면 무엇이 출력되나요?
// Bar.java
package academy.pocu.comp2500;
public class Bar {
private int x;
public Bar() {
this.x = 5;
}
public Bar(int x) {
this.x = x;
}
public static Bar getInstance() {
return new Bar();
}
public void doSomething() {
this.x += 5;
}
public int getX() {
return this.x;
}
}
// Program.java
package academy.pocu.comp2500;
public class Program {
public static void main(String[] args) {
Bar bar1 = Bar.getInstance();
Bar bar2 = Bar.getInstance();
bar2.doSomething();
System.out.println(bar1.getX());
}
}8
다음과 같은 클래스가 있습니다.
// Animal.java
package academy.pocu.comp2500;
public class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
public void sayName() {
System.out.println("Animal " + this.name);
}
}
// Cat.java
package academy.pocu.comp2500;
public class Cat extends Animal {
public Cat(String name) {
super(name);
}
public void sayCatName() {
System.out.println("Cat " + this.name);
}
public void introduce() {
System.out.println("Hi! I'm a cat!");
}
}
// Dog.java
package academy.pocu.comp2500;
public class Dog extends Animal {
public Dog(String name) {
super(name);
}
public void sayDogName() {
System.out.println("Dog " + this.name);
}
public void introduce() {
System.out.println("Hi! I'm a dog!");
}
}아래에 있는 각 코드를 읽고 다음 질문에 답하세요. a) 이 코드에 오류가 있나요? 경우에 따라 아래처럼 답안지에 써주세요
- 컴파일 오류가 있다면: ‘컴파일 오류’
- 실행 중 오류가 있다면: ‘런타임 오류’
- 아무 문제 없다면: ‘문제 없음’
b) a)에서 오류가 있었다고 답했으면 그 문제를 어떻게 고칠지 설명하세요. 설명은 문장으로 하셔도 되고 코드를 직접 수정하셔도 됩니다. 코드를 직접 수정하실 경우 아래 형식을 따라주세요.
예: 전) a = p; 후) a = p + 11;
c) a)에서 ‘문제 없음’이라고 답했으면 코드 실행 후 출력되는 결과를 적으세요.
8-a)
Dog dog0 = new Dog("Kevin");
dog0.sayName();
dog0.introduce();8-b)
Animal cat0 = new Cat("Honey");
cat0.sayName();
cat0.introduce();8-c)
Cat cat1 = new Cat("Chocolate");
Animal animal0 = cat1;
Dog dog1 = (Dog) animal0;
dog1.introduce();8-d)
Animal animal = new Dog("Rocky");
Cat cat = (Cat) animal;
cat.sayCatName();9
다음 프로그램의 출력 결과는 무엇인가요?
// Vector.java
package academy.pocu.comp2500;
public class Vector {
private int x;
private int y;
public Vector(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return this.x;
}
public int getY() {
return this.y;
}
}
// Program.java
package academy.pocu.comp2500;
public class Program {
public static void main(String[] args) {
Vector vector0 = new Vector(1, 2);
Vector vector1 = new Vector(1, 2);
magic(vector0, vector1);
boolean isEqual = vector0 == vector1;
System.out.println(isEqual);
}
private static void magic(Vector vector0, Vector vector1) {
vector0 = new Vector(4, 5);
vector1 = vector0;
}
}10
a) 이 코드에 오류가 있나요? 경우에 따라 아래처럼 답안지에 써주세요
- 컴파일 오류가 있다면: ‘컴파일 오류’
- 실행 중 오류가 있다면: ‘런타임 오류’
- 아무 문제 없다면: ‘문제 없음’
b) a)에서 오류가 있었다고 답했으면 그 문제를 어떻게 고칠지 설명하세요. 설명은 문장으로 하셔도 되고 코드를 직접 수정하셔도 됩니다. 코드를 직접 수정하실 경우 아래 형식을 따라주세요.
예: 전) a = p; 후) a = p + 11;
c) a)에서 ‘문제 없음’이라고 답했으면 코드 실행 후 출력되는 결과를 적으세요.
// Shape.java
package academy.pocu.comp2500;
public class Shape {
private String name;
public Shape(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
// Point.java
package academy.pocu.comp2500;
public class Point {
private int x;
private int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return this.x;
}
public int getY() {
return this.y;
}
}
// Rectangle.java
package academy.pocu.comp2500;
public class Rectangle extends Shape {
private Point p1;
private Point p2;
public Rectangle(String name, Point p1, Point p2) {
this.p1 = p1;
this.p2 = p2;
}
public Point getP1() {
return this.p1;
}
public void setP1(Point p1) {
this.p1 = p1;
}
public Point getP2() {
return this.p2;
}
public void setP2(Point p2) {
this.p2 = p2;
}
public int getArea() {
return Math.abs(this.p1.x - this.p2.x) * Math.abs(this.p1.y - this.p2.y);
}
}
// Program.java
package academy.pocu.comp2500;
public class Program {
public static void main(String[] args) {
Point p1 = new Point(1, 5);
Point p2 = new Point(-2, 1);
Shape shape = new Rectangle("rect1", p1, p2);
System.out.println(((Rectangle) shape).getArea());
}
}11
다음 프로그램의 출력 결과는 무엇인가요?
// Foo.java
package academy.pocu.comp2500;
public class Foo extends Qux {
public Foo() {
super();
System.out.println("Foo");
}
}
// Bar.java
package academy.pocu.comp2500;
public class Bar extends Baz {
public Bar() {
super();
System.out.println("Bar");
}
}
// Baz.java
package academy.pocu.comp2500;
public class Baz extends Foo {
public Baz() {
super();
System.out.println("Baz");
}
}
// Qux.java
package academy.pocu.comp2500;
public class Qux {
public Qux() {
System.out.println("Qux");
}
}
// Program.java
package academy.pocu.comp2500;
public class Program {
public static void main(String[] args) {
Qux qux = new Bar();
}
}12
a) 이 코드에 오류가 있나요? 경우에 따라 아래처럼 답안지에 써주세요
- 컴파일 오류가 있다면: ‘컴파일 오류’
- 실행 중 오류가 있다면: ‘런타임 오류’
- 아무 문제 없다면: ‘문제 없음’
b) a)에서 오류가 있었다고 답했으면 그 문제를 어떻게 고칠지 설명하세요. 설명은 문장으로 하셔도 되고 코드를 직접 수정하셔도 됩니다. 코드를 직접 수정하실 경우 아래 형식을 따라주세요.
예: 전) a = p; 후) a = p + 11;
c) a)에서 ‘문제 없음’이라고 답했으면 코드 실행 후 출력되는 결과를 적으세요.
// A.java
package academy.pocu.comp2500;
public class A {
private int z;
public A(int z) {
this.z = z;
}
public class B {
private int x;
public B(int x) {
this.x = x;
}
private void doMagic() {
z++;
}
}
public void doMagic(int x, int y) {
B b = new B(x + y);
b.x += 2;
this.z *= b.x;
b.doMagic();
System.out.println(b.x);
System.out.println(this.z);
}
}
// Program.java
package academy.pocu.comp2500;
public class Program {
public static void main(String[] args) {
A a = new A(4);
a.doMagic(2, 1);
}
}