오늘은 추상클래스에 대해 공부해보았다.
추상클래스는 추상메서드를 포함한 클래스이다.
추상메서드는 구현코드가 없이 선언부만 있는 메서드를 말한다.
이때 abstract 예약어를 사용하며 추상클래스는 new(인스턴스화)할 수 없다.
추상클래스의 구현은 아래와 같다.
메서드와 클래스에 abstract 키워드를 사용하며 추상메서드가 포함된 클래스는 추상클래스로 선언하여야 한다.
모든 메서드가 구현되었다고 해도 클래스에 abstract를 사용하면 추상클래스이다.
추상클래스는 주로 상속의 상위클래스로 사용된다.
추상메서드는 하위 클래스가 구현해야 하는 메서드이다,
템플릿 메서드는 추상메서드나 구현된 메서드를 활용하여 전체의 흐름(시나리오)을 정의해놓은 메서드이다.
final로 선언하여 재정의 할 수 없게 한다.
템플릿 메서드는 아래와 같이 구현할 수 있다.
<추가공부>
싱글톤, 추상메소드, 인터페이스, 내부클래스, Object
출처 : blog.naver.com/toomanystars/222022082110
1. 싱글톤
하나의 객체만 만들도록 보장해야 하는 경우가 있다. 단 하나만 생성되기 때문에 이 객체를 싱글톤이라고 한다.
싱글톤을 만들려면 클래스 외부에서 new연산자로 생성자를 호출할 수 없도록 만들어야 한다.
생성자를 외부에서 호출할 수 없도록 하려면 생성자 앞에 private접근 제한자를 붙여주면 된다.
포맷은 다음과 같다.
1.1 public class 클래스{
//정적필드
private static 클래스 singleton = new 클래스();
//생성자
private 클래스(){}
//정적 메소드
static 클래스 getInstance(){
return singleton;
}
}
외부에서 객체를 얻는 유일한 방법은 getInstance()메소드를 호출하는 방법이다.
getInstance()메소드는 단 하나의 객체만 리턴하기 때문에 아래 코드에서 변수1과 변수2는 동일한 객체를 참조한다.
이 예로 Calendar이 있다.
2. Abstract 추상메소드
추상메소드는 기능 역할을 해주는 {}이 없는 메소드이다.
추상 메소드는 객체가 가지고 있는 메소드를 설명한 것으로 호출할 때 어떤 개매값이 필요하고, 리턴 타입이 무엇인지 알려준다.
실제 실행부는 객체가 가지고 있다.
일반메소드, 추상메소드 섞여있다면 추상클래스가 되고
추상메소드만 있다면 인터페이스라고 부른다.
추상 클래스인 Animal에 view라는 일반 메소드와 disp() 추상메소드가 섞여있으므로 abstract 인 추상클래스이다
추상메소드는 오버라이드 해서 미완성된 {}을 채워준다.
튜나와 엘리펀트 클래스에서 오버라이드를 해준다.
메인함수에서 추상클래스를 new로 선언한다면 오류가 난다.
이유 : 추상클래스는 기능역할이 없어서 객체생성 할수 없기때문에.
그래서 오버라이드 한 엘리펀트나 튜나를 선언해서 사용해야 한다.
하지만 다형성으로 선언할 수 있다.
3. Interface 인터페이스
오버라이드 할 때 implement를 사용한다.
이전에 추상클래스를 오버라이드 할때는 Extends를 사용한 것이 차이점.
사용할때는 다형성으로 선언해서 사용함.
3.1 인터페이스는 여러개 상속이 가능하다
무버블과 어텍어블 인터페이스 2개 선언.
인터페이스 간의 상속은 여러개 상속이 가능함.
Fight라는 클래스는 Unit을 상속받고 Fightable인터페이스를 오버라이트한다
3.2 인터페이스는 new로 선언할 수 없다. 하지만 오버라이드하면서 선언하면 가능하다
new로 선언하면서 오버라이드 하는 방법 :
사용하기
4. 내부 클래스
클래스 안에 클래스를 선언할 수 있다
웹프라그램이라는 함수에 렝기쥐하고 스마트 class를 선언했음.
보통 클래스는 메인에서 선언할 수 있지만
내부클래스는 main에서 new로 선언하면 에러난다
그래서 내부클래스는 내부에서 선언해야함. Print()메소드에서 선언한것 처럼..
혹은, 내부클래스를 접근하는 경우 단계적으로 접근하면 된다
메인에서 단계적으로 접근한 예
5. Java.lang
클래스를 선언할 때 extends 키워드로 다른 클래스를 상속하지 않으면 암시적으로 lang.Object클래스를 상속하게 된다.
따라서 모든 클래스는 Object클래스의 자식이거나 자손 클래스이다.
Object - 자바 클래스의 최상위 클래스로 사용한다
매개타입이 Object로 모든 객체가 매개값으로 대입될 수 있음을 의미한다.
이유는 Object가 최상위 타입이므로 모든 객체는 Object타입으로 자동 타입 변환될 수 있기 때문.
패스트캠퍼스 강의: https://bit.ly/3ilMbIO
'언어공부 > JAVA&SPRING' 카테고리의 다른 글
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 49회차 미션 (0) | 2020.09.27 |
---|---|
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 48회차 미션 (0) | 2020.09.26 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 46회차 미션 (0) | 2020.09.24 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 45회차 미션 (0) | 2020.09.23 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 44회차 미션 (0) | 2020.09.22 |
댓글