본문 바로가기
자바

자바 정처기 실기 대비

by BIGENGINEER 2025. 4. 7.

1) 문자열 연결

 

System.out.println("5+2 =" +(3+4))

System.out.println("5+2=" +3+4)

System.out.println(5+2+"=3+4")

 

5+2 = 7

5+2 = 34

7 = 3+4  =>  5+2 가 먼저 계산되고, 계산된 후 = 3+4와 연결되는 것임.

 

 

2) 문자열을 문자형으로 변환

- 문자열일 경우 charAt 메서드를 이용해서 해당 번지의 문자를 가지고 옴.

 

System.out.println(a.charAt(1));

-> 1번지 문자를 가져옴.

 

 

3) for-each문

for(String nm : name){

    System.out.println(nm)

}

 

- name 배열의 요소들을 nm으로 전달하여 출력함.

 

 

4) 업캐스팅과 다운캐스팅

[ 업캐스팅 ] : 하위 클래스 객체를 상위 클래스 타입으로 변환하는 과정이다. 

 

A가 부모 클래스, B가 자식 클래스라고 할 때

 

A a = new B(); 이면, 

 

!!!!!! 업캐스팅 관계에서 자식 클래스가 부모 클래스의 메서드를 오버라이딩 한 경우, 부모 클래스 타입으로 호출해도 자식 클래스의 메서드가 호출된다. 

 

!!!!!! 업캐스팅 관계에서 변수를 출력하는 경우라면 자식클래스의 변수에 접근할 수 없기 때문에 부모 클래스의 변수 값을 출력.

 

 

5) 추상 클래스

- 미구현 추상 메서드를 한 개 이상 가지며 자식 클래스에서 해당 추상 메서드를 반드시 구현하도록 강제하는 기능

abstract 추상 클래스명{
	abstract 자료형 메서드명();
}

class 자식 클래스명 extends 추상 클래스명{
	자료형 메서드명(){
    	명령어;
    }
}

 

 

 

6) 인터페이스

- 클래스가 구현해야 하는 메서드의 선언만을 포함하는 형태

interface 인터페이스 클래스명{
	 자료형 메서드명();
}

class 자식 클래스명 implements 인터페이스 클래스명{
	자료형 메서드명(){
    	//상속받은 메서드 내부 정의
    }
}

 

 

 

7) 제네릭

- 클래스나 메서드가 다양한 타입을 처리할 수 있도록 일반화하는 기능이다.

 

class A<T>{
	public void setA(T x){
    	this.x = x;
    }
    public T getA(){
    	return x;
    }
}

public class Soojebi {
	public static void main(String args[]){
    	A<String> a = new A<>();
        a.setA("Hello");
        System.out.println(a.getA());
        
        A<Integer> b = new A<>();
        b.setA(1000);
        System.out.println(b.getA());
    }
}

 

 

7.1) 제네릭 오버로딩 관계

- 제네릭 변수를 매개변수로 전달할 때 제네릭이나 object 타입으로 전달한다.

-> !!!!!!!!!!!!!!!!!!!! 제네릭은 오버로딩 관계일 때 제네릭이나 object 타입을 매개변수로 받는 메서드를 호출한다. 

 

 

8) 예외처리

- 프로그램 실행 중 발생할 수 있는 예외적인 상황에 대해 적절히 대처하기 위한 기법이다. 

 

1) ArrayIndexOutOfBoundsException

- 배열 범위를 벗어난 인덱스에 접근하려고 할 때 발생하는 예외

 

2) ArithmeticException

- 수학적인 연산 중 오류

 

3) NullPointException

- 객체가 null인 상태에서 메서드나 필드에 접근하려고 할 때 발생

 

4) NumberFormatException

- 문자열을 숫자 타입으로 변환하려 할 때 형식이 맞지 않으면 발생하는 예외

 

5) IndexOutOfBoundsException

- 유효하지 않은 인덱스 접근

 

try{
	//예외발생 가능성이 있는 코드
}
catch{
	//예외가 발생할 때 실행하는 코드
}
finally{
	//항상 실행되는 코드
}

 

 

