|Developer_Study/정보처리기사
[정보처리기사] JAVA 1 (기본구성 및 특징)
케리's
2023. 3. 13. 12:25
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