안녕하세요
오늘은 자바의 추상클래스(abstract) 와 인터페이스(Interface) 간단하게 알아봐요
여러분들 제가 제일 좋아하는 언어는 자바인데요
그 중 인터페이스와 추상클래스에 헷갈리는 개념이 많아 정리해 보고자 글 남겨봅니다
제 블로그는 수익 창출을 하고 있지 않습니다
제가 공부하면서 편하게 보고 정리하려고 만든 블로그이니 부족한 점이 많습니다
궁금한점이나 코드에 오류 발견하시면 댓글 남겨주세요~ 언제나 환영입니다
1. 추상클래스(abstract class)
- 하나 이상의 추상 메서드 포함하는 클래스
- 즉 완성된 메서드, 미완성된 메서드 모두 가질 수 있음 <-> 인터페이스는 모든 메서드가 추상메서드로만 이루어져 있어야 함
- 여기서 완성된 메서드는 메서드 옆에 { } 중괄호가 있는것. => 구현된 것으로 본다
- 인스턴트를 생성할 수 없다. 생성자 생성 할 때 New 키워드 쓸 수 없다는 것임
- 추상 클래스를 상속 받은 클래스는 미완성된 추상 메서드를 오버라이딩 해야 객체를 생성할 수 있다.
- 추상메서드는 오버라이딩을 전제로 하기 때문에 private 으로 선언할 수 없다.
abstract class Animal {
abstract void makeSound(); // 중괄호 없이 세미로콜론으로 끝나야 함
void breathe() {
System.out.println("Breathe in, breathe out.");
}
}
class Dog extends Animal {
void makeSound() {
System.out.printIn("Bark");
}
}
위 코드 기반으로 메인 에서 Animal a = new Animal(); 생성할 수 없다
구현이 안 된 미완성 클래스이기 때문이다
Animal a = new Dog();
해당 코드는 정상 작동한다. 왜냐하면 Dog 클래스가
Animal 상속받아서 구현 했기 때문
2. 인터페이스(Interface)
- 모든 메서드가 구현되지 않은 추상클래스의 극단
- 클래스가 사용하는 멤버 변수와 메서드의 원형 틀만 제공
- class 키워드 대신 Interface 키워드 사용
- 인터페이스의 상속은 extends 가 아닌 implements 사용
- 인터페이스는 객체를 생성할 수 없다
- 인터페이스를 상속 받으면 모든 메서드를 구현해야 한다. <<<
01. 다음 자바 프로그램이 오류 없이 실행되기 위해 밑줄 친 부분에 필요한 프로그램 코드는?
abstract class Test {
int data = 100;
public abstract void printData();
}
class Inner {
Test test = new Test() {
public void printData() {
System.out.println(data);
}
}
public class Main {
public static void main(String[] args) {
Inner inner = new Inner();
___________printData();
}
}
정답 Inner.test
Inner class 가 가지고 있는 객체 test에 접근
04. 다음 추상클래스를 정의할 때 문법 오류가 발생하는 부분을 모두 고르시오.
abstract class Person {
private int age; // 1
public String name // 2
abstract public void setAge(int age); // 3
abstract public void setName(String name){}; // 4
private int getAge() { // 5
return this.age;
}
abstract private String getName(); // 6
}
4 : 중괄호가 있으면 구현된 것으로 봄. 추상메서드는 중괄호 없는 메서드 원형만 쓰고 ; 으로 끝나야 함
6 : 추상메서드에는 private 키워드 쓸 수 없다. 왜? 하위 클래스에서 상속받아서 구현해야 하기 때문에 단
private 한 멤버변수나 일반 메서드는 사용 가능하다.
05. 다음 Java 프로그램의 실행 결과를 쓰시오
Interface A {
int a = 2;
}
class B implements A {
int b;
B(int i) { b = i * a }
int getb() { return b; }
}
class Test {
public static void main(String args[]) {
int a = 3;
B b1 = new B(1);
System.out.println( b1.getb() );
}
}
정답 : 2
간단한데 헷갈림
변수 이름이 같은 경우 main 영역의 지역변수와 인터페이스 안의 변수 중 어떤 값을 참조해야 하는지의 문제
a = 3 (main 영역의 지역변수)
인스턴트 b1 이 가진 변수 a = 2, b = 1*2
왜 3이 아니고 2인가? 클래스 B가 인터페이스 A를 상속받아서 구현하여 인스턴스 b1을 생성했기 때문에 b1 이 가지고 있는
a 값을 써야 함.
07. 다음 인터페이스를 정의할 때, 문법 오류가 발생하는 부분을 모두 고르시오.
interface InterfaceA {
int val1 = 0; // 1
private int val2 = 0; // 2
public void up(); // 3
public void down(); // 4
private void left(); // 5
public void right(){}; // 6
1 : 변수 선언 가능
2 : private keyword 안됨
3 : 메서드 원형 가능
4 : 메서드 원형 가능
5 : private keyword 안됨
6 : 중괄호 쓰면 안됨. - 구현된 걸로 본다
08. 다음 자바 코드는 컴파일 오류가 발생한다. 원인에 대해 약술하시오
interface InterfaceA {
public void up();
public void down();
public void left();
}
class AB implements InterfaceA {
int value = 0;
public void up() {
value++;
}
public void down() {
value--;
}
public static void main(String[] args) {
AB ab = new AB();
ab.up();
ab.down();
}
}
정답 : AB 클래스에서 left 메서드를 구현하지 않았기 때문
인터페이스를 상속받으면 모든 메서드를 구현해야 한다
'정보처리기사' 카테고리의 다른 글
[Java] 정보처리기사 자바의 상속 & 생성자 (3) | 2024.10.23 |
---|---|
[Java] 자바의 예외처리 키워드, 예시, 종류 정리 (1) | 2024.10.18 |
[Python] 파이썬 학습노트3 - 문제풀이, 슬라이싱, lambda(람다) (3) | 2024.10.16 |
[Python] 파이썬 학습노트2 -자료구조(리스트, 튜플, 셋, 딕셔너리) (3) | 2024.10.16 |
[Python] 파이썬 학습노트 1 - 기본 문법 & 문자열 관련 메서드 (2) | 2024.10.15 |
안녕하세요
오늘은 자바의 추상클래스(abstract) 와 인터페이스(Interface) 간단하게 알아봐요
여러분들 제가 제일 좋아하는 언어는 자바인데요
그 중 인터페이스와 추상클래스에 헷갈리는 개념이 많아 정리해 보고자 글 남겨봅니다
제 블로그는 수익 창출을 하고 있지 않습니다
제가 공부하면서 편하게 보고 정리하려고 만든 블로그이니 부족한 점이 많습니다
궁금한점이나 코드에 오류 발견하시면 댓글 남겨주세요~ 언제나 환영입니다
1. 추상클래스(abstract class)
- 하나 이상의 추상 메서드 포함하는 클래스
- 즉 완성된 메서드, 미완성된 메서드 모두 가질 수 있음 <-> 인터페이스는 모든 메서드가 추상메서드로만 이루어져 있어야 함
- 여기서 완성된 메서드는 메서드 옆에 { } 중괄호가 있는것. => 구현된 것으로 본다
- 인스턴트를 생성할 수 없다. 생성자 생성 할 때 New 키워드 쓸 수 없다는 것임
- 추상 클래스를 상속 받은 클래스는 미완성된 추상 메서드를 오버라이딩 해야 객체를 생성할 수 있다.
- 추상메서드는 오버라이딩을 전제로 하기 때문에 private 으로 선언할 수 없다.
abstract class Animal { abstract void makeSound(); // 중괄호 없이 세미로콜론으로 끝나야 함 void breathe() { System.out.println("Breathe in, breathe out."); } } class Dog extends Animal { void makeSound() { System.out.printIn("Bark"); } }
위 코드 기반으로 메인 에서 Animal a = new Animal(); 생성할 수 없다
구현이 안 된 미완성 클래스이기 때문이다
Animal a = new Dog();
해당 코드는 정상 작동한다. 왜냐하면 Dog 클래스가
Animal 상속받아서 구현 했기 때문
2. 인터페이스(Interface)
- 모든 메서드가 구현되지 않은 추상클래스의 극단
- 클래스가 사용하는 멤버 변수와 메서드의 원형 틀만 제공
- class 키워드 대신 Interface 키워드 사용
- 인터페이스의 상속은 extends 가 아닌 implements 사용
- 인터페이스는 객체를 생성할 수 없다
- 인터페이스를 상속 받으면 모든 메서드를 구현해야 한다. <<<
01. 다음 자바 프로그램이 오류 없이 실행되기 위해 밑줄 친 부분에 필요한 프로그램 코드는?
abstract class Test { int data = 100; public abstract void printData(); } class Inner { Test test = new Test() { public void printData() { System.out.println(data); } } public class Main { public static void main(String[] args) { Inner inner = new Inner(); ___________printData(); } }
정답 Inner.test
Inner class 가 가지고 있는 객체 test에 접근
04. 다음 추상클래스를 정의할 때 문법 오류가 발생하는 부분을 모두 고르시오.
abstract class Person { private int age; // 1 public String name // 2 abstract public void setAge(int age); // 3 abstract public void setName(String name){}; // 4 private int getAge() { // 5 return this.age; } abstract private String getName(); // 6 }
4 : 중괄호가 있으면 구현된 것으로 봄. 추상메서드는 중괄호 없는 메서드 원형만 쓰고 ; 으로 끝나야 함
6 : 추상메서드에는 private 키워드 쓸 수 없다. 왜? 하위 클래스에서 상속받아서 구현해야 하기 때문에 단
private 한 멤버변수나 일반 메서드는 사용 가능하다.
05. 다음 Java 프로그램의 실행 결과를 쓰시오
Interface A { int a = 2; } class B implements A { int b; B(int i) { b = i * a } int getb() { return b; } } class Test { public static void main(String args[]) { int a = 3; B b1 = new B(1); System.out.println( b1.getb() ); } }
정답 : 2
간단한데 헷갈림
변수 이름이 같은 경우 main 영역의 지역변수와 인터페이스 안의 변수 중 어떤 값을 참조해야 하는지의 문제
a = 3 (main 영역의 지역변수)
인스턴트 b1 이 가진 변수 a = 2, b = 1*2
왜 3이 아니고 2인가? 클래스 B가 인터페이스 A를 상속받아서 구현하여 인스턴스 b1을 생성했기 때문에 b1 이 가지고 있는
a 값을 써야 함.
07. 다음 인터페이스를 정의할 때, 문법 오류가 발생하는 부분을 모두 고르시오.
interface InterfaceA { int val1 = 0; // 1 private int val2 = 0; // 2 public void up(); // 3 public void down(); // 4 private void left(); // 5 public void right(){}; // 6
1 : 변수 선언 가능
2 : private keyword 안됨
3 : 메서드 원형 가능
4 : 메서드 원형 가능
5 : private keyword 안됨
6 : 중괄호 쓰면 안됨. - 구현된 걸로 본다
08. 다음 자바 코드는 컴파일 오류가 발생한다. 원인에 대해 약술하시오
interface InterfaceA { public void up(); public void down(); public void left(); } class AB implements InterfaceA { int value = 0; public void up() { value++; } public void down() { value--; } public static void main(String[] args) { AB ab = new AB(); ab.up(); ab.down(); } }
정답 : AB 클래스에서 left 메서드를 구현하지 않았기 때문
인터페이스를 상속받으면 모든 메서드를 구현해야 한다
'정보처리기사' 카테고리의 다른 글
[Java] 정보처리기사 자바의 상속 & 생성자 (3) | 2024.10.23 |
---|---|
[Java] 자바의 예외처리 키워드, 예시, 종류 정리 (1) | 2024.10.18 |
[Python] 파이썬 학습노트3 - 문제풀이, 슬라이싱, lambda(람다) (3) | 2024.10.16 |
[Python] 파이썬 학습노트2 -자료구조(리스트, 튜플, 셋, 딕셔너리) (3) | 2024.10.16 |
[Python] 파이썬 학습노트 1 - 기본 문법 & 문자열 관련 메서드 (2) | 2024.10.15 |