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
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 이론공부 N
        • 정보처리기사 N
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • DB
      • AWS
      • CI-CD
      • 웹
      • git & github
      • 구인공고분석
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • 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 + /
⇧ + /

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