Hueestory

java 이론 / 기출오답 본문

challenge/정보처리기사 실기

java 이론 / 기출오답

히명 2024. 10. 2. 14:16

정처기 실기 java 파트를 위한 야매 개념 정리

 

객체 : 속성(변수)과 행위(메소드)를 가진 실체

클래스 : 객체를 정의하는

메소드 : 클래스 내부에 존재하는 영역

인스턴스화 : 클래스로부터 객체를 선언하는 것

인스턴스 : 선언된 해당 클래스 타입의 객체

 

 

접근 제어자 : public, private, protected ...

정적 메소드 : static 또는 X

// 클래스 블록
public class 클래스명{
	//메소드 블록
    public static void main(String[] args){
    	System.out.println("Hello World!");
    }
}

args = arguments (인수)

 

 

예약어 : 미리 의미가 정해진 단어

생성자 : 객체가 생성될 때 자동으로 호출되는 특수 목적의 메소드

class Person{
	public String name;
    public int age;
    public String job;
    
    public String getName(){
    return name;
    }
}

public class Test{
	public static void main(String[] args){
    	Person man1 = new Person();
        Person woman1 = new Person();
        
        man1.name = "김철수";
        System.out.println(man1.name);
        System.out.println(man1.getName());        
    }
}

new : 새로운 객체 생성을 선언하는 예약어

Person() : 생성자

 

 

class Num{
    public int a = 1;
    static public int b = 2;
}

public class Test{
	public static void main(String[] args){
    	Num x = new Num();
        Num y = new Num();
        
        y.a++;
        System.out.println(x.a); // 2
        y.b++;
        System.out.println(x.b); // 4
        x.a++;
        System.out.println(y.a); // 3
        x.b++;
        System.out.println(y.b); // 5
    }
}

a : 인스턴스 변수, 각 개체마다 별도로 존재

b : 클래스 변수, 모든 개체가 값을 공유

 

 

상속 : 공통된 요소들을 공유하기 위함

오버라이딩 : 상위 클래스 메소드를 하위 클래스에서 재정의 하는 것

class Car{
	public void speed(){
    	System.out.println("차는 보통 180km/h까지 속력을 낼 수 있습니다.");
    }
}

public class Supercar extends Car{
	public void speed(){
    	System.out.println("슈퍼카는 보통 250km/h까지 속력을 낼 수 있습니다.");
    }
    
    public static void main(String args[]){
    	Car car1 = new Car();
        car1.speed(); // Car의 speed()를 SuperCar의 speed()가 Overriding
    }    
}

출력 : 슈퍼카는 보통 250km/h까지 속력을 낼 수 있습니다.

 

 

class Car{
	public void speed(){
    	System.out.println("차는 보통 180km/h까지 속력을 낼 수 있습니다.");
    }
}

public class Supercar extends Car{
	public void speed(){
    	System.out.println("슈퍼카는 보통 250km/h까지 속력을 낼 수 있습니다.");
    }
    
    public static void main(String args[]){
    	Car car1 = new Supercar();
        car1.speed();
    }    
}

출력 : 슈퍼카는 보통 250km/h까지 속력을 낼 수 있습니다.

*부모 클래스는 항상 자식 클래스에서 자신의 메소드를 재정의 했는지 확인하기 때문에 출력은 같다

 

 

추상 메소드 : 구현부가 없고, 하위 클래스에서 반드시 오버라이딩 되는 메소드

class Car{
	public void speed();
}

public class Supercar extends Car{
	public void speed(){
    	System.out.println("슈퍼카는 보통 250km/h까지 속력을 낼 수 있습니다.");
    }
    
    public static void main(String args[]){
    	Car car1 = new Supercar();
        car1.speed();
    }    
}

출력 : 슈퍼카는 보통 250km/h까지 속력을 낼 수 있습니다.


기출

 

2020년 3회 15번 / 2023년 1회 18번 [출력 결과]

abstract class Vehicle{
	String name;
    abstract public String getName(String val);
    public String getName(){
    	return "Vehicle name:" + name;
    }
}
 
class Car extends Vehicle{
  private String name;
	public Car(String val){
    	name=super.name=val;
   }
public String getName(String val){
	return "Car name : " + val;
   }
public String getName(byte val[]){
	return "Car name : " + val;
   }
}
 
public class Main {
	public static void main(String[] args){
    Vehicle obj = new Car("Spark");
    System.out.print(obj.getName());
    }
}

출력 : Vehicle Name : Spark

풀이 : Car에서 오버라이딩한 getName 메소드와 파라미터가 다르므로 Vehicle의 getName() 사용

 

 

2021년 3회 1번 [출력 결과]

