날아라쩡글이의 블로그입니다.
객체지향 2 이어서 본문
추상클래스 -미완성클래스, 완성된 클래스가 아니기 때문에 상속을 통하여 자손의 클래스에 의해 완성
인스턴스는 생성할 수 없다. 새로운 클래스를 만들기 위하여 중요한 클래스로써,
선언부만 작성하고 구현부는 작성하지 않은 채로 남겨두는 것이 추상매서드이다.
-생성자, 매개변수와 메서드도 가질수 있다.
abstract 리턴타입의 메서드 이름(); //주석을 통해 어떠한 기능을 수행할 것인지 작성해주어야한다.
추상화의 상속을 내려갈 수록 구체화가 되며, 상속을 따라 올라갈수록 모호함이 올라간다.
추상성 = 다향성을 이용한 자손의 형태
여러종류의 객체를 배열로 다루기
-SUPER();상속의 표시사용, 클래스를 부르는 THIS.사용,구입한제품을 말하기위한 배열사용, 배열에 사용할 카운터 사용,
FOR과 IF문을 사용하여 구입한 물품의 총가격과 목록을 만듬, 부가세와 할인율을 넣음
추상클래스의 작성
-메서드의 부분만 작성이 가능하기 때문에 유연하고, 작은 부분만 수정이 가능하며, 추상적이며, 유리하다.
-그와 별개로 전체적인 부분만 수정을 해야할 경우, 명확하고 분명하다는 장점이 있다.
클래스간의 공통조상이 없었다면, 하나의 배열로 다룰 수 없을 것이다.
인터페이스 =추상메서드만을 구현한다. 다중상속이 가능한 부분 ,<추상메서드의 집합>
인터페이스란 일종의 추상클래스의 집합이며, 구현된 것은 아무것도 없이 껍데기를 의미한다.
public을 가지고 사용하며, 이런구성모양을 가진다
인터페이스는 인터페이스만으로 상속을 받을 수 있으며, object가 최고 조상은 아니다.
인터페이스는 자신에게 정의된 추상메서드의 모통을 만들어주는 크래스를 정의하여야한다(구현한다)
인터페이스는 상속과 구현을 동시에 할수 있으며, 인터페이스를 구현한 클래스만 가능하다.
인터페이스를 이용한 다향성
- TV v = new smartTV(조상 = 자손객체 참조변수가 가능하다)
이와마찬가지도
이렇게 다형성을 가진다. 그리고 자손의경우 조상의 접근제어자가 좁으면 안된다.
메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다.
인터페이스의 장점 = 기계를 사용하기 위한 껍데기라고 생각한다. 윈도우같은것.
-보수가 쉽다.개발시간이 단축된다.
-변경을 하더라도 유동성 있게 변경할 수가 있다.
-중요한 곳은 변경하지 않고 인터페이스만 변경하면되기 때문에 표준화가 가능하다.
-독립적인 프로그래밍이 가능하다.
-inter+face의 단어처럼 '연결,대상,소통'을 주관으로 하는 역활이라고 생각하면 된다.
디폴트 메서드와 static 메서드
-JDK1.8 부터는 디폴트메서드를 추가하였다. 추상메서드의 기본적인 구현을 제공하는 메서드로
키워드 defult가 붙으며, 일반 메서드들처럼 몸통{}이있어야한다. 접근제어자가 public이며 생략가능하다.
기존의 메서드와 이름이 중복되어 충돌이 발생되는 경우가 있다.
1. 여러인터페이스의 디폴트 메서드간의 충돌
2.디폴트 메서드와 조상클래스의 메서드간의 충돌이 발생되는데
그냥 인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩을 하면된다.
내부클래스 -클래스내에 선언된 클래스이다.
-두클래스간에 긴밀한 관계를 가지고 있을때 사용되는데, (초반 객체지향을 배웠을 때 작성하던 코드)
1.내부클래스에서 외부클래스의 맴버들을 쉽게 접근할 수 있고,
2.캡슐화를 할 수 있다.
instance class | =iv (인스턴스 변수)와 동일 |
static class | =cv(클래식 변수)와 동일 |
local class | =lv(지역변수)와 동일, 메서드 안 |
anonymous class | 일회용으로 쓰이는 메서드(익명메서드) |
앞 객체지향에서 배운 static와 인스턴스, 지역변수에 대해서 동일하게 생각하면 된다.
메서드가 수행을 마쳐서 지역변수가 소멸된 시점에도 지역클래스의 인스턴스가 소멸된 지역변수를 참조하려는 경우가 발생할 수 있다.
컴파일시 생성되는 클래스 파일의 경우
outer$내부클래스파일의이름.class로 표현된다.
'java (학원 전) story' 카테고리의 다른 글
JAVA의 이름 짓는 규칙 (0) | 2021.08.02 |
---|---|
VScode 로 java시행하는 방법 (0) | 2021.08.02 |
객체 지향 2 (0) | 2021.03.25 |
객체지향언어1(이어서) (0) | 2021.03.21 |
객체 지향 언어 1 (0) | 2021.03.19 |