'JAVA SE TEST'에 해당되는 글 1건

  1. 2012.04.07 JAVA SE TEST

1. 자바의 특징 중 "플랫폼이 독립적이다" 라는 것에 대해 설명하시오.

정답 :  한번 OS만 만들어 두면 어느 O/S에 관계 없이 다 실행되는 것.

이렇게 해줌으로써 다른 운영체제에서도 프로그램을 새로 컴파일 할 필요없이 실행할 수 있음.

* 자바의 특징

인터프리트 방식 :  사람들이 알아보기 쉬운 언어로 작성된 소스파일을 인터프리터가 한줄, 한줄 통역해 가면서 실행하는 방식

이 경우 실행할 때에도 소스파일이 필요하고 초기에 비쥬얼베이직에서 사용하였으며, 일반적으로 실행 속도면에서는 컴파일 방식보다 느린 단점이 있다.

* 자바가 이런 느린 실행 속도를 감안하고도 인터프리터 방식을 사용하는 이유?

그 이유는 플랫폼의 독립성 때문. 자바의 플랫폼 독립성이란, 한번 작성해서 컴파일 된 자바 클래스 파일은 운영체제(OS)가 무엇이든 수행할 수 있게 하자는 것입니다. 그렇다면 다른 운영체제에서도 프로그램을 새로 컴파일 할 필요가 없으니 좋아진다. 하지만 컴파일 시 기계어로 번역한다는 것은 특정한 운영체제만 알아 들을 수 있는 언어로 바꾼 다는 것입니다.

따라서, 플랫폼 독립성을 추구하는 자바의 경우, 컴파일 할 때 실행파일이 아니라 클래스파일을 생성하는데, 이 클래스 파일은 바이트코드라는 중간코드로 구성됩니다. 그리고 각 운영체제용 인터프리터가 이 바이트 코드를 해석하여 실제 프로그램이 수행되는 것입니다. 자바가 설치되어 있는 디렉토리에 있는 javac가 컴파일러, java가 인터프리터에 해당되며, 바이트 코드라는 가상의 기계어를 실행해 준다는 의미에서 java 인터프리터를 자바가상머신(JVM)이라고 부르기도 합니다.

 

- 컴파일이란 : 프로그램을 실행될 수 있는 중간 형태로 변환하는 과정이다. 우리가 보는 소스코드 형태로는 컴퓨터가 이 자바 프로그램을 실핼할 수 없기 때문에 컴파일러는 입력으로 자바 프로그램을 받아들이고 출력으로는 가상의 컴퓨터인 자바가상머신(JVM)에 적합한 명령어 세트를 돌려준다. 즉, 컴파일 과정을 마친 후에는 사용하는 컴퓨터가 어떤 종류 이든지 관계없이 자바가상머신에 적합한 명령어 세트 인 바이트 코드로 프로그램이 바뀌게 되는 것이다.

 

2. 객체와 클래스의 관계에 대해 적절한 예를 들어 설명하시오.

 

객체(Object)

객체는 속성(데이타)과 행위(함수)를 갖는 것을 말합니다. 객체지향형프로그램이란 이런한 객체를 만들수 있는 프로그램을 의미합니다.

프로그래밍이 아닌 실세계에서 동물은 모두 객체라고 할 수 있겠지요. 왜냐하면 동물은 속성(무게, 길이, 나이 등)이 있고 행위(숨쉰다, 달린다, 날아간다, 먹는다)가 있으니까요.

클래스(Class)

클래스는 그런 객체들을, 같은 속성과 행위를 가진 것으로 분류해 놓은 것을 말합니다.

동물에서 같은 속성과 행위를 가진 것으로 분류를 하면, 동물은 어류,조류,포유류로 나누어 질 수 있지요. 어류는 헤엄치고, 물속의 산소로 호흡합니다. 또 조류는 날아다니고, 알을 낳습니다. 포유류는 젖을 먹고 육지에서 걸어다니지요.

