본문 바로가기

JAVA/개념

자바(JAVA) : 추상 클래스, 메소드, 인터페이스, final, 오브젝트

728x90
반응형

추상 클래스(Abstract Class)

//추상클래스 선언방법
abstract class 클래스이름{
}

추상 클래스는 클래스를 만들기 위한 일종의 설계도로 인스턴스를 생성할 수 없는 클래스이다. 이를 사용하기 위해서는 반드시 자식 클래스에서 상속을 받아 클래스를 모두 구현해야만 한다.

 

이런 추상클래스는 반드시 하나 이상의 추상 메서드를 포함하고 있으며, 생성자와 멤버변수, 일반메서드 모두를 가질 수 있다.

1) 자체 인스턴스 생성 불가능

2) 생성자와 멤버변수, 일반 메서드 모두를 가질 수 있다.

3) 하나 이상의 추상 메서드를 포함한다.

추상 메서드(Abstract Method)

abstract 리턴타입 메서드이름();

추상클래스는 메서드의 선언부만 작성하고 구현부는 미완성인 채로 남겨두는 메소드를 말한다. 추상클래스는 보통 주석을 통해 어떤 기능을 수행하는 지 알려주고, 구현부는 각각 상속받는 자식클래스마다 다르게 구현된다.

1) 메서드의 선언부만 작성하고, 구현부는 미완성이다.

2) 자식클래스는 반드시 추상메서드를 구현해야하며, 만약 구현하지 않을 경우 자식클래스도 추상클래스가 되어야 한다.

3) 추상 메서드의 접근 지정자에는 private를 사용할 수 없다.

(자식 클래스에서 받아 구현해야하므로...)

 

인터페이스(interface)

 

추상클래스하면 나오는 개념이 인터페이스이다. 인터페이스는 추상 클래스의 일종으로 추상클래스보다는 추상화 정도가 높아 일반 메서드나 멤버변수를 가질 수 없다. 오직 추상 메소드와 상수만을 멤버로 가질 수 있는 것이 인터페이스이다.

 

인터페이스의 모든 멤버 변수는 public static final이어야 하며, 이를 생략할 수도 있다. 또한 메소드 역시 모두 public abstract이어야 하며, 이를 생략 가능하다.

interface 인터페이스이름{...}
interface B{...}
interface C{...}
interface D{...}
class k{}

//인터페이스는 다중 상속이 가능
interface A extends B, C, D{
} 

//구현한다는 의미로 사용
class A extends K implements B, C{..}

이런 인터페이스는 같은 인터페이스끼리만 상속이 가능하며, 상속과는 다르게 다중 상속이 가능하다.

* 인터페이스를 이용한 다형성

 
public interface MyInterface{
    int value = 10;
    int calculate(int a);
}
​

public class CalA implements MyInterface{
     public int calculate(int a){
           return value+a;
     }
}
public class CalB implements MyInterface{
     public int calculate(int a){
           return value *a;
     }
}
//인터페이스 다형성 예제
MyInterface add = new CalA();
MyInterface multiply = new CalB();
int calVal = 20;

System.out.println(add.calculate(calVal));
System.out.println(multiply.calculate(calVal));

인터페이스 다형성에 대한 예제이다.

final 키워드

final 키워드는 엔티티를 한 번만 할당하겠다는 의미로 자바에서는 총 세가지 의미로 사용됩니다.

*final 변수

- final 변수는 우리가 흔히 아는 상수를 의미합니다. 생성자나 대입연산자를 통해 한번만 초기화 가능한 변수입니다.

* final 메소드

- final 메소드는 오버라이드하거나 숨길 수 없음을 의미합니다.

* final 클래스

- 해당 클래스를 상속할 수 없음을 의미합니다. 상속을 할 수 없기 때문에 상속 계층에서 마지막 클래라는 의미입니다.

Object 클래스

java.lang.Object 클래스는 모든 클래스의 최상위 클래스이다.

메소드
설명
boolean equals(Object obj)
두 객체가 같은 지 비교한다.(같으면 true, 틀리면 false)
String toString()
객체의 문자열을 반환한다.
protected Object clone()
객체를 복사한다.
protected void finalize()
가비지 컬렉션 직전에 객체의 리소스를 정리할때 호출한다.
Class getClass()
객체의 클레스형을 반환한다.
int hashCode()
객체의 코드값을 반환한다.
void notify()
wait된 스레드 실행을 재개할 때 호출한다.
void notifyAll()
wait된 모든 스레드 실행을 재개할 때 호출한다.
void wait()
스레드를 일시적으로 중지할 때 호출한다.
void wait(long timeout)
주어진 시간만큼 스레드를 일시적으로 중지할 때 호출한다.
void wait(long timeout, int nanos)

모든 클래스는 정의할 때부터 명시적으로 java.lang.Object 클래스를 상속 받게 된다. 그러므로 위에 정의된 Object의 함수들은 어떤 클래스에서도 호출이 가능하다.

728x90
반응형