오늘은 여러가지 클래스에 관해 공부했다.
먼저, abstrcat 클래스부터 살펴보면

abstract 클래스는 인스턴스화 될 수 없는 클래스이다.
??
그러면 왜 abstract 클래스를 쓰는 것일까?

상속을 목적으로 상위클래스로 선언하고 싶은 경우 abstract를 사용한다.
abstract 선언은 클래스와 메소드에서 사용할 수 있다.

abstract 클래스는 인스턴스 생성이 불가능하다.
그렇기 때문에 다른 클래스에서 상속을 받은 후 abstract 메소드를 오버라이딩 해서 사용한다.

- Interface
: 완벽한 abstract 클래스이다.
완벽한 abstract 클래스란 내부 메소드들이 전부 abstract메소드인 클래스를 말한다.
전부 abstract 인 메소드들을 가지고 있는 클래스 앞에 interface라고 선언을 하면
자동으로 내부 메소드들은 public abstract으로 설정되고 내부에 존재하는 변수는 자동으로 public static final로 선언된다.



(interface 선언)



위 선언을 보면 메소드들의 { } 의 내용이 없는 것을 확인 할 수 있다.

즉 이 메소드들은 오버라이딩 해서 사용해야한다.
이러한 interface는 extends로 받지 않고 implements 라고 받는다.
상속이라는 표현보다 구현이라는 표현을 사용한다. 텅 빈 메소드들을 채워 넣는 개념이다.

- interface 기반의 상수표현
interface를 이용해 상수를 표현하는 방법도 있다.



(interface를 이용해 상수를 표현하는 방법)



* 인터페이스를 이용해 다중상속을 구현할 수 있다.

원칙적으로 자바에서는 다중상속을 못하게 되어있다.

하지만, interface를 이용하면 다중상속과 같은 표현을 할 수 있다.

예를 들어 IPTV는 TV이기도 하고 Computer이기도 하다. 이 것을 표현하고자 한다면
interface를 이용해서



(interface와 TV, Computer 클래스 선언)





(IPTV는 TV와 Computer 다중상속)



정확히 표현하자면 다중상속은 아니지만
다중상속과 같은 표현이다.

* Inner 클래스
클래스 안에 클래스를 선언 할 수 있다.

- Outer 클래스의 인스턴스 생성 후에야 Inner 클래스의 인스턴스 생성이 가능하다.
- Inner 클래스 내에서는 Outer 클래스의 멤버에 직접 접근이 가능하다.
- Inner 클래스의 인스턴스는 자신이 속할 Outer 클래스의 인스턴스를 기반으로 생성된다.

-> Inner 클래스를 사용하면
1. 클래스들을 논리적으로 묶는 수단이된다.
2. 클래스들을 논리적으로 묶다 보니, 캡슐화가 증가하는 효과가 있다.
3. 결과적을 ㅗ코드의 가독성이 향상되고, 유지보수성이 좋아진다.


* 전화번호 관리 프로그램 5단계
출력 내용은 같지만
코드 면에서 가독성을 높이고
효율적으로 만들기 위해 5단계로 업그레이드하였다.

바꾼 내용은 먼저



(case 상수)



case에서 쓰던 상수를 읽기 편하게 interface를 이용해 상수를 선언했다.


(안정성을 높인 코드)


위 코드는 PhoneBookManager가 하나만 생성될 수 있도록
static메소드로 밖에서 호출 할 수 있고 이 메소드를 이용해 PhoneBookManager를 생성 할 수 있도록 하였다.

(* 참조 - 난 정말 JAVA를 공부한 적이 없다구요, 윤성우)




오늘 상속을 이용해
전화번호 관리 프로그램을 4번째 단계로 업그레이드 하였다.

업그레이드 내용은.

전화번호 내용 데이터를
대학, 회사, 일반 정보로 나누는 것이다.

쉽게 말하면 대학, 회사의 클래스 두개를 추가하는 것이다.

만약 상속을 이용하지 않았더라면
좀 더 복잡하게 바꿨어야했을 텐데

상속을 이용했기에 기존에 몇개만 바꾸어서 업그레이드 가능했다.

먼저
기본 상위 클래스인 일반친구들의 정보 클래스를 만들었다.


(상위 클래스)


이 정보를 상속받아 대학, 회사의 정보도 만들었다.


(상속을 이용해 추가한 두개 클래스)


상속을 이용해 PhoneInfo 의 클래스로 규정화 시켜 다룰 것이다.

먼저 입력을 다루기위해 manager 클래스(controller)에서 일반, 대학, 회사의 입력을
나누었다.


(입력을 추가해 놓은 코드)


이렇게 되면 inputData 메소드로 입력을 간단히 완성시킬 수 있다.
보면 들어오는 정보는 PhoneInfo 클래스로 다루어진다.


(입력 코드)


PhoneInfo 클래스인 info 로 한번에 다루어서 저장한다.

그리고

최종 출력화면


(정상적으로 돌아가는 화면)


이로써 상속을 이용하여 4번째 단계로 전화번호 관리 프로그램을 업그레이드 하였다.

:)

(*참조 - 난 정말 JAVA를 공부한 적이 없다구요, 윤성우)


+ Recent posts