CodeGym/Java Blog/무작위의/클래스 간의 관계. 상속, 구성 및 집계
John Squirrels
레벨 41
San Francisco

클래스 간의 관계. 상속, 구성 및 집계

무작위의 그룹에 게시되었습니다
회원
안녕! 오늘 우리는 객체 지향 프로그래밍(OOP)의 한 가지 원칙인 상속에 대해 자세히 살펴보겠습니다. 또한 클래스 간의 다른 유형의 관계인 구성과 집계에 대해서도 알아봅니다. 클래스 간의 관계.  상속, 구성 및 집계 - 1이 주제는 어렵지 않을 것입니다. 이전 수업에서 이미 상속과 상속의 예를 여러 번 접했습니다. 오늘의 주요 내용은 지식을 강화하고 상속 메커니즘을 자세히 살펴보고 다시 한 번 몇 가지 예를 살펴보는 것입니다. :) 글쎄, 가자!

Java의 상속과 장점

확실히 기억하고 있듯이 상속은 기존 클래스(부모 클래스)를 기반으로 새 클래스를 설명할 수 있는 메커니즘입니다. 그렇게 함으로써 새 클래스는 부모 클래스의 속성과 기능을 차용합니다. 이전 수업에서 주어진 상속의 예를 생각해 봅시다.
public class Car {

   private String model;
   private int maxSpeed;
   private int yearOfManufacture;

   public Car(String model, int maxSpeed, int yearOfManufacture) {
       this.model = model;
       this.maxSpeed = maxSpeed;
       this.yearOfManufacture = yearOfManufacture;
   }


public void gas() {
       // Gas
   }

   	public void brake() {
       // Brake
   }
}


public class Truck extends Car {

   public Truck(String model, int maxSpeed, int yearOfManufacture) {
       super(model, maxSpeed, yearOfManufacture);
   }
}



public class Sedan extends Car {
   public Sedan(String model, int maxSpeed, int yearOfManufacture) {
       super(model, maxSpeed, yearOfManufacture);
   }
}
다양한 유형의 자동차 작업과 관련된 특정 프로그램이 있습니다. 자동차 애호가가 아니더라도 세상에는 수많은 종류의 자동차가 있다는 것을 알고 계실 것입니다. :) 따라서 우리는 자동차의 공통 속성을 라는 공통 부모 클래스로 분리할 것입니다 Car. 그렇다면 유형에 관계없이 모든 자동차에 공통되는 사항은 무엇입니까? 모든 자동차에는 제조 연도, 모델명 및 최고 속도가 있습니다. model이러한 속성을 , maxSpeed및 필드 에 입력합니다 yearOfManufacture. 행동에 관해서는 모든 자동차가 가속 및 감속할 수 있습니다. :) 우리는 이 동작을 및에서 정의합니다 gas().brake()행동 양식. 이것은 우리에게 어떤 이점을 제공합니까? 우선 코드의 양이 줄어듭니다. 물론 부모 클래스 없이도 할 수 있습니다. 그러나 각 자동차는 가속 및 감속할 수 있어야 하므로 , , 및 클래스와 다른 모든 자동차 클래스 에서 gas()brake()메서드를 만들어야 합니다 . 얼마나 많은 추가 코드를 작성해야 하는지 상상해 보십시오. 그리고 , 및 필드 를 잊지 마십시오 . 부모 클래스를 제거하면 각 자동차 클래스에서 만들어야 합니다! TruckSedanF1CarSportsCarmodelmaxSpeedyearOfManufacture클래스 간의 관계.  상속, 구성 및 집계 - 2수십 개의 자동차 클래스가 있으면 중복 코드의 양이 정말 심각해집니다. 공통 필드 및 메소드("상태" 및 "동작"이라고도 함)를 상위 클래스로 이동하면 많은 시간과 공간을 절약할 수 있습니다. 일부 유형에 다른 자동차 유형에는 없는 고유한 속성이나 메서드가 있는 경우 별거 아닙니다. 다른 사람과는 별도로 자손 클래스에서 항상 생성할 수 있습니다.
public class F1Car extends Car {

   public void pitStop() {

       // Only race cars make pit stops
   }

   public static void main(String[] args) {

       F1Car formula1Car = new F1Car();
       formula1Car.gas();
       formula1Car.pitStop();
       formula1Car.brake();
   }
}
Formula One 경주용 자동차를 예로 들어 보겠습니다. 그들의 "친척"과는 달리, 그들은 독특한 행동을 가지고 있습니다. 그들은 때때로 피트 스탑을 합니다. 이것은 우리를 괴롭히지 않습니다. 우리는 이미 상위 클래스의 일반적인 동작을 설명했으며 Car하위 클래스의 특정 동작을 해당 클래스에 추가할 수 있습니다. 클래스 간의 관계.  상속, 구성 및 집계 - 3필드도 마찬가지입니다. 자식 클래스에 고유한 속성이 있는 경우 자식 클래스 내에서 이러한 필드를 침착하게 선언하고 걱정하지 마십시오. :) 코드를 재사용할 수 있는 능력은 상속의 주요 이점입니다. 프로그래머에게는 추가 코드를 작성하지 않는 것이 매우 중요합니다. 당신은 당신의 일에서 이것을 반복적으로 보게 될 것입니다. 다른 중요한 사항을 기억하십시오. Java에는 다중 상속이 없습니다.. 각 클래스는 하나의 클래스만 상속합니다. 이에 대한 이유에 대해서는 다음 강의에서 더 자세히 이야기하겠습니다. 지금은 그냥 기억하세요. 그건 그렇고, 이것은 Java를 다른 OOP 언어와 다르게 만듭니다. 예를 들어 C++는 다중 상속을 지원합니다. 상속으로 모든 것이 다소 명확합니다. 계속합시다.

구성 및 집계

클래스와 개체는 함께 연결할 수 있습니다. 상속은 "is-a" 관계를 설명합니다. 사자는 동물입니다. 이러한 관계는 Animal부모 클래스와 Lion자식 클래스인 상속을 사용하여 쉽게 표현됩니다. 그러나 모든 관계가 이런 식으로 설명되는 것은 아닙니다. 예를 들어 키보드는 확실히 컴퓨터와 관련이 있지만 컴퓨터가 아닙니다 . 손은 어떻게든 사람과 관련이 있지만 사람이 아닙니다. 이 경우 "is-a"가 아니라 "has-a"라는 또 다른 유형의 관계가 있습니다. 손은 사람이 아니라 사람의 일부입니다. 키보드는 컴퓨터가 아니라 컴퓨터의 일부입니다. 구성집계를 사용하여 코드에서 has-a 관계를 설명할 수 있습니다.. 차이점은 관계의 "엄격성"에 있습니다. 간단한 예를 들어 보겠습니다. 수업이 있습니다 Car. 모든 자동차에는 엔진이 있습니다. 또한 모든 차량에는 승객이 있습니다. Engine engine및 필드 의 근본적인 차이점은 무엇입니까 Passenger[] passengers? 동승자가 차에 앉아 있다고 해서 동승자 가 차 안에 있지 않다는 A의미는 아닙니다 . 자동차는 여러 승객에 해당할 수 있습니다. 게다가 모든 승객이 차에서 내리더라도 차는 여전히 원활하게 작동할 것입니다. 클래스와 배열 간의 관계는 덜 엄격합니다. 집계 라고 합니다 . 집계의 또 다른 좋은 예를 제공합니다. 클래스 와BCCarPassenger[] passengersStudentStudentGroup수업. 학생은 물리학 클럽, 스타워즈 팬 클럽 및/또는 학생 코미디 클럽과 같은 여러 학생 조직에 가입할 수 있습니다. 구성은 더 엄격한 종류의 관계입니다. 구성을 사용할 때 개체는 일부 개체의 일부이며 동일한 유형의 다른 개체에 속할 수 없습니다. 가장 간단한 예는 자동차 엔진입니다. 엔진은 자동차의 일부이며 다른 자동차의 일부가 될 수 없습니다. 보시다시피 이들의 관계는 Carand 사이의 관계보다 훨씬 더 엄격합니다 Passengers. 클래스 간의 관계.  상속, 구성 및 집계 - 4
코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다