쌍용교육센터에서 공부한 내용을 정리하며 기록하는 글이고 주관적인 생각이 들어갈 수 있습니다.
잘못된 내용이나 피드백 및 생각 공유는 언제든 환영입니다.
댓글로 남겨주시면 확인 후 수정하겠습니다.
내용에 대한 소스 코드는 https://github.com/2jaehoon/ssangyonng.git 에 올려두었습니다.
Override
- 부모클래스에서 제공하는 기능이 자식 클래스의 상황과 맞지 않는다면
부모클래스 메소드와 동일한 메소드를 작성하고 다른 기능을 사용하는 것( 다형성 )
다형성에서는 메소드 다형성과 객체 다형성으로 나누어진다.
메소드 다형성 : Overload, Override
객체 다형성 : 상속(extends) , 구현(implements)
- 상속 관계에서 주로 사용된다.
- 접근지정자는 달라도 되고, 반환형, method명, 매개변수는 같아야 한다.
- 접근지정자는 광의의 접근지정자로 변환 가능하다.
- method의 접근 지정자가 final이면 Override가 되지 않는다.
- Override는 annotation을 사용할 수 있다. ( @Override )
컴파일 시 Override의 적합성 여부를 체크
- Override된 method는 최우선적으로 호출된다.
annotation
- JDK1.5에서부터 지원 되는 기능
- 컴파일러에게 컴파일시 명령을 내리는 주석
- method, 변수, interface 위에 정의
* @Overide
- method 위 정의
- Overrode가 제대로 되었는지 체크
@Override
public void test(){
}
* @Deprecated
- method 위 정의
- 비추천 method인지 체크해준다.
@Deprecated
public void test(){
}
* @SuppressWarnings
- 메소드 위 정의, 지역 변수 위 정의
- 경고를 없앨 때 사용한다.
// unused : 변수를 사용이 안되도
// rawtypes : Generic이 사용되지 않더라도
// deprecation : 비추천 메소드가 사용되더라도
@SuppressWarnings({"unused", "rawtypes", "deprecation"})//메소드 안의 경고를 모두 보여주지 않는다.
public void test(){
@SuppressWarnings("unused") //i 변수가 사용되지 않더라도 경고를 보여주지 않는다.
int i; //변수 만들고 안 쓰면 경고
}
추상클래스 (Abstract class)
- 상속의 기능을 사용하기 위해서 만드는 부모 클래스
- 구현의 강제성을 가진 추상 method를 가진다.
- 클래스 안에 변수랑 메소드랑 추상 메소드가 들어간다.
- 추상클래스는 직접 객체화를 할 수 없다. ( 자식 클래스를 통해서만 객체화가 된다. )
- 이클립스에서 단축키 Alt+Shift+s를 사용하면 쉽게 만들 수 있다.
// 문법
접근 지정자 abstract class 클래스명 [extends 부모클래스] [implements 구현 인터페이스]
* abstract method
- 구현의 강제성을 가진 method ( 자식 클래스가 반드시 Override 해야 한다.)
- method의 body( { } )가 없다. ( 일을 직접 할 수 없다. )
- 자식클래스가 반드시 구현해야할 일의 목록을 만드는 것이다.
- 추상 메소드가 호출되면 자식 클래스가 구현한 메소드가 최우선적으로 호출된다.
//문법
접근지정자 abstract 반환명 method명(매개변수들);
interface
- 다중 상속의 장점을 사용하기 위해 사용한다.
- 약결합을 구현하여, 객체간의 유연성을 높이기 위해 사용한다. ( 자바의 꽃 )
- 구현 클래스에서 구현해야 할 일의 목록만 정의
- default method에서는 override의 강제성이 없다. ( JDK1.8부터 추가된 기능 )
//문법
접근지정자 interface 인터페이스명 [ extends 상속받을 인터페이스 ]{
}
// 접근 지정자는 두 가지 public과 package(동일 패키지에서만 접근 가능)
//interface는 extends로 여러 개의 인터페이스를 상속 가능
- 모든 인터페이스의 추상 method는 구현 클래스에서 반드시 Override해야 한다.
- diagram으로 그릴 때에는 머리가 빈 화살표를 사용한다.
- 클래스에서 implements 키워드로 인터페이스를 구현한다.
class 클래스명 [implements 인터페이스명]
- Interface의 abstract method는 두 가지 형식으로 작성 가능
abstract 사용
접근 지정자 abstract 반환형 method명(매개변수, ...);
abstract 사용하지 않은 경우
접근 지정자 반환형 method명(매개변수, ...);
- 인터페이스는 객체화할 수 없고, 구현한 객체의 주소는 저장할 수 있다.
// 인터페이스명 객체명 = new 인터페이스명(); 은 객체화 불가
인터페이스명 객체명 = new 구현클래스의생성자();
is a 관계 : 상속을 받으면 다른 클래스의 기능을 내 클래스의 정의한 것 처럼 사용 가능 ( 기능 변경 o )
has a 관계 : 상속을 받지 않으면 다른 클래스의 기능을 객체화 후 객체명으로 사용 ( 기능 변경 x )
is a관계의 객체화
- 객체 다형성을 사용할 때( 같은 이름의 객체를 다르게 사용하는 것 )
- 자바에서 부모클래스는 자식 클래스를 모른다.
- 자바에서 자식클래스는 부모클래스를 안다.
// 이렇게 객체화를 하면 자식의 기능과 부모의 기능 모드 사용 가능
HongGilDong hgd = new HongGilDong();
// 자식은 부모이다. 자식클래스에서는 부모클래스의 정보를 가지고 있다.
// 이렇게 객체화를 하면 부모의 기능만 사용가능
// 단, 오버라이드된 메소드가 있다면 자식의 메소드가 호출됨.
// 자식 클래스를 객체화해 부모 클래스에 할당하는 것은 가능하다.
// 클라크의 주소에서 펄슨의 부모의 정보를 받아서 사용하는 것
Person p = new HongGilDong();
Person p = new Clark();
// 그 반대는 자식클래스의 정보가 없기 때문에
// 부모의 주소에서 자식들의 정보를 받지 못한다.
// 객체명은 객체의 시작주소를 가지고 있다.
// 그래서 부모클래스를 객체화하여 자식클래스에 할당할 수 없다.
// HongGilDong hgd=new Person(); 이렇게 안된다.
class에 abstract와 final 같이 사용할 수 없다.
abstract는 상속할래 final 상속 안해로 서로 대립되기 때문이다.
'성장 일기 > 쌍용교육센터' 카테고리의 다른 글
1226/문자열, 날짜 클래스 (0) | 2022.12.26 |
---|---|
1223/클래스 사용 (0) | 2022.12.23 |
1221/상속 (0) | 2022.12.21 |
1220/배열 (0) | 2022.12.20 |
1219/배열 (0) | 2022.12.19 |