클래스는 좀더 상세하게 나누어 질 수 잇습니다. 예를 들어 포유류는 사람, 개, 고양이, 말 등등으로 나누어질 수 있습니다. 사람, 개, 고양이, 말은 모두 젖을 먹고 육지에서 걸어다니지만, 속성이나 행위가 다른 부분도 잇습니다. 사람은 말을 하고, 두발로 걷고, 팅도하고 등등..
따라서 클래스는 상위클래스와 하위클래스로 확장될 수 있습니다. 즉 동물(상위)과 포유류(하위), 포유류(상위)와 사람(하위)와 같이 말입니다.

인스턴스(Instance)

인스턴스는 클래스에 의해 생성되는 각각을 지칭합니다.
예를들어 사람이라는 클래스 안에는 홍길동, 성춘향, 임꺽정, 죠지 부시, 후세인 등의 인스턴스가 있습니다.

프로그램에서는 class라고 선언하고 만드는 부분이 클래스이고 new라고 해서 객체를 만들면 이 것이 인스턴스가 되지요. 인스턴스는 필요한 만큼 만들 수 있지요. 또한 각각의 인스턴스가 생겨날 때마다 컴퓨터 메모리를 차지하지요.

종종 객체(object)라는 용어는 클래스나 인스턴스와 혼용해서 사용하기도 합니다.

3. 객체지향 프로그래밍에 대해 간략히 설명하시오.

특징3가지

1.캡슐화 - 정보은닉

ex : 알약 -> 우리가 알약을 먹을 때 그 내부에 어떠한 내용물이 어떠한 효과를 가지고 있는지는 몰라도 먹고나면 나을 거라는 것만 알고 억는 것.

객체 지향프로그래밍에서도 객체 내부가 어떠한 방식으로 구현되어 있는지는 몰라도 어떤 메소드를 사용하면 어떤 결과를 얻을 것이다 라는 것만 알고 사용함으로써 원하는 결과를 얻는것. 즉, 구체적인 내용을 몰라도 원하는 결과를 얻을 수 있게 프로그래밍 하는 것.

정보은닉(데이터 은닉) : 객체 외부에서 데이터를 마음대로 접근하면 데이터에 손상을 입을 수 있기때문에 이를 막기 위해 데이터를 숨기는 것. 접근권한은 주고, 메소드를 이용해서 접근하게 함으로써 검증을 해준다.

 

2. 상속 : 객체지향의 가장 대표적인 특징으로 특정 객체의 성격을 다른 객체가 상속받아 사용할 수 있도록 하는 것이다.

클래스를 설계할 때 , 여러 개의 클래스에 공통적으로 필요한 성격들을 가장 기본적인 클래스에 정의해 두면 클래스를 설계할 때 중복되는 내용은 기술하지 않고, 기본적인 내용을 담은 클래스에서 상속받아 사용하는 것을 의미한다.

ex : 부모가 가지고 있는 내용을 자식이 사용할 수 있게 해준다.

3. 다형성 : 한가지로 여러 가지의 일을 한다는 뜻이다. 프로그램에서 하나의 형태로 여러가지 작업을 한다는 것이 바로 다형성이다. 같은 역할을 수행하는 과정임에도 들어오는 것의 형식이 달라도 처리할 수 있게 해준다.

대부분  부모 클래스 타입으로 자식의 타입을 받을 때 사용한다.

 

     4. 다음 코드의 실행 결과는 ?

 

class Account{

 intmoney=100;

 publicvoid test(int money){

  System.out.println(this.money+money);

}

}

publicclass TestVariable {

 publicstaticvoid main(String[] args) {    

  Account a=new Account();

  a.test(50);

}

}

 

답 : 150

 

5. 다음 코드의 실행 결과는?

 

publicclass Person{

 intmoney;

 intage=1;

String name;

Person(){}

Person(String name){

   this.name=name;

}  

Person(int money,int age){

   this.money=money;

   this.age=age;

}

}

class TestPerson{  

 publicstaticvoid main(String[] args){

  Person p=new Person();

  System.out.println("money:"+p.money+" age:"+p.age+" name:"

  +p.name);

  Person p1=new Person("보아");

  System.out.println("money:"+p1.money+" age:"+p1.age+" name:"

  +p1.name);

  Person p2=new Person(100,3);

  System.out.println("money:"+p2.money+" age:"+p2.age+" name:"

  +p2.name);

}

}

 

