BACK END/JAVA

impor문, 다형성, 인터페이스

라미보 2022. 6. 6. 04:05

 

 

●Package

-서로 관련 있는 여러 개의 클래스와 인터페이스들을 묶어둔 것

-클래스가 물리적으로 클래스파일(*.class)인 것처럼, 패키지는 물리적으로 폴더이다.

-패키지는 서브패키지를 가질 수 있으며, '.'으로 구분한다.

-패키지는 소스파일에 첫 번째 문장으로 단 한번 선언한다.

-모든 클래스는 하나의 패키지에 속하며, 패키지가 선언되지 않은 클래스는

 자동적으로 이름없는 (unnamed) 패키지에 속하게 된다.

 

 

 

●import

-소스파일에서 사용할 클래스나 인터페이스의 위치를 JVM에 알려준다.

-소스파일에서 패키지 아래 선언한다.

더보기

import 패키지명. 클래스명;

또는

import 패키지명.*;

같은 패키지의 여러 클래스를 사용하게 될 때, impor문을 여러 번 사용하기보다 import 패키지명.*;을 이용하면 

지정된 패키지에서 일치하는 클래스 이름을 컴파일러가 알아서 찾아준다.

import java.lang.*; 을 사용하면  lang 패키지 안에 있는 모든 클래스를 사용할 수 있다.

 

 

 

 

 

 

 


 

 

 

다형성(Polymorphism)

 

여러 가지 형태를 가질 수 있는 능력

▪ 하나의 참조변수로 여러 타입의 객체를 참조할 수 있는 것

-조상타입의 참조변수로 자손타입의 객체를  다룰 수 있는 것

-반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수는 없다.

-참조변수가 사용할 수 있는 멤버의 개수는 인스턴스의 멤버 개수보다 같거나 적어야 한다.

 

 

 

▪ 참조변수의 형변환

서로 상속관계에 있는 클래스 사이에서만 가능하다.

사용할 수 있는 멤버의 개수를 조절

 

더보기

자손타입  →  조상타입  (Up-casting) : 형 변환 생략 가능

자손타입  ←  조상타입  (Down-casting) : 형변환 생략 불가

 

▸업 캐스팅(Upcasting)

- 특정 객체가 하위 클래스의 형에서 상위 클래스의 형으로 캐스팅되는 것

- 자식타입의 참조변수를 조상타입의 참조변수로 변환하는 것

- 업 캐스팅 시 주의사항

   ◦ 상위 클래스의 형에 존재하는 메서드만을 상위 클래스의 이름으로 호출할 수 있다.

   ◦ 하위 클래스에만 존재하는 메서드는 상위 클래스의 이름으로 호출할 수 없다.

- 조상과 자식 관계만 형 변환이 가능하다.

 

 

다운 캐스팅(Downcasting)

- 조상타입의 참조변수를 자식타입의 참조변수로 변환하는 것

- 업 캐스팅한 것을 다시 원래의 형으로 복원시켜주는 작업

- 업 캐스팅된 것만 다운 캐스팅할 수 있다.

- 다운캐스팅은 가제 캐스팅한다.(업캐스팅은 자동)

-instanceof 연산자

  ◦  참조변수의 형 변환 가능 여부 확인에 사용된다.

  ◦ 형 변환 전에 반드시 "instanceof"로 확인해야 한다.

  ◦ 주로 조건문에 사용되며, (참조 변수) instanceof(클래스명)으로 위치한다.

  ◦ instanceof를 이용한 연산 결과로 ture를 얻었다는 것은 참조변수가 검사한 타입으로 형 변환이 가능하다는 뜻

  ◦ 값이 null인 참조변수에 대해 instanceof 연산을 수행하면 false를 결과로 얻는다.

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

● 인터페이스(Interface)

 

- 인터페이스는 모든 메서드가 추상메서드인 경우를 말한다. (객체 생성 안됨)

- 추상클래스보다 추상화 정도가 높아 오직 추상메서드와 상수만을 멤버로 가질 수 있으며,

  그 외의 다른 어떠한 요소도 허용하지 않는다.

- 인터페이스는 구현된 것은 아무것도 없고 밑그림만 그려져 있는 '기본 설계도'라 할 수 있다.

- 작성할 때 class 대신 interface라고 쓴다.

- 'implements' 키워드를 이용하여 추상메서드 구현한다

- 인터페이스는 인터페이스로부터만 상속받을 수 있으며, 클래스와 달리 다중 상속이 가능하다.

더보기

interface 인터페이스이름 {

               public static final  타입 상수 이름 = 값;

               public abstract 메서드이름(매개변수목록);

 }

 

 

인터페이스 멤버들은 다음과 같은 제약사항이 있다.

더보기

▪ 모든 멤버변수는 public static final 이어야 하며, 이를 생략할 수 있다.

▪ 모든 메서드는 public abstract (디폴트)이어야 하며, 이를 생략 할 수 있다.

   단 , static 메서드와 디폴트 메서드는 예외(JDK1.8부터)

 

 

 

▪ 인터페이스의 장점

 

- 개발 시간을 단축시킬 수 있다.

- 표준화가 가능하다.

   :기본 틀을 인터페이스로 작성한 다음, 개발자들에게 인터페이스를 구현하여 프로그램을 작성함으로써

    일관되고 정형화된 프로그램의 개발이 가능하다.

- 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.

   :아무 관계없는 클래스들에게 하나의 인터페이스를 공통적으로 구현하도록 함으로써 관계를 맺어줄 수 있다.

- 독립적인 프로그래밍이 가능하다.

   :인터페이스를 이용하면 클래스의 선언과 구현을 분리시킬 수 있기 때문에 실제 구현에 독립적인 프로그램을 작성하는        것이 가능하다.

- 여러 interface를 만들어 놓고 사용자에게는 필요한 interface만을 공개함으로써 그 기능만 사용하게 할 수 있다.

   :해당 객체를 잘못 사용하는 오류를 막을 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

객체지향 개념을 배우고 다형성을 배웠는데, 생각보다 다형성 부분이 어려웠습니다.

다형성 부분의 개념이 한 번에 이해되지 않아서 쉬는 시간에 다시 한번 혼자 복기해보았습니다.

아무래도 이 부분은 여러 번 복습이 필요한 부분이라고 생각되고, 이 부분을 잘 이해해야 다음 배우는 부분도 이해가 될 것 같습니다.

인터페이스는 상속과 비슷한 거 같으면서도 다른 부분들이 있었습니다.

아직 많이 사용하지는 않았지만, 편리한 기능을 가진 것 같습니다.