본문 바로가기
728x90
반응형
SMALL

자바46

[JAVA] 자바 - 추상 클래스의 응용 (템플릿 메서드 패턴) 템플릿 메서드 추상 메서드나 구현된 메서드를 활용하여 코드의 흐름(시나리오)을 정의하는 메서드입니다. final로 선언하여 하위 클래스에서 재정의 할 수 없게 합니다. (흐름을 가지고 있기 때문에) 프레임워크에서 많이 사용되는 설계 패턴 추상 클래스로 선언된 상위 클래스에서 템플릿 메서드를 활용하여 전체적인 흐름을 정의하고 하위 클래스에서 다르게 구현되어야 하는 부분은 추상 메서드로 선언하여 하위 클래스에서 구현하도록 합니다. final 키워드가 변수로 쓰이면 상수, 메서드에 쓰이면 재정의를 못하는 메서드, 클래스에 쓰이면 상속이 안되는 클래스 템플릿 메서드 예제 Car.java public abstract class Car { public abstract void drive(); public abstr.. 2021. 12. 1.
[JAVA] 자바 - 추상 클래스란? 구현 코드 없이 메서드의 선언만 있는 추상 메서드(abstract method)를 포함한 클래스입니다. 메서드 선언(declaration): 반환 타입, 메서드 이름, 매개변수로 구성합니다. 메서드 정의(definition): 메서드 구현과 동일한 의미 구현부를 가집니다. 예시 int add(int x, int y); // 선언 int add(int x, int y){} // 구현부 o, 추상메서드 x abstract 예약어를 사용합니다. 추상 클래스는 new할 수 없습니다. (인스턴스화 할 수 없습니다.) 추상 클래스 구현하기 메서드에 구현 코드가 없으면 abstract로 선언합니다. abstract로 선언된 메서드를 가진 클래스는 abstract로 선언합니다. 모든 메서드가 구현된 클래스라도 abst.. 2021. 12. 1.
[JAVA] 자바 - 다운 캐스팅과 instanceof 다운 캐스팅 업 캐스팅된 클래스를 다시 원래의 타입으로 형 변환입니다. 하위 클래스로의 형 변환은 명시적으로 해야 합니다. Customer vc = new VIPCustomer(); // 묵시적 VIPCustomer vCustomer = (VIPCustomer)vc; // 명시적 instanceof를 이용하여 인스턴스의 형 체크 원래의 인스턴스의 형이 맞는지 여부를 체크하는 키워드입니다. 맞으면 true 아니면 false를 반환합니다. AnimalTest.java import java.util.ArrayList; class Animal { // 공통적으로 사용하는 메서드는 상위 클래스에 선언합니다. public void move() { System.out.println("동물이 움직입니다."); } } .. 2021. 11. 30.
[JAVA] 자바 - IS-A 관계, HSA-A 관계 IS-A관계(is a realationship : inheritance) 일반적인 개념과 구체적인 개념과의 관계 상위 클래스 : 하위 클래스보다 일반적인 개념(예 : Employee) 하위 클래스 : 상위 클래스보다 더 구체적인 개념(예 : Engineer, Manager, ...) 상속은 클래스 간의 결합도가 높은 설계입니다. 상위 클래스의 수정이 많은 하위 클래스에 영향을 미칠 수 있습니다. 계층구조가 복잡하거나 계급(hierarchy)이 높으면 좋지 않습니다. HSA-A관계(composition) 클래스가 다른 클래스를 포함하는 관계(변수로 선언)입니다. 코드 재사용의 가장 일반적인 방법입니다. Student가 Subject를 포함하는 예제와 같은 경우입니다. Library를 구현할 때 ArrayL.. 2021. 11. 30.
[JAVA] 자바 - 다형성을 활용한 멤버쉽 프로그램 확장 일반 고객과 VIP 고객 중간 멤버쉽 만들기 고객이 늘어 일반 고객보다는 많이 구매하고 VIP보다는 적게 구매하는 고객에게도 혜택을 주는 경우 GOLD 고객 등급을 만들고 혜택은 다음과 같습니다. 1. 제품을 살때는 10%를 할인해줍니다. 2. 보너스 포인트는 2%를 적립해줍니다. GoldCustomer.java public class GoldCustomer extends Customer { double salesRatio; public GoldCustomer(int customerID, String customerName) { super(customerID, customerName); salesRatio = 0.1; bonusRatio = 0.02; customerGrade = "Gold"; } @Ov.. 2021. 11. 30.
[JAVA] 자바 - 다형성과 다형성을 사용하는 이유 다형성이란? 하나의 코드가 여러 자료형으로 구현되어 실행되는 것입니다. 같은 코드에서 여러 다른 실행 결과가 나옵니다. 정보은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나입니다. 다형성을 잘 활용하면 유연하고 확장성 있고, 유지보수가 편리한 프로그램을 만들 수 있습니다. 다형성의 예 class Animal { // 공통적으로 사용하는 메서드는 상위 클래스에 선언합니다. public void move() { System.out.println("동물이 움직입니다."); } } class Human extends Animal { @Override public void move() { System.out.println("사람이 걷습니다."); } public void readBook() { S.. 2021. 11. 30.
[JAVA] 자바 - 상속에서 클래스 생성과정과 형 변환 하위 클래스가 생성되는 과정 하위 클래스를 생성하면 상위 클래스가 먼저 생성됩니다. new VIPCustomer()를 호출하면 Customer()가 먼저 호출됩니다. 클래스가 상속받은 경우 하위 클래스의 생성자에서는 반드시 상위 클래스의 생성자를 호출합니다. Customer.java public Customer() { customerGrade = "SILVER"; bonusRatio = 0.01; System.out.println("Customer() 생성자 호출"); } VIPCustomer.java public VIPCustomer() { bonusRatio = 0.05; salesRatio = 0.1; customerGrade = "VIP"; System.out.println("VIPCustomer.. 2021. 11. 30.
[JAVA] 자바 - 상속을 활용한 멤버쉽 클래스 구현하기 멤버쉽 시나리오 회사에서 고객 정보를 활용한 맞춤 서비스를 하기 위해 일반 고객과 이보다 충성도가 높은 우수고객에 따른 서비스를 제공하고자 합니다. 물품을 구매할 때 적용되는 할인율과 적립되는 보너스 포인트의 비율이 다릅니다. 여러 멤버쉽에 대한 각각 다양한 서비스를 제공할 수 있습니다. 멤버쉽에 대한 구현을 클래스 상속을 활용하여 구현합니다. 일반 고객 클래스 구현 고객의 속성 : 고객 아이디, 이름, 등급, 보너스 포인트, 보너스 포인트 적립비율 일반 고객의 경우 물품 구매시 1%의 보너스 포인트 적립 public class Customer { private int customerID; private String customerName; private String customerGrade; int b.. 2021. 11. 30.
[JAVA] 자바 - 객체 간의 상속의 의미 클래스 상속 새로운 클래스를 정의할 때 이미 구현된 클래스를 상속받아서 속성이나 기능을 확장하여 클래스를 구현합니다. 이미 구현된 클래스보다 더 구체적인 기능을 가진 클래스를 구현해야 할 때 기존 클래스를 상속합니다. 상속하는 클래스 : 상위 클래스, parent class, base class, super class 상속받는 클래스 : 하위 클래스, child class, derived class, sub class 상속의 문법 class B extends A { ... } extends 키워드 뒤에는 단 하나의 클래스만 올 수 있습니다. C++ 같은 경우는 여러 개가 올 수 있는데 이러면 모호성이 발생할 수 있기 때문에 자바는 단일 상속(single inheritance)만을 지원합니다. 상속을 구현.. 2021. 11. 27.
728x90
반응형
LIST