10일차 - Java강의(제어자, package, import, 상속, this, super)

2024. 7. 26. 17:29·Java & Spring/Java
목차
  1. ◇ 제어자
  2. ◇ package와 import
  3. ◇ 상속
  4. ◇ Overriding(오버라이딩)
  5. ◇ super

◇ 제어자

변수, 메서드의 선언부에 사용되어 부가적인 의미를 부여

  1. 접근 제어자 : public, protected, default, private
    • 멤버 또는 클래스에 사용, 외부에서 접근하지 못하도록 제한
    • 지정되지 않았다면 default
  2. 그  외 제어자 : static, final, abstract
  3. 사용 가능한 접근 제어자
    • 클래스 : public, default
    • 메서드 & 멤버 변수 : public, protected, default, private
    • 지역변수 : 사용불가능
  4. Getter와 Setter
    • Getter : 외부에서 객체의 private한 필드를 읽을 필요가 있을 때 사용
      ※ 메서드 이름의 규칙은 get + 필드 이름(첫 글자 대문자)
      private double speed;    // 자동차 속도 , km/h
      private char gear = 'P'; // 기어의 상태, P,R,N,D
      private boolean lights;  // 자동차 조명의 상태
      
      public String getModel() {
          return model;
      }
      
      public String getColor() {
          return color;
      }
      
      public double getPrice() {
          return price;
      }


    • Setter : 외부에서 객체의 private 한 필드를 저장/수정 할 필요가 있을 때 사용
      ※ 메서드 이름의 규칙은 set + 필드 이름(첫 글자 대문자)
      private double speed;    // 자동차 속도 , km/h
      private char gear = 'P'; // 기어의 상태, P,R,N,D
      private boolean lights;  // 자동차 조명의 상태
      
      public void setModel(String model) {
          this.model = model;
      }
      
      public void setColor(String color) {
          this.color = color;
      }
      
      public void setPrice(double price) {
          this.price = price;
      }
  5. 사용가능한 제어자
    • 클래스 : public, default, final, abstract
    • 메서드 : public, protected, default, private, final, abstract, static
    • 멤버 변수 : public, protected, default, private, final, static
    • 지역 변수 : final
  6. 제어자 사용 시 주의 사항
    • 메서드에 static과 abstract를 함께 사용할 수 없다.
    • 클래스에 abstract와 final을 동시에 사용할 수 없다.
    • abstract메서드의 접근 제어자가 private 일 수 없다.
    • 메서드에 private와 final을 같이 사용할 필요는 없다.

◇ package와 import

  1. package : 클래스의 일부분이면서 클래스를 식별해 주는 용도
    • 상위, 하위 패키지의 구분은 도트(.)로 구분
  2. import : 다른 패키지에 있는 클래스를 사용하기 위해 명시하는 키워드
package week3.packageExample.main;

import week3.packageExample.pk1.Car;

public class Main {
    public static void main(String[] args) {
        // import로 접근
        Car car1 = new Car();
        // 전체 경로로 접근
        week3.packageExample.pk1.Car car2 = new week3.packageExample.pk1.Car();

        car1.horn();
        car2.horn();
    }
}

◇ 상속

  • 객체 지향 프로그램에서는 부모 클래스의 필드와 메서드를 자식 클래스에게 물려줄 수 있다.
  • 상소을 사용하면 적은 양의 코드로 새로운 클래스를 작성할 수 있다.
  • 공통적인 코드를 관리하여 코드의 추가와 변경이 쉬워질 수 있다.
  • 코드의 중복이 제거되고 재사용성이 증가하여 생산성과 유지 보수성이 증가한다.
  1. 상속관계 : is - a("~은 ~(이)다)
    ex) 고래는 포유류다.
  2. 포함관계 : has -a ("~은 ~을(를) 가지고 있다")
    ex) 자동차는 바퀴를 가지고있다.
  3. 단일 상속과 다중 상속 : Java는 클래스 간의 관계가 복잡해지는 문제를 방지하기위해 다중상속을 허용하지 않는다.
  4. final 클래스 : 클래스에 final 키워드를 선언하면 더 이상 상속할 수 없는 클래스가 된다.
  5. final 메서드 : 메서드에 final 키워드를 선언하면 최종적인 메서드가 됨으로 더 이상 오버라이딩 할 수없는 메서가된다.
  6. Object : Java 내 모든 클래스들의 최상위 부모 클래스

◇ Overriding(오버라이딩)

자식이 부모로부터 상속받은 메서드의 내용을 재정의 하는 것

1. Main class

public class Main {
    public static void main(String[] args) {
        // 자식 클래스 스포츠카 객체 생성
        SportsCar sportsCar = new SportsCar("Orion");

        // 오버라이딩한 brakePedal(), horn() 메서드 호출
        sportsCar.brakePedal();
        sportsCar.horn();

    }
}

2. Car class(부모 클래스)

public class Car {
    double speed;  // 자동차 속도 , km/h

