CHANGEL
SOLID BASICS
CHANGEL

공지사항

  • DEV.CHANGEL PROFILE
  • SOLID BASIC (289)
    • 공부 STUDY (115)
      • JAVA (57)
      • C | C++ (34)
      • CS (11)
      • MySQL (2)
      • ALGORITHM (1)
      • HTML (2)
      • CSS (2)
      • JS (2)
      • CODING (0)
      • MINI PROJECT (3)
    • 스프링 SPRING (21)
      • [SPRING] 김영한 스프링 입문 (11)
      • [SPRING] 남궁성 스프링의 정석 (1)
      • [SPRING] 스프링 핵심원리 (9)
    • 전공 수업 CS (65)
      • Computer Network (13)
      • algorithms (21)
      • Computer Architecture (7)
      • Software Engineering (4)
      • Data Structure (2)
      • DataBase (1)
      • Digital Engineering (14)
      • Discrete Mathematics (3)
      • Introduction to programming (0)
      • Mobile Software (0)
      • Intelligence and Informatio.. (0)
    • 대외활동 (35)
      • 신한은행 대학생 홍보대사 34기 (8)
      • SKT T프렌즈 5기 (13)
      • SK DEVOTION YOUNG 1기 (9)
      • 성균관 대학교 공학교육혁신센터 수강 (3)
      • 수상 기록 (1)
    • 솝트 33기 안드로이드 (7)
      • [솝트 33기] 회고록 (0)
      • [솝트 33기] 안드로이드 왕초보 스터디 (2)
      • [솝트 33기] 코틀린 스터디 (0)
      • [솝트 33기] Git을 털어보자 깃털 스터디 (4)
    • 멋쟁이사자처럼 11기 (6)
      • 멋사 회고록 (4)
      • 백엔드 세션 (1)
      • 기획 세션 (1)
      • 연합해커톤 운영단 (기획팀) (0)
    • 백준 BAEKJOON (16)
    • 독서 BOOK (10)
    • 자격증 CERTIFICATE (1)
    • 준비 서류 및 회고록 MEMOIR (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

최근 댓글

인기 글

CHANGEL

SOLID BASICS

[JAVA] 가상 메서드(virtual method)
공부 STUDY/JAVA

[JAVA] 가상 메서드(virtual method)

2023. 1. 13. 11:20

상속에서 상위 클래스와 하위 클래스에 같은 이름의 메서드가 존재할 때 호출되는 메서드는 인스턴스에 따라 결정된다.

선언한 클래스형이 아닌 생성된 인스턴스의 메서드를 호출하는 것.

인스턴스의 메서드가 호출되는 기술을 '가상 메서드(virtual method)'라고 한다.

 

가상메서드

자바의 클래스는 필드(멤버변수)와 메서드(멤버 함수)로 이루어져 있다.

클래스를 생성하여 인스턴스가 만들어지면 필드(멤버 변수)는 힙 메모리에 위치한다.

변수가 사용하는 메모리와 메서드가 사용하는 메모리는 다르다.

변수는 인스턴스가 생성될 때마다 새로 생성되지만, 메서드는 실행해야 할 명령 집합이기 때문에 인스턴스가 달라도 같은 로직을 수행해야 한다.

같은 객체의 인스턴스를 여러 개 생성한다고 해서 메소드도 여러개 생성되지 않는다.

public class TestA {
	
	
	//필드(멤버 변수)를 정의
	int num; 
			
	//메서드(멤버 함수)를 정의
	void aaa() {
		System.out.println("aaa() 출력합니다.");
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		TestA a1 = new TestA();
		a1.aaa();
		
		TestA a2 = new TestA();
		a2.aaa();
		
	}

}

당연히 같은 결과 값을 가져온다. 이를 그림으로 도식화 해보면 메서드는 메모리에 따로 올라가는 것이 아니기 때문에 같은 메서드를 불러오는 것을 확인 할 수 있다.

| 재정의한 메서드를 불러우는 경우

/*[실습] 클래스 형에 기반하여 지불금액을 계산하시오.*/
package inheritanceTest;

public class OverridingTest3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		int price = 10000;
		
		//Customer 인스턴스 생성
		Customer customerA = new Customer(10010,"라이언");
		System.out.println(customerA.getCustomerName()+"님이 지불해야하는 금액은"+
				customerA.calcPrice(price)+"원 입니다.");
		
		//VIPcustomer 인스턴스 생성
		VIPcustomer customerB = new VIPcustomer(10020,"무지",12345);
		System.out.println(customerB.getCustomerName()+"님이 지불해야하는 금액은"+
				customerB.calcPrice(price)+"원 입니다.");
		
		//VIPcustomer 인스턴스를 Customer 형으로 변환한다 -> 업캐스팅
		Customer vc = new VIPcustomer(10030,"나몰라",67890);
		System.out.println(vc.getCustomerName()+"님이 지불해야하는 금액은"+vc.calcPrice(price)+"입니다.");
		
	}

}

 

'공부 STUDY > JAVA' 카테고리의 다른 글

[JAVA] 인터페이스 (interface)  (0) 2023.01.15
[JAVA] 예외처리 (Exception) -(1)  (0) 2023.01.14
[JAVA] 인터페이스(interface)  (0) 2023.01.10
[JAVA] 다운캐스팅 (DownCasting)  (0) 2023.01.09
[JAVA] ArrayList 사용법  (0) 2023.01.09
    '공부 STUDY/JAVA' 카테고리의 다른 글
    • [JAVA] 인터페이스 (interface)
    • [JAVA] 예외처리 (Exception) -(1)
    • [JAVA] 인터페이스(interface)
    • [JAVA] 다운캐스팅 (DownCasting)
    CHANGEL
    CHANGEL
    NOT GIVING UP | SOLID BASICS

    티스토리툴바