JavaRush /Java Blog /Random-KO /클래스 간의 관계. 상속, 구성 및 집계

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

Random-KO 그룹에 게시되었습니다
안녕하세요! 오늘 우리는 객체지향 프로그래밍(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(), 클래스 , 클래스 및 기타 모든 자동차 클래스에서 메서드를 만들어야 합니다 . 이 경우 얼마나 많은 추가 코드를 작성할지 상상해보세요. model, maxSpeed ​​​​및 yearOfManufacture 필드를 잊지 마세요. 상위 클래스를 버리면 각 기계 클래스에서 해당 필드를 생성하게 됩니다! 수십 개의 기계 클래스가 있으면 반복적인 코드의 양이 정말 심각해집니다. 공통 필드와 메서드("상태" 및 "동작"이라고도 함)를 상위 클래스로 이동하면 많은 시간과 공간을 절약할 수 있습니다. 특정 유형에 해당 유형에만 고유하고 다른 유형의 기계에는 없는 속성이나 메소드가 있는 경우에는 문제가 되지 않습니다. 다른 모든 클래스와 별도로 하위 클래스에서 항상 생성될 수 있습니다. TruckSedanF1CarSportcar클래스 간의 관계.  상속, 구성 및 집계 - 2
public class F1Car extends Car {

   public void pitStop() {

       //...only racing cars make pit stops
   }

   public static void main(String[] args) {

       F1Car formula1Car = new F1Car();
       formula1Car.gas();
       formula1Car.pitStop();
       formula1Car.brake();
   }
}
Formula 1 경주용 자동차의 경우를 살펴보겠습니다. 그들은 "친척"과는 달리 독특한 행동을 가지고 있습니다. 때때로 그들은 피트 스톱을 만듭니다. 이것은 우리를 괴롭히지 않습니다. 우리는 이미 부모 클래스의 일반적인 동작을 설명했으며 Car클래스 내부에 자식 클래스의 특정 동작을 추가할 수 있습니다. 클래스 간의 관계.  상속, 구성 및 집계 - 3 이는 필드에도 적용됩니다. 하위 클래스에 고유한 속성이 있는 경우 걱정하지 않고 해당 클래스 내부에 이러한 필드를 차분하게 선언할 수 있습니다. 코드를 재사용할 수 있는 능력은 상속의 주요 이점입니다. 프로그래머에게는 불필요한 양의 코드를 작성하지 않는 것이 매우 중요합니다. 당신은 당신의 작업에서 이것을 두 번 이상 접하게 될 것입니다. 한 가지 더 중요한 점을 기억하세요. Java에는 다중 상속이 없습니다. 각 클래스는 하나의 클래스에서만 상속됩니다. 이에 대한 이유에 대해서는 향후 강의에서 더 자세히 설명하겠지만 지금은 기억해 두시기 바랍니다. 그런데 이는 Java를 다른 OOP 언어와 구별합니다. 예를 들어 C++에는 다중 상속이 있습니다. 상속을 사용하면 모든 것이 다소 명확해집니다. 계속 진행하겠습니다.

구성 및 집계

클래스와 객체는 서로 관련될 수 있습니다. 상속은 "is"(또는 영어로 "IS A") 관계를 설명합니다. 레오는 동물이다. Animal이 관계는 클래스가 부모가 되고 클래스가 Lion자식이 되는 상속을 사용하여 쉽게 표현할 수 있습니다 . 그러나 세상의 모든 관계가 이런 식으로 설명되는 것은 아닙니다. 예를 들어, 키보드는 어떤 방식으로든 확실히 컴퓨터에 연결되어 있지만 컴퓨터는 아닙니다 . 손은 사람과 어떻게든 연결되어 있지만 사람은 아닙니다. 이러한 경우에는 "is"가 아니라 "is part"("HAS A")라는 다른 유형의 관계를 기반으로 합니다. 손은 사람이 아니지만 사람의 일부입니다. 키보드는 컴퓨터가 아니지만 컴퓨터의 일부입니다. HAS A 관계는 구성집계 메커니즘을 사용하여 코드에서 설명할 수 있습니다 . 이들 사이의 차이점은 이러한 연결의 "엄격함"에 있습니다. 간단한 예를 들어 보겠습니다. 우리에게는 Car자동차가 있습니다. 모든 자동차에는 엔진이 있습니다. 또한 모든 차량에는 승객이 탑승합니다. Engine engine필드 와 의 근본적인 차이점은 무엇입니까 Passenger [] passengers? 자동차 안에 승객이 있다고 해서 승객이 탑승 А할 수 없다는 의미는 아닙니다 . 한 대의 차량에 여러 명의 승객이 탑승할 수 있습니다. 또한 모든 승객이 차량에서 하차하더라도 계속해서 조용하게 작동합니다. 클래스 와 승객 질량 간의 관계는 덜 엄격합니다. 이를 집계 라고 합니다 . 이 주제에 대한 좋은 기사가 있습니다: Relationships between class (objects) . 이는 집계의 또 다른 좋은 예를 제공합니다. 학생을 나타내는 클래스 와 클래스 (학생 그룹)가 있다고 가정해 보겠습니다. 학생은 물리학 클럽, 스타워즈 학생 팬 클럽 또는 KVN 팀의 회원이 될 수 있습니다. 작문은 보다 엄격한 의사소통 유형입니다. 컴포지션을 사용할 때 객체는 일부 객체의 일부일 뿐만 아니라 동일한 유형의 다른 객체에 속할 수도 없습니다. 가장 간단한 예는 자동차 엔진입니다. 엔진은 자동차의 일부이지만 다른 자동차의 일부가 될 수는 없습니다. 보시다시피, 이들의 연결은 및 의 연결보다 훨씬 더 엄격합니다 . BCCarPassenger [] passengersStudentStudentsGroupCarPassengers클래스 간의 관계.  상속, 구성 및 집계 - 4
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION