분류 전체보기474 추상 클래스 응용 - 템플릿 메서드 패턴 템플릿 메서드 추상 메서드나 구현 된 메서드를 활용하여 코드의 흐름(시나리오)를 정의하는 메서드 final로 선언하여 하위 클래스에서 재정의 할 수 없게 함 프레임워크에서 많이 사용되는 설계 패턴 추상 클래스로 선언된 상위 클래스에서 템플릿 메서드를 활용하여 전체적인 흐름을 정의하고 하위 클래스에서 다르게 구현되어야 하는 부분은 추상 메서드로 선언하여 하위 클래스에서 구현 하도록 함 final 예약어 final 변수: 값이 변경될 수 없는 상수 (public static final double PI = 3.14;) final 메서드: 하위 클래스에서 재정의 할 수 없는 메서드 final 클래스: 상속할 수 없는 클래스 package ch31; // 추상 클래스 생성 public abstract class.. 2021. 4. 18. 추상 클래스(abstract class) 구현 추상 클래스 구현 코드 없이 메서드의 선언만 있는 추상 메서드를 포함한 클래스 메서드 선언(declaration): 반환 타입, 메서드 이름, 매개변수로 구성 메서드 정의(definition): 메서드 구현과 동일한 의미 구현부를 가짐 abstract 예약어를 사용 추상 클래스는 new 할 수 없음(인스턴스화 할 수 없음) 추상 클래스 구현하기 메서드에 구현 코드가 없으면 abstract로 선언 abstract로 선언된 메서드를 가진 클래스는 abstract로 선언 모든 메서드가 구현 된 클래스라도 abstract로 선언되면 추상 클래스로 인스턴스화 할 수 없음 추상 클래스의 추상 메서드는 하위 클래스가 상속 하여 구현 package ch30; // 추상 클래스 생성 (abstract) public ab.. 2021. 4. 18. 다운 캐스팅과 instanceof 다운 캐스팅(downcasting) 업캐스팅된 클래스를 다시 원래의 타입으로 형 변환 하위 클래스로의 형 변환은 명시적으로 해야 함 Customer vc = new VIPCustomer(); // 묵시적 VIPCustomer vCustomer = (VIPCustomer)vc; // 명시적 instanceof를 이용하여 인스턴스의 형 체크 원래 인스턴스의 형이 맞는지 여부를 체크하는 키워드 맞으면 true, 아니면 false를 반환함 package ch29; import java.util.ArrayList; import java.util.Iterator; class Animal { public void move() { System.out.println("동물이 움직입니다."); } public void e.. 2021. 4. 18. 상속을 사용하면 좋은 경우 IS - A 관계 (is a relationship : inheritance) 일반적인(general) 개념과 구체적인(specific) 개념과의 관계 상위 클래스: 하위 클래스보다 일반적인 개념 (예: Employee) 하위 클래스: 상위 클래스보다 구체적인 개념들이 더해짐 (예: Engineer, Manager....) 상속은 클래스간의 결합도가 높은 설계 상위 클래스의 수정이 많은 하위 클래스에 영향을 미칠 수 있음 계층구조가 복잡하거나 hierarchy가 높으면 좋지 않음 HAS - A 관계 (composition) 클래스가 다른 클래스를 포함하는 관계(변수로 선언) 코드 재사용의 가장 일반적인 방법 Student가 Subject를 포함하는 Library를 구현할 때 ArrayList 생성하여 사.. 2021. 4. 18. 다형성과 다형성을 사용하는 이유 다형성 하나의 코드가 여러 자료형으로 구현되어 실행되는 것 같은 코드에서 여러 다른 실행 결과가 나옴 정보은닉, 상속과 더불어 객체지향 프로그램의 가장 큰 특징 중 하나임 다형성을 잘 활용하면 유연하고 확장성있고, 유지보수가 편리한 프로그램을 만들 수 있음 오버라이딩을 통해서 사용 가능 package ch28; import java.util.ArrayList; import java.util.Iterator; class Animal { public void move() { System.out.println("동물이 움직입니다."); } public void eating() { System.out.println("밥을 먹는다"); } } class Human extends Animal { @Override .. 2021. 4. 18. 메서드 재정의, 가상 메서드 원리 메서드 호출 원리 메서드(함수)의 이름은 주소값을 나타냄 메서드는 명령어의 set이고 프로그램이 로드되면 메서드 영역(코드 영역)에 명령어 set이 위치 해당 메서드가 호출 되면 명령어 set이 있는 주소를 찾아 명령어가 실행됨 이때 메서드에서 사용하는 변수들은 스택 메모리에 위치 하게됨 따라서 다른 인스턴스라도 같은 메서드의 코드는 같으므로 같은 메서드가 호출됨 인스턴스가 생성되면 변수는 힙 메모리에 따로 생성되지만, 메서드 명령어 set은 처음 한번만 로드 됨 가상 메서드의 원리 가상 메서드 테이블에서 해당 메서드에 대한 address를 가지고 있음 재정의된 경우는 재정의 된 메서드의 주소를 가리킴 2021. 4. 18. 이전 1 ··· 67 68 69 70 71 72 73 ··· 79 다음