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

2022. 1. 26. 03:49·프로그래밍 언어/Java
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
반응형
저작자표시 (새창열림)

'프로그래밍 언어 > Java' 카테고리의 다른 글

Java 프로그래밍 초급(5) - 컬렉션 프레임워크 : List  (1) 2022.01.26
Java 프로그래밍 초급(4) - 컬렉션 프레임워크 : 개념, 제네릭  (0) 2022.01.26
Java 프로그래밍 초급(2) - 객체지향 고급(상속)  (0) 2022.01.21
Java 프로그래밍 초급(2) - 객체지향 메소드  (0) 2022.01.19
Java 프로그래밍 초급(1) - 객체지향 기초  (0) 2022.01.19
'프로그래밍 언어/Java' 카테고리의 다른 글
  • Java 프로그래밍 초급(5) - 컬렉션 프레임워크 : List
  • Java 프로그래밍 초급(4) - 컬렉션 프레임워크 : 개념, 제네릭
  • Java 프로그래밍 초급(2) - 객체지향 고급(상속)
  • Java 프로그래밍 초급(2) - 객체지향 메소드
pink_salt
pink_salt
유익함을 주는 개발자가 되도록 keep going
  • pink_salt
    KeepGoingForever
    pink_salt
  • 전체
    오늘
    어제
    • 분류 전체보기 (117)
      • Project (7)
      • WEB study (3)
        • WEB(Springboot) (10)
        • Git, GitLab (13)
        • Clean code (1)
        • FrontEnd (3)
      • Study (21)
        • Algorithm (19)
        • 면접 준비 (2)
      • Cloud Computing (2)
        • AWS (2)
      • 프로그래밍 언어 (35)
        • Java (29)
        • Python (0)
        • javascript (6)
      • 운영체제 (0)
        • Linux (0)
      • Database (4)
        • MongoDB (8)
        • SQL (8)
      • 애플리케이션 개발 (1)
        • Android (1)
      • AI (1)
        • Deeplearning (1)
        • machinelearning (0)
      • Daily (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    spring boot
    codepresso
    Java
    코딩이러닝
    티스토리챌린지
    코딩강의
    SWEA
    대외활동
    python
    자바
    MongoDB
    언어
    개념
    mysql
    무료코딩교육
    Git
    gitlab
    Database
    빅오표기법
    백준
    BFS
    git branch
    코드프레소
    dp
    IT교육
    오블완
    SW
    객체지향
    Query
    무료IT교육
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
pink_salt
Java 프로그래밍 초급(3) - 객체지향 고급(오버라이딩, 다형성, 패키지)
상단으로

티스토리툴바