본문 바로가기
study_java/java_수강정리(~10.29)

[JAVA]16일차

by developer_j 2020. 6. 1.
728x90
반응형

< 16일차 수업 >

 

0. 다형성을 왜 이용하는가?

조상클래스를 상속하는 여러 자식 클래스들은 기존의 조상클래스를 확장한다. 다형성을 이용하면 기존의 조상 클래스를 기준으로 하위 클래스들의 인스턴스를 더 효율적으로 사용할 수 있다. 다형성이나, 상속, 인터페이스, ... 등등 객체를 지향하는 언어 답게 자바는 팀 단위 프로젝트를 더 쉽게 만들어준다. 표준을 강제하여 팀에게 공통된 작업을 수행하게 하거나, 수시로 변화되는 고객의 요구에 응할 수 있도록 기존의 코드를 뒤엎지 않아도 유지 보수될 수 있게 하기 위해 우리는 자바에서 상속에서 비롯되는 다형성 등을 이용하는 것이다. 


1. 상속  하지 못하도록 하고 싶으면? final의 또다른 사용

다른 클래스가 특정 클래스를 상속하지 못하게 한다거나, 특정 메소드를 오버라이딩 하지 못하게 하고 싶다면, 각각에 final 키워드를 붙여준다. final class와 final method는 다른 클래스를 통해 사용될 수 없다.

 

+) @Override 어노테이션

이 표시는 자바 5부터 등장했는데, 오타로 인한 오버라이딩 실패를 방지하기 위한 목적이다. 예를들어, 내가 오버라이딩을 하려고 특정 함수를 작성했는데 반환형이나 매개변수를 다르게 작성하여 오버라이딩이 성립되지 않고 다른 메소드로 취급받을 수 있다. 이 경우는 문법상 오류가 없으므로 컴파일도 되고 실행도 되기 때문에 문제가 된다. 이럴 때 이 표시를 사용한다. 내가 오버라이딩할 목적으로 이 함수를 작성했는데 오버라이딩이 잘 되었는지 확인해주겠니? 로 이해하면 된다. 함수에 문제가 없더라도 컴파일러가 한번더 확인해주기 때문이다.


2. Object 클래스

 

모든 클래스는 자바의 기본 클래스인 Object 클래스(java.lang 패키지에 있는 클래스)를 상속한다. 만약 어떤 클래스가 다른 클래스를 상속한다면 object 클래스를 상속하지 않지만, 아무 클래스도 상속하고 있지 않다면 자바 컴파일러는 해당 클래스가 기본적으로 object 클래스를 상속하도록 한다. 이는 자바의 모든 인스턴스에 공통적인 기준과 규약을 적용하기 위함이다. object 클래스의 기본 함수는 오버라이딩에도 자주 쓰이기 때문에 알아두는 것이 좋다. 

다음 함수들 중에서도 hashCode, toString, equals 는 오버라이딩에 매우 자주 사용된다.


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) : 주어진 시간만큼 스레드 일시 중지

 

< 출처 - https://hyeonstorage.tistory.com/178 >


3. 인터페이스

 

인터페이스는 상수와 추상메소드로 구성된다. 상수와 추상 메소드는 각각 public static final / public abstract 키워드가 붙어야 하는데 생략하더라도 컴파일러가 알아서 붙여준다. 추상메소드는 바디 {}가 없는 메소드로, 내용이 없기 때문에 이 인터페이스를 대상으로 인스턴스를 생성하는 것이 불가능하다. 인터페이스는 내용이 없는데 왜 사용하는 것일까? 그 이유는 바로, 인터페이스 안에 들어있는 함수를 구현하도록 강제하기 위함이다. 이렇게 하면 여러 사람들이 함께 완성해야 하는 프로그램일 경우, 규약을 지켜야 하므로 통일된 작업을 수행할 수 있으며, 좀더 빠른 개발속도를 낼 수 있다.

 

인터페이스를 상속(implement : 구현이라고 한다)하는 클래스들은 인터페이스 안에 선언되어 있는 함수를 구현해야 한다. 인터페이스는 동시에 두개 이상을 구현하도록 할 수 있으며, 인터페이스 안의 추상메소드와 구현 클래스의 메소드 간에는 오버라이딩 관계가 성립하므로 @Override 어노테이션을 사용할 수 있다.

 

또한, 인터페이스는 참조변수형으로 선언할 수 있다.

 

< 인터페이스 부분 참조 출처 - 윤성우의 열혈 자바, TCP School 인터페이스 part>

+)인터페이스 내용은 내일 더 추가할 예정이다.

728x90
반응형

'study_java > java_수강정리(~10.29)' 카테고리의 다른 글

[JAVA]18일차  (0) 2020.06.03
[JAVA]17일차  (0) 2020.06.02
[JAVA]15일차(2)  (0) 2020.05.31
[JAVA]15일차  (0) 2020.05.31
[JAVA]14일차  (1) 2020.05.31