    public double brakePedal() {
        speed = 0;
        return speed;
 
    public void horn() {
        System.out.println("빵빵");
    }

}

3. SportsCar class(자식 클래스)

public class SportsCar extends Car{
    String engine;
    public void booster() {
        System.out.println("엔진 " + engine + " 부앙~\n");
    }

    public SportsCar(String engine) {
        this.engine = engine;
    }

    @Override
    public double brakePedal() {
        speed = 100;
        System.out.println("스포츠카에 브레이크란 없다");
        return speed;
    }

    @Override
    public void horn() {
        booster();
    }
}

 

※ 여기서 @는 어노테이션(Annotation)이라고 한다.

  • 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종
  • 보통 @ 기호를 앞에 붙여서 사용
  • JDK 1.5 버전 이상에서 사용 가능
  • 자바 애너테이션은 클래스 파일에 임베디드되어 컴파일러에 의해 생성된 후 자바 가상머신에 포함되어 작동한다.

- 코드의 흐름

  1. Mian 클래스에 스포츠카 객체 생성(Sports Car class는 Car class를 상속함)
  2. brakePedal() 메서드 호출(SportsCar class로 진입해보면)
    • brakePedal() 메서드는 부모 클래스인 Car에서 상속받아 오버라이딩하여 재정의
  3. horn() 메서드 호출 (SportsCar class로 진입해보면)
    • horn() 메서드는 부모 클래스인 Car에서 상속받아 오버라이딩하여 재정의
    • booster() 메서드를 호출

◇ super

this가 객체 자신을 가르킨다면 super은 부모 클래스를 가르키는 것이다.

1. 메인 클래스

public class Main {
    public static void main(String[] args) {
        // 자식 클래스 스포츠카 객체 생성
        SportsCar sportsCar = new SportsCar("Orion");

        // 자식 객체의 model, color, price 초기값 확인
        System.out.println("sportsCar.model = " + sportsCar.model); // Ferrari
        System.out.println("sportsCar.color = " + sportsCar.color); // Red
        System.out.println("sportsCar.price = " + sportsCar.price); // 3.0E8
        System.out.println();

        // setCarInfo 메서드 호출해서 부모 및 자식 필드 값 저장
        sportsCar.setCarInfo("GV80", "Black", 50000000);
    }
}

2. 부모 클래스

public class Car {
    String model; // 자동차 모델
    String color; // 자동차 색상
    double price; // 자동차 가격
}

3. 자식 클래스

public class SportsCar extends Car{
    String engine;

    String model = "Ferrari"; // 자동차 모델
    String color = "Red"; // 자동차 색상
    double price = 300000000; // 자동차 가격

    public SportsCar(String engine) {
        this.engine = engine;
    }

    public void setCarInfo(String model, String color, double price) {
        super.model = model; // model은 부모 필드에 set
        super.color = color; // color는 부모 필드에 set
        this.price = price; // price는 자식 필드에 set
    }
}

- 코드 설명

  1. 메인 클래스에서 sportsCar.setCarInfo()메서드를 호출
  2. 자식 클래스의 setCarInfo로 가서 명령 실행
  3. spuer.model, super.color은 자식의 필드값이 아닌 부모의 필드값 변경
  4. this.price는 자식의 필드값 변경

'Java & Spring > Java' 카테고리의 다른 글

13일차 - Java강의(예외, 제네릭)  (0) 2024.07.31
11일차 - Java강의(계산기 실습, 클래스화, 추상화)  (0) 2024.07.29
9일차 - Java강의(클래스, 필드, 생성자, 멤버, this)  (0) 2024.07.25
8일차 - Java강의(객체지향 ☆)  (0) 2024.07.24
enhanced switch()문  (0) 2024.07.24
  1. ◇ 제어자
  2. ◇ package와 import
  3. ◇ 상속
  4. ◇ Overriding(오버라이딩)
  5. ◇ super
'Java & Spring/Java' 카테고리의 다른 글
  • 13일차 - Java강의(예외, 제네릭)
  • 11일차 - Java강의(계산기 실습, 클래스화, 추상화)
  • 9일차 - Java강의(클래스, 필드, 생성자, 멤버, this)
  • 8일차 - Java강의(객체지향 ☆)
DJ.Kang
DJ.Kang
백엔드 개발 기록 블로그
  • DJ.Kang
    DJ Hello World
    DJ.Kang
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 이론공부
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • DB
      • AWS
      • CI-CD
      • 웹
      • git & github
      • 구인공고분석
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    java enhance switch
    Java this
    java 메서드
    데이터 타입
    자료구조
    java two-pointer
    java super
    java 멤버
    프로그래머스 java 기초 트레이닝
    java 세수의합
    프로그래머스 java 기초트레이닝
    개발로드맵
    Java 생성자
    java 에라토스테네스의 체
    데이터 크기
    java기초
    java 유클리드 호제법
    java arrays.copyofrnage()
    java
    java 제어자
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
DJ.Kang
10일차 - Java강의(제어자, package, import, 상속, this, super)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.