출력 결과

money: 0 age: 1 name: null

money: 0 age: 1 name: 보아

money: 100 age: 3 name: null

 

6. 다음 코드의 실행결과는 ?

 

class Person{

 private String name;

 public Person(String name) {

   super();

   this.name = name;

}

 public String getName() {

   returnname;

}

 publicvoid setName(String name) {

   this.name = name;

}  

}

publicclass TestRef {

 publicstaticvoid main(String[] args){

  Person p1=new Person("보아");

  Person p2=new Person("유이");

  p2=p1;

  System.out.println(p2.getName());

}

}

 

결과 : 보아

 

7. 다음 코드의 실행 결과는?              난이도 상  이니.. 좌절 금지..^^;;

classPerson{

 private String name;  

 public Person(String name) {    

   this.name = name;

}

 public String getName() {

   returnname;

}

 publicvoid setName(String name) {

   this.name = name;

}

}

class PersonService{

 publicvoid pass1(Person p){

  p.setName("미쓰에이");

}

 publicvoid pass2(Person p){

  p=newPerson("소녀시대");

}

}

publicclass Test {

 publicstaticvoid main(String[] args) {    

   Person p=newPerson("2NE1");

  PersonService service=new PersonService();

  service.pass1(p);

  System.out.println(p.getName());

  service.pass2(p);

  System.out.println(p.getName());

}

}

실행결과 : 미쓰에이

미쓰에이

 

8. Collection API key 값과 value 값으로저장되는것은?

1) Collection    2) Map        3)List         4)Set

 

정답 : 2

 

9.

class Test{

public static void pass(Player p){

   p.play();

  //지역변수 p의객체를캐스팅하여stop()를호출하시오

  //정답 : ((CDPlayer)p).stop)

 

 

 }

 public static void main(String[] args){

  Player p=new CDPlayer();

   pass(p);

 }

}

interface Player{

 public void play();

}  

class CDPlayer implements Player {

public void play (){

  System.out.println("CD를재생하다~");

}

public void stop(){

  System.out.println("CD를멈추다");

}

};

 

10.

다음을컴파일하고실행한결과는?.  

       public class Test8{    

       public static void main(String args[]){  

               try{    

                       myMethod(-1);    

                       System.out.println(" B ");    

               }catch(IOException ne){

                         System.out.println(" C ");

 

   }finally{    

                       System.out.println(" D");    

               }    

               System.out.println("E");    

       }

static void myMethod(int age) throws IOException{

  if(age<0){

 throw new IOException();

  }

  System.out.println(A);

       }

}

주관식) C,D,E

 

11.객체직렬화(Object Serialization)하여하나의 JVM에서다른 JVM으로객체를전송하기위해해당객체의클래스에필요한작업은무엇인가?    

 

 Runnable interface implements 하고 run 메서드를 override 한다.      

 Serializable interface implements 한다.      

 Serializable interface implements 하고 synchronized 메서드를 override한다.    

 Runnable interface implements 한다

 

정답 : 2

* interface Serializable

객체직렬화가 필요한 객체는 반드시 Serializable 인터페이스르 구현해야 한다.

그러나, Serializable 인터페이스는 객체가 직렬화가 제공되어야 함을 자바가상머신(JVM)에 알려주는 역할만을 하는 인터페이스다.

따라서, Serializable 인터페이스를 지정하였다고 해도, 구현할 메서드는 없다.

 

12. 다음코드의실행결과는?

class Test{

public static void main(String[] args){

  Animal a=new Person("산다라박");

  System.out.println(a.name);

}

}

class Animal{  

String name="제시카";

};

class Person extends Animal{

Person(String name){

super("나는 "+name);

}

};

1)나는산다라박2)나는제시카3)compile error 4)null

정답 : 1."나는 제시카"

 

13.상속(Inheritance)에대해간략히설명하시오(정의,장점,특징)

정의

class 클래스Name extends 부모class명{

}

장점 ;  재사용성이 용이해짐. 새로 만들지 않고 기존의 공통적인 내용을 부모에 담아두고 자식클래스에서 부모의 변수를 가져다가 쓰면됨. 

특징 : 자식 class에서 부모class의 인스턴스 변수를 접근하여 사용할 수 있음

