반응형
Java의 기초문법 3 (오버로딩, 생성자, 다형성, 추상클래스, 인터페이스)

Overloading : 하나의 이름으로 여러가지 기능을 하는 함수

* 사용 : println() 대표적인 함수
* 문법 : 함수의 이름은 같고 parameter의 개수와 타입을 달리하는 방법
 1. 함수의 이름은 같아야 한다.
 2. [parameter] 개수 또는 [Type]은 달라야 한다.
 3. return type은 overloading에 판단기준이 아니다.
 4. parameter 순서가 다름을 인정한다.



Constructor : 특수한 목적을 가지는 함수 

* 특수한 목적 : member field 초기화

1. 일반함수와 다른점
 1.1 함수의 이름이 고정 (class 이름과 동일)
 1.2 return type (x), void(x) -> 사실은 모든 생성자 함수는 void 
2. 목적 : 생성되는 객체마다 다른 초기값을 부여할 때
3. 함수는 overloading이 가능하다 (생성자 함수도 가능)
   new Car(); memory에 올릴 때 함수를 호출하면서 메모리에 올리기 (default constructor)
   class 생성시 default 생성자는 생략가능 >> 컴파일러가 만들어줌

다형성 

* 참조변수 a = new 인스턴스타입 ();

기본적으로는 참조변수와 인스턴스의 타입이 일치하는 걸 많이 쓴다.

참조변수 보다 인스턴스 타입의 멤버가 더 범위가 넓어야한다.
- 참조변수: 부모, 인스턴스 타입: 자식 -> 가능, 부모의 멤버만 참조가 가능하다.
- 참조변수: 자식, 인스턴스 타입: 부모 -> 불가능, 참조변수의 멤버를 모두 충족하지 못한다.

추상클래스 :  미완성 클래스 (완성된 코드 + 미완성 코드)

 - 미완성 코드 : 미완성 함수(함수가 {실행블럭} 이 없다) ex) public void print();
 - 완성과 미완성의 차이 (new를 통해 객체를 생성 (생성 O : 완성, 생성 X : 미완성)

 1. 추상클래스는 스스로 객체 생성이 불가능(new 사용 X)
 2. 추상클래스는 결국 완성된 클래스를 만들어서 사용 -> [상속]을 통해
  미완성 자원(추상함수)를 완성(구현)해야함 -> 재정의를 통해 완성 (override)

 추상클래스 >> 설계자가 바라보는 진정한 의미 : 강제적으로 구현을 목적으로 한다(개발자들이 각각 다른 이름으로 구현하길 바람)

미완성 클래스(설계도)이다. 틀만 그려놓고 자식이 상속받아서 구현하라는 뜻이다.
이 클래스를 가지고는 인스턴스를 생성하지 못한다.
백지에서 클래스를 설계하기보다는 공통된 요소를 모아논 추상 클래스를 만들고 여기 저기서 상속 받아서 클래스를 작성하면 훨씬 수월할 것이다.
추상 메소드가 있으면 abstract 키워드를 붙여 상속 받아서 완성시켜야할 놈이 있다고 명시적으로 알려주는 게 좋다.
abstract에는 미완성인 녀석만 있는 게 아니라 생성자나 메소드 등등 다 가지고 있을 수 있다.
심지어 일반 클래스도 그냥 abstract 키워드를 붙여 추상 클래스로 만들 수 있는데 이렇게되면 직접 인스턴스 생성을 하지 못한다.
상속이 자식 클래스를 만드는데 부모 클래스(공통 부분)를 이용하는 것이라면,
추상화는 부모 클래스(공통 부분)을 만드는데 자식 클래스(여러 자식에서 공통되는 부분들을 추출)를 이용한다.
추상화는 클래스 간의 공통점을 찾아내서 공통의 조상을 만드는 작업이라고 할 수 있고,
구체화는 상속을 통해 클래스를 구현, 확장하는 작업이라고 할 수 있다.

Interface (인터페이스)

* 추상 클래스와 인터페이스 공통점
 1. 스스로 객체 생성 불가능 (new 연산자 사용 X)
 2. 상속, 구현을 통해서만 사용가능 (메모리에 올라갈 수 있다)
 3. 재정의를 통해 강제 구현하는 것이 목적

 * 추상 클래스와 인터페이스 차이점
 1. 인터페이스는 유일하게 다중상속이 가능 (구현)
 2. 추상클래스는 단일상속이 원칙
 3. 추상클래스는 (완성된 코드 + 미완성된 코드)
 4. 인터페이스는 상수를 제외한 나머지는 미완성 코드 (추상자원)

*인터페이스간에는 상속가능
 interface Ia extends Ib, Ic, Id

 *하나의 인터페이스가 여러 개의 인터페이스 구현 가능
 class Test extends Object implements Ia, Ib, Ic
 class Test implements Ia, Ib, Ic


반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기