9) throw , throws

- throw는 메소드 내부에서 직접 예외를 발생시킬 때 사용한다.

- throws는 메소드 선언부에 이 메서드가 예외를 던질 수 있음을 선언할 때 사용

 

class SooException extends Exception{
	public SooException(){
    	System.out.println("A");
    }
}

public class Soo{
	public static void fn throws SooException{
    	System.out.println("B");
        throw new SooException();
    }
    
    public static void main(String[] args){
    	try{
        	System.out.println("C");
		fn();
        	System.out.println("D");
        }
        catch(SooException e){
        	System.out.println("E");
        }
   }
}

 

- throw new SooException(); 에서 예외가 발생했으니 A를 출력하고 try 블록을 종료한다. 그래서 D는 출력되지 않고 

catch 문으로 넘어가서 E를 출력한다. 

 

 

 


[오답]

 

1. static

public class Soojebi{
	public static void main(String args[]){
    	System.out.print(Soojebi.check(1));
    }
    
    static String check(int num){
    	return (num >= 0) ? "positive" : "negative";
    }
}

 

- 일반적으로 인스턴스를 생성해서 접근해야 하지만, Soojebi 클래스의 인스턴스 없이 Soojebo.check와 같이 check 메서드를 호출하여면 check메서드는 static이어야 한다. 

 

 

 

2. 스레드

public class Car implements Runnable{
	public void run(){
    	//스레드 동작 시 수행할 코드
    }
}

public class Soojebi{
	public static void main(String[] args){
    	Thread t1 = new Thread(new Car());
        t1.start();
    }
}

 

- 스레드를 만들기 위해서는 인터페이스를 상속받고, 스레드를 생성하기 위해서 new 뒤에 인터페이스를 상속받은 스레드 클래스를 선언해준다.

- Thread t1 = new Thread(new 상속받은 스레드 클래스);

 

 

 

3) 부모- 자식 상속

public class Soojebi{
	public static void main(String[] args){
    	parent c = new Child();
        c.paint();
        c.draw();
    }
}
class Parent{
	public void paint(){
    	System.out.print("A");
        draw();
    }
}
class Child extends Parent{
	public void paint() {
    	super.draw();
        System.out.print("C");
        this.draw();
    }
    public void draw() {
    	System.out.print("D");
    }
}

 

- Child는 Parent를 상속받고, paint메서드는 오버라이딩 관계이므로 자식 클래스의 paint 메서드를 호출

- super.draw()로 부모의 draw 메서드를 호출하고 B 출력

- draw 메서드를 호출하는데 오버라이딩 관계이므로 자식 클래스의  draw 메서드 호출 -> D 출력

- C 출력

- this.draw는 자식 클래스의 draw이므로 D 출력

- c.draw도 마찬가지로 오버라이딩 관계이므로 자식 클래스의 draw 호출 -> D 출력

=> BDCDD

 

 

 

4) 생성자

...
class Child extends Parent{
	public Child(){
    	System.out.println("E");
    }
    
    public Child(int x){
    	this();
        System.out.println("F");
    }
...

 

- Child가 Parent를 상속받은 상태에서 Child 생성자에서 this()를 호출하면 생성자에 super()메서드가 없으므로 super()가 생략되었기 때문에 상위 클래스의 매개 변수가 없는 생성자를 호출한다.

- 그후 상위 클래스에서 작업이 끝나면 하위클래스에서 자신 클래스의 생성자 중 매개 변수가 없는 생성자를 호출한다.

 

즉, 하위 클래스의 생성자에서 this()를 호출하면 상위 클래스와 하위 클래스 모두 고려해주어야한다. 

  

'자바' 카테고리의 다른 글

코자개 - 정렬  (1) 2025.04.28
코자개 - Hash  (1) 2025.04.11
코자개1. [ ==와 equals() ]  (0) 2025.04.03
java 복습 3  (0) 2024.01.14
java 복습 2  (0) 2024.01.14