14.

다음클래스에서 set/get 메서드를작성하시오

 

public class Car{

private String model;

//set,get method 작성

 

답 :

public void setModel(String model){

this.model = model;

}

public String getModel(){

return model;

} 

 

 

 

}

 

15. 자바 Keyword에 적절하게 설명하시오.(간단히 요점만)

abstract : 추상화, 객체를 추상적인 개념으로 만들어줌. 객체를 생성할 수는 없고, 사용하려면 메소드 오버로딩을 하여 사용하여야함. 공통적으로 사용할 것을 추상적으로 모아 두고 몸체 없는 메소드를 사용함.

 

static : 공통적인 변수를 관리할 수 있게 해줌 . 객체의 접근을 용이하게 해줌. 생성시점에 먼저 생성됨.

 

try: 예외가 날 가능성이 있는 코드를 넣음

 

catch: 예외가 나면 에러를 처리함

 

finally: 예외가 나든 안나든 한번은 꼭 수행해야할 코드를 넣음

 

throws: : 메소드에서 메소드 내용에 예외가 나는 것을 알려줌

 

throw : 예외가 날곳으로 예외를 던져줌

 

16. Interface를 사용하는 이유에 대해간략히설명하시오.

 

추상적인 개념으로 클래스를 만들어 두는 것은 abstract와 비슷하나 여러개의 부모를 상속 받을 때 사용한다.

 

 

17. 다음예제의배열요소를 for문을이용해출력하세요

public class Test{    

       public static void main(String args[]){  

 Person p[]=new Person[3];

  p[0]=new Person("보아");   // 변수명 name

  p[1]=new Person("유이");

  //for , getName()

 

정답 :

for(int i=0;i<p.size();i++){

system.out.prilntln(p[i].getName());

 

 

 

 

}

}

 

18. Thread를생성하는두가지방법에대해간략히설명하시오.

 

 1. class Athread extends Thread{}

Athread.start();

2. class Bthread implements Runable{}

Thread t1 = new Thread(Bthread );

t1.start();

 

19. 다음클래스를보고세가지클래스의객체가전달될수있도록적절한매개변수의타입을적으세요

class Animal{}

class Person extends Animal{}

class Dog extends Animal{}

 

class Zoo{

 void enter(______ k){

 

}

}

답 :  Animal

 

20. 다음 코드에서 사용된 프로그래밍 기법을 선택하세요.

 

class Animal{

void eat(){}

}

class Person extends Animal{

 void eat(){}

}

1) 생성자 오버라이딩 2) 메서드 오버라이딩 3) 메서드 오버로딩 4) 생성자 오버로딩

 

답 : 2.

 

21. 다음 코드의 실행 결과는?

 

String str=보아;

str.concat(“”);

StringBuffer sb=new StringBuffer(유이);

sb.append(“”);

System.out.println(str);     실행결과:보아

System.out.println(sb);     실행결과: 유이짱

 

22. 다음 코드 1, 2  출력값은?

class Test{    

       public static void main(String args[]){    

         HashSet set=new HashSet();

set.add("A");

set.add("B");

set.add("C");

set.add("A");

System.out.println(set.size()); // ---- 1

ArrayList list=new ArrayList();

list.add(A);

list.add(B);

list.add(A);

System.out.println(list.size()); // ---- 2

}

}

답 : 1. 3

         2. 3

 

23.

다음은 IO 관련된 메서드의 일부이다. 해당 c://iotest//b.txt 파일의 데이터가 존재할 때까지 출력하려 한다.

  관련 코드를 작성하시오. (예외처리는 편의상 생략) : FileReader BufferedReader

 

FileReader fr = new FileReader("c:\\lotest\\b.txt");

BufferedReader br = new BufferedReader(new InputStreamReader(fr));

String str = br.readLine();

while(str!=null){

System.out.println(str);

str = br.readLine();

}

 

24. 음은 static 에 대한 예제이다. 밑줄 친 부분에 적절한 내용을 적으시오.

class Person{

 public static void test(){}

}

public class StaticTest {

 public static void main(String[] args) {  

   _______ // Person의 test()를 호출!

정답 :  Person.test();

}

}

 

