본문 바로가기
  • 문과생의 백엔드 개발자 성장기
|Developer_Study/정보처리기사

[정보처리기사] JAVA 1 (기본구성 및 특징)

by 케리's 2023. 3. 13.

01. JAVA

1. 자바의 기본구성

1) 클래스 (Class)

  • 객체가 가지고 있는 속성과 연산의 구조를 정의한다.
  • 속성은 멤버변수, 연산은 메서드로 정의한다.

2) 멤버변수 (Member Variable)

  • 객체의 속성을 정의 한다.
  • 해당 객체가 가지고 있는 고유한 값이다.

3) 메서드 (Method)

  • 특정 작업을 수행하기 위한 명령문의 집합 (함수)
  • 멤버변수의 값이나, 상태를 변경할 수 있는 명령의 집합

4) 접근지정자

  • 클래스의 멤버변수와 메서드를 외부에서 접근할 수 있는 범위를 지정한다.

5) 인스턴스 (Instance)

  • 클래스를 통해서 실제로 구현된 구체적인 실체
  • 실제로 메모리에 할당된 상태

 

 

2. 객체지향 특징

1) 생성자

  • 인스턴스가 만들어질때, 초기값 등을 지정하는 역할을 한다.
  • 자바에서는 생성자는 해당 클래스의 이름과 같아야 한다.
  • 생성자는 인자를 다르게 하여 여러개를 가질 수 있다.

 

2) 예외처리 (Exception Handling)

  • 프로그램 실행중에 발생하는 예외를 처리해주는 방법
  • 예외 상황이 발생했을떄 프로그램이 자연스럽게 종료될 수 있도록 처리한다.

 

3) 상속 (Inheritance)

  • 부모클래스의 멤버를 자식클래스에서 그대로  쓸수있다.
  • 클래스를 재사용할 수 있기 때문에 효율적이고 개발기간을 단축시킨다.
  • 부모의 private 한 멤버는 상속받을 수 없다.
  • extends 라는 키워드를 사용한다.
class Parent { 
	String name; 
	int age;

	public void set_name(String param_n){
        name = param_n;
    }

	public void set_age(int param_i){
		age = param_i;
	}
}

class Child extends Parent{ 
	int height;
	public void set_height(int param_h){ 
		height = param_h;
	}
}

public static void main(String[] args){ 
	
    Child c = new Child(); 
    c.set_name("홍길동"); 
    c.set_age(40);
    c.set_height(170);
    System.out.print(c.name); // 홍길동
    System.out.print(c.age); // 40
    System.out.print(c.height); // 170
}

 

4) 메서드 오버라이딩 (Method Overriding) - 상속관계에서만 존재, 난 아버지처럼 살기 싫어

  • 상속관계에서 부모클래스에서 정의된 메서드를 다시 재정의한다.
  • 추상클래스나 인터페이스를 상속받을 때 사용되는 개념
  • 부모 메서드의 이름, 리턴타입, 매개변수의 개수와 유형이 완전히 동일해야한다.
class Parent {
    public void set_name(String param_n){ 
        System.out.println("부모 이름 변경");
    }
    public void set_age(int param_i){ 
        System.out.println("부모 나이 변경");
    }
}

class Child extends Parent{
    public void set_name(String param_n){ 
        System.out.println("자식 이름 변경");
    }
    public void set_height(int param_h){ 
    	System.out.println("자식 키 변경");
    }
}

public static void main(String[] args){ 
    Child c = new Child(0);
    c.set_name("홍길동"); // 자식 이름 변경
    c.set_age(40); // 부모 나이 변경
    c.set_height(170); // 자식 키 변경
}

 

4) 메서드 오버로딩 (Method Overloading)

  • 같은 이름의 메서드를 인자만 다르게 하여 중복 정의하는 것
  • 메서드 이름이 같아야하고 인자의 개수나 타입이 달라야한다. 
class Person { 
    String name;
    int age;
    int height
    
	public void set_data(String p_name){ //(1)
		name = p_name;
	}

	public void set_data(String p_name, int p_age){ //(2)
        name = p_name;
        age = p_age;
	}


    public static void main(String[] args){ 
        Person p1 = new Person(); 
        p1.set_data("25"); // (1) 호출

        Person p2 = new Person(); 
        p2.set_data("2", 0); // (2) 호출
	}

}

 

3. 추상클래스와 인터페이스

1) 추상클래스 (abstract class) - 리모콘의 전원

  • 반드시 오버라이딩 해서 사용할 미완성의 메서드를 하나이상 가진 미완성 클래스 
    • new()해서 사용할 수 없다.
  • 추상클래스를 상속받은 자식클래스에서 추상메서드를 구현해서 사용한다.
  • 추상클래스는 객체를 생성 할 수가 없다.
abstract class Remote{ 
    public int volume = 10; 
    public int channel = 1; 
    
    public void volume_up(){ 
        this.volume++;
    }

    abstract void channel_change(int i); //원형만 만들어 둠
}

class TV_Remote extends Remote{

    void channel_change(int i){ //상속 받은 후 구현
        channel = i;
    }
}


public static void main(String[] args){ 
    TV_Remote tv = new TV_Remote(); 
    tv.volume_up(); 
    tv.volume_up();
    System.out.println("볼륨 : " + tv.volume); // 볼륨 : 12
    
    tv.channel_change(5); // 구현을 했으니 사용 가능 
    System.out.println("채널 : " + tv.channel); // 채널 : 5

}

 

2) 인터페이스 (interface) - 구현을 해야함

추상클래스의 극단으로, 모든 메서드가 추상적인 형태이다. (아무것도 구현하면 안됨)

interface Remote{

	public void volume_up(); // {} 없음, 구현 할 수 없기 때문에
	public void channel_change(int i);

}

class TV_Remote implements Remote{

	public int volume = 10;
	public int channel = 1;

	public void channel_change(int i) {
		this.channel = i;
}

public void volume_up(){
	this.volume++;
}

public static void main(String[] args) {
	TV_Remote tv = new TV_Remote();
	tv.volume_up();
	tv.volume_up();
	System.out.println("볼륨 :"+ tv.volume); // 볼륨 : 12
	tv.channel_change(5);
	System.out.println("채널 : " + tv.channel); // 채널 : 5

 

댓글