Java 프로그래밍 초급(3) - 객체지향 고급(오버라이딩, 다형성, 패키지)
728x90

안녕하세요~ 항상 나아가는 개발자 pink_salt 입니다!

코드프레소 Java 웹 개발 체험단 활동을 하고 있습니다.

Java의 정말 중요한 개념인 객체지향 고급에 대해서 알아봅시다~ 고고!

이번엔 'Java 프로그래밍 초급' 강의를 듣고 공부한 내용을 정리하여 세 번째 포스팅을 진행하겠습니다.


메소드 오버라이딩(Method Overriding)

부모 클래스로부터 상속받은 메소드를 자식 클래스가 자신만의 특성에 맞게 새롭게 구현하는 것입니다.

 

main 클래스에서 각 클래스의 객체를 생성하고 같은 이름의 다른 내용의 메소드를 실행하면 다른 내용의 코드가 객체에 따라 실행되는 것을 볼 수 있습니다.

메소드 오버라이딩의 조건

  • 오버라이딩하는 부모 클래스의 메소드와 이름이 같아야 합니다.
  • 오버라이딩하는 부모 클래스의 메소드와 파라미터가 같아야 합니다.
  • 오버라이딩하는 부모 클래스의 메소드와 리턴 타입이 같아야 합니다.

 

다형성의 이해(polymorphism)

클래스는 사용자 정의 타입(자료형)

  • 변수를 선언할 때 변수 명 앞에 자료형을 명시합니다.
  • ex) int x, double pi, String name ~~

그럼 luke의 자료형은?

바로 PaidUser입니다.

즉 -> Java 클래스는 사용자 정의 타입(User Defined Type)으로 자료형으로 사용됩니다.

 

Java의 타입 체킹

Java는 타입 간의 호환에 매우 엄격한 언어입니다.

기본적으로 서로 다른 타입의 객체를 참조할 수 없습니다.

예외는 있습니다.

Java에서는 부모 클래스의 참조 변수가 자식 클래스의 객체를 참조할 수 있습니다.

 

차이점?

 

타입을 부모로 하면 자식만 갖고 있는 멤버 변수에는 접근할 수 없습니다.

 

다형성(polymorphism)

  • 사전적 정의 : 다양한 형태를 가지는 성질입니다.
  • 다형성은 객체지향의 주요 특성 중 하나입니다.
  • 동일한 사물이 때에 따라 서로 다른 기능을 할 수 있는 것이라고 말할 수 있습니다.

 

  • 하나의 타입이 때에 따라 여러 종류의 객체의 특성을 가질 수 있는 것입니다.
    • 여러 종류의 객체를 참조할 수 있는 것
  • 같은 형태의 메소드가 때에 따라 다양한 동작을 수행합니다.
  • Java에서는 다음 특성을 이용해 다형성을 구현할 수 있습니다.
    • 부모 클래스의 참조 변수가 자식 클래스의 객체를 참조할 수 있음.
    • 메소드 오버라이딩

다형성의 구현

 

부모 타입의 객체를 만들어서 자식 타입의 객체를 참조하게 하면 그에 따른 오버라이딩 된 메소드를 사용할 수 있습니다.

 

왜 다형성을 사용하는가?

  • SW 요구사항 변경이나 추가에 대해 유연한 설계가 가능합니다.
  • 요구사항이 추가되었을 시에 기존 코드의 변경이 최소화됩니다.

패키지의 이해(Package)

패키지는 관련 있는 클래스를 한 곳에 묶어 놓은 그룹을 말합니다.

클래스를 구분하는 일종의 디렉터리라고도 할 수 있습니다.

패키지는 하위 계층 구조를 가질 수 있습니다.

패키지 명의 작성

  • 소문자로만 작성, 클래스의 묶음을 표현하는 의미 있는 이름으로 작성
  • 패키지는 계층 구조를 가지며 일반적으로 '1차 도메인. 회사명.'으로 시작됩니다.
  • 패키지의 이름과 구조는 실제 OS의 디렉토리 구조와 매핑됩니다.
    • 패키지를 생성하면 실제 디렉토리도 새로 생성됩니다.
  • 패키지명은 계층 구조의 전체 이름을 모두 포함합니다.
  • 하위 계층 구조는 점(.)을 통해 구분할 수 있습니다.
    • FQCN(Fully  Qualified Class Name)
      • 클래스의 FQCN은 패키지 명을 모두 포함합니다.
      • 패키지명 + 클래스명

패키지와 클래스

  • 모든 클래스는 반드시 하나 이상의 패키지에 속합니다.
  • 클래스 생성 시 패키지를 선언하지 않으면, 이름 없는 패키지에 포함됩니다.
  • 패키지를 선언하지 않은 모든 클래스는 모두 동일한 패키지에 속합니다.

 

패키지의 선언

  • 해당 클래스가 어떤 패키지에 속하는지 명시하는 것입니다.
  • package 키워드를 통해 패키지명을 선언할 수 있습니다.
  • 패키지 선언문은 .java 파일의 가장 첫 번째 라인에 작성합니다.
  • 모든 클래스에 단 한 번만 패키지를 선언할 수 있습니다.

IDE를 통해서 패키지를 생성합니다.

src > mouse 오른쪽 버튼 클릭 > New > Package > 패키지명 입력

ex) com.codepresso.nuwtube.user 패키지 내 User 클래스 생성

다른 패키지의 클래스 사용하기 - import

  • 다른 패키지에 속한 클래스를 사용할 때에는 클래스의 FQCN을 사용해야 합니다.
  • FQCN의 반복을 피하려면 import문을 선언합니다.
  • 사용하고자 하는 클래스의 FQCN을 명시합니다.

 

  • 특정 패키지 내의 모든 클래스를 사용하는 경우가 있습니다.
  • FQCN 대신 '패키지명.*'으로 특정 패키지 내의 모든 클래스를 사용 가능합니다.

 

default 접근 제어자

  • 접근 제어자를 명시하지 않으면 default 접근 제어자가 적용됩니다.
  • 같은 패키지 내에서는 접근이 가능하고 다른 패키지에서는 접근이 불가합니다.

 

protected 접근 제어자

  • 같은 패키지 간에는 멤버 접근이 가능합니다.
  • 상속 관계에서 부모 클래스의 패키지가 달라도 자식 클래스에서 부모 클래스의 멤버에 접근이 가능합니다.


다음 게시물에서는 객체지향의 컬렉션 프레임워크의 List에 대해 자세히 공부하고 정리해보겠습니다!

열심히 나아가는 개발자 이었습니다.

go go!

코드프레소 URL: https://www.codepresso.kr/

 

프리미엄 IT 교육 서비스 - 코드프레소

 

www.codepresso.kr

 

728x90
반응형