본문 바로가기

개발/Java53

[3주차] Java 중급 - 다운 캐스팅과 instanceof 다운 캐스팅 (downcasting) Customer vc = new VIPCustomer(); // 묵시적 VIPCustomer vCustomer = (VIPCustomer) vc; // 명시적 업 캐스팅된 클래스를 다시 원래의 타입으로 형 변환 (원래의 인스턴스로 돌아오는 것) 하위 클래스로의 형 변환은 명시적으로 해야 함 instanceof를 이용하여 인스턴스의 형 체크 원래 인스턴스의 형이 맞는지 여부를 체크하는 키워드 맞으면 true 아니면 false 반환 instanceof 키워드의 역할은 원래 해당 인스턴스가 검사하려는 인스턴스의 타입이었는가를 확인 예) A instanceof B : A가 B타입의 인스턴스였는가? AnimalTest.java public void testDownCasting.. 2023. 6. 25.
[3주차] Java 중급 - 상속은 언제 사용할까 코드의 재사용과 관련해서 2가지 방법을 사용할 수 있다. IS-A 관계 (is a relationship : inheritance) 일반적인 (general) 개념과 구체적인 (specific) 개념과의 관계 상위 클래스 : 하위 클래스보다 일반적인 개념 (예 : Employee) 하위 클래스 : 상위 클래스보다 구체적인 개념들이 더해짐 (예 : Engineer, Manager … ) 상속은 클래스간의 결합도가 높은 설계 상위 클래스의 수정이 많은 하위 클래스에 영향을 미칠 수 있음 계층 구조가 복잡하거나 hierarchy가 높으면 좋지 않음 (상속의 depth가 깊은 경우) HAS-A 관계 (composition) 클래스가 다른 클래스를 포함하는 관계 (변수로 선언) 코드 재사용의 가장 일반적인 방법 .. 2023. 6. 25.
[3주차] Java 중급 - 다형성과 다형성을 사용하는 이유 다형성(polymorphism)이란? 하나의 코드가 여러 자료형으로 구현되어 실행되는 것 같은 코드에서 여러 다른 실행 결과가 나옴 정보은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나임 다형성을 잘 활용하면 유연하고 확장성있고, 유지보수가 편리한 프로그램을 만들 수 있음 다형성의 예 package ch03; import java.util.ArrayList; class Animal{ public void move() { System.out.println("동물이 움직입니다."); } public void eating() { } } class Human extends Animal{ public void move() { System.out.println("사람이 두발로 걷습니다."); } p.. 2023. 6. 25.
[3주차] Java 중급 - 메서드 재정의와 가상 메서드 원리 메서드는 어떻게 호출되고 실행 되는가? 메서드(함수)의 이름은 주소값을 나타냄 (그럼에도 overloading이 가능한 이유는 dummy parameter를 붙여서 이름을 조금씩 변형시켜서 가능하게 한다. 사실상 같은 이름의 함수는 없음) 메서드는 명령어의 set이고 프로그램이 로드되면 메서드 영역(코드 영역)에 명령어 set이 위치 해당 메서드가 호출되면 명령어 set이 있는 주소를 찾아 명령어가 실행됨 (함수가 호출되는 것은 instruction set 부분이 호출되는 것임) 이때 메서드에서 사용되는 변수들은 스택 메모리에 위치 하게됨 따라서 다른 인스턴스라도 같은 메서드의 코드는 같으므로 같은 메서드가 호출됨 인스턴스가 생성되면 변수는 힙 메모리에 따로 생성되지만, 메서드 명령어 set은 처음 한번.. 2023. 6. 25.