25. 다음 코드를 개선하기 위한 방안을 쓰시오

class Animal{

Animal(int age){}

}

class Person extends Animal{

 

}

정답 :  사람도 동물이기는 하기 때문에 Animal class에 동물이 갖는 공통점들을 구현하고 Person 객체에서는 Animal을 상속받아 사용하면 되겠다.

 

26.

다음 메서드를 구현하시오.

ArrayList list; // 멤버 변수

public Person findPerson(String tel) throws RecordNotFoundException{

Person person = new Person();

for(inti=0;i<list.size();i++){

if(tel.equals(list.getTel()){

person = list[i];

}

reuturn person;

}

 

27.다음은 접근 지정자를 무작위로 나열하였다. 접근범위가 좁은 순서에서 넓은 순서로 재배치하세요.

1) protected

2) private

3) default

4) public

( 2 )- ( 3 )- ( 1 )- ( 4 )

 

28.다음은 특정 클래스에 대한 설명이다.

   이 설명에 해당하는  클래스명을  명시하시오.

 

   _____ 클래스는 모든 자바 클래스의 최상위 클래스이다.

  프로그래머가 명시적으로 extends 하는 클래스가 없으면 자동으로 자바

  컴파일러가 ___ 클래스를 상속받도록 처리한다.

 

정답 : Object

 

29. 다음 코드의 실행 결과를 쓰세요.

 

class Car{
public int count1;

public static int count2;

public Car() {

 super();

 count1++;

 count2++;

}

public String toString(){

 return "count1:"+count1+" count2:"+count2;

}

}

public class AccessTest{

public static void main(String args[]){

  Car c1=new Car();

  Car c2=new Car();

  System.out.println(c1);

  System.out.println(c2);

}

}
 

 

출력 결과 :

count1: 1 count2: 2

count1: 1 count2: 2

 

30. 메인 메서드의 모든 요소에 대해 간략히 설명하세요.

 

public static void main(String[] args)의 의미란?

 - 메인 메서드는 진입점(Entry Point)을 뜻한다.
 - 그러므로 메인 메서드의 접근자는 항상 public 이어야 한다.

 - 그리고 메인 메서드는 항상 정적이어야 한다. 
 - 클래스는 메모리에 로딩된 다음에 사용이 가능하다.
 - static이 붙은 클래스나 메서드, 변수는 컴파일시 자동으로 로딩된다.
 - 메인 메서드는 클래스 로딩 없이 호출할 수 있어야 한다.
 - 그렇기때문에 static을 사용한다.

 - void는 리턴타입이 없다는 뜻이다.
 - 메인 메서드는 Entry Point이면서 프로그램의 끝이기도 하다.
 - 메인으로 시작해서 메인이 끝나면 그 프로그램도 끝이다.
 - 그러므로 리턴하는 값 자체가 불필요하다.
 - 프로그램이 끝났는데 마지막에 어떤 값을 리턴해봤자 아무 의미가 없기 때문이다.

 - String[] args 는 프로그램 실행시 매개변수를 보내서 실행할 수 있다는 것을 뜻한다.
 - 1개를 사용할수도 있고 여러개를 사용할 수도 있기 때문에 배열을 사용한다.

 - public과 static은 순서가 바뀌어도 상관없다.
 - 하지만 void는 리턴타입이므로 반드시 메서드 명 앞에 와야 한다.

 public static void main(String[] args){}
 static public void main(String args[]){}

31. Encapsulation 에 대해 설명하세요.

 

객체의 자료와 행위를 하나로 묶고, 실제 구현 내용을 외부에 감추는 것. 캡슐화된 객체의 행위는 외부에서 볼 때는 실제가 아닌 추상적인 것이 되므로 정보 은닉(information hiding) 개념이 지켜진다. 정보 은닉을 통해 다른 객체로부터 접근할 수 있는 것은 메시지 전달을 통해 간접적으로 자료에 접근하지만, 객체 자료에는 직접적으로 접근할 수 없다. 객체지향의 개념. 데이터와 이 데이터를 다루는 방법(method)을 통합한 것으로 정보 은폐의 장점을 가질 수 있다.

Posted by 조은성
,