class Connection{
	private static Connection _inst = null;
	private int count = 0;
 	public static Connection get(){
  	if(_inst == null){
  		_inst = new Connection();
  		return _inst; 
  	}
	return _inst;
	}
	public void count(){
		count ++;
	}
	public int getCount(){
	  	return count;
    }
}
 
public class Main{
	public static void main(String[] args){
	    Connection conn1 = Connection.get();
	    conn1.count();
	    Connection conn2 = Connection.get();
	    conn2.count();
	    Connection conn3 = Connection.get();
	    conn3.count();
    
    	System.out.print(conn1.getCount());
	}
}

출력 : 3

풀이 : conn1, conn2, conn3 모두 동일한 인스턴스를 참조하므로 최종적으로 증가된 count 값인 3을 출력

 

 

2021년 3회 11번 [출력 결과]

public class Main{
	public static void main(String[] args){
  		int a = 3, b = 4, c = 3, d = 5;
  		if((a == 2 | a == c) & !(c > d) & (1 == b ^ c != d)){
   			a = b + c;
	    	if(7 == b ^ c != a){
				System.out.println(a);
	    	}
	    	else{
	    		System.out.println(b);
	    	}
	  	}
	    else{
	    	a = c + d;
	    	if(7 == c ^ d != a){
	    		System.out.println(a);
	    	}
	        else{
	    		System.out.println(d);
	    	}
	  	}
 	}
}

출력 : 7

풀이 : a == 2(F) | a == c(T) True !(c > d) True 1 == b(F) ^ c != d(T) True

→ a = b + c, a = 7

→ 7 == b(F) ^ c != a(T) True

→ System.out.println(a) 실행, 7 출력

^(XOR) : 값이 서로 다르면 True

 

 

2022년 1회 5번 [알맞은 답]

class Car implements Runnable{
	int a;
  
	public void run(){
		try{
			while(++a<100){
        		System.out.println("miles traveled :" +a);
        		Thread.sleep(100);
      		}
    	}
		catch(Exception E){}
        }
}
  
public class Main{
  	public static void main(String args[]){
    	Thread t1 = new Thread(new (가)());
    	t1.start();
  	}
}

정답 : Car

풀이 : Runnable 인터페이스는 run() 메소드를 오버라이딩한다

Thread의 생성자의 인자로 new Car()을 넘겨주면 해당 스레드를 시작할 때 Car 객체의 run() 메소드가 실행된다

 

 

2022년 2회 7번 [출력 결과]

class Main{
	public static void main(String args[]){ 
    	int i=3, k=1;
        switch(i){
    		case 1:k+=1;
        	case 2:k++;
    		case 3:k=0;
    		case 4:k+=3;
    		case 5:k-=10;
    		default : k--;
  		}
		System.out.print(k);
  	} 
}

출력 : -8

풀이 : break가 없기 때문에 3, 4, 5, default 모두 실행 후 k 출력

 

 

2023년 2회 14번 [출력 결과]

public class Main{
	public static void main(String[] args){
              String str1 = "Programming"; 
	      String str2 = "Programming";
	      String str3 = new String("Programming");
	      
	      System.out.println(str1==str2);
	      System.out.println(str1==str3);
	      System.out.println(str1.equals(str3));
	      System.out.print(str2.equals(str3));
	}
}

출력 : true false true true

풀이 : str1과 str2는 같은 리터럴 Programming을 참조하므로, 메모리 주소도 같다

하지만 str3은 new에 의해 생성된 문자열 객체로, 힙 메모리에 새 문자열 객체를 생성한다

따라서 str1과 str3은 서로 다른 메모리 주소를 가진다

 

 

2023 3회 12번 [오류가 발생하는 코드]

class Person{
	private String name;
	public Person(String val){
		name = val;
	}
	public static String get(){
		return name;
	}
	public void print(){
		System.out.println(name);
	}
}
public class Main{
	public static void main(String[] args){
		Person obj = new Person("Kim");
		obj.print();
	}
}

정답 : return name

풀이 : get() 메소드는 static으로 선언되었고 name은 Person 클래스의 인스턴스 변수이다

static 메소드는 인스턴스와 관련된 데이터에 대한 정보를 알 수 없기 때문에 name에 접근할 수 없다

'challenge > 정보처리기사 실기' 카테고리의 다른 글

2. 데이터 입 출력 구현  (0) 2024.10.18
9. 소프트웨어 개발 보안 구축  (0) 2024.10.18
11. 응용 SW 기초 기술 활용  (2) 2024.10.18
SQL 이론  (2) 2024.10.16
정처기 실기 핵심 개념 (코딩 제외)  (5) 2024.10.02
Comments