cbw1030
기록하는 공간
cbw1030
전체 방문자
오늘
어제
  • 전체보기 (101)
    • Programming (99)
      • Java (19)
      • Servlet (10)
      • Spring Framework (13)
      • Javascript (22)
      • AWS (2)
      • 네트워크 (8)
      • 데이터베이스 (13)
      • 리눅스 (3)
      • 블록체인 (7)
      • 용어 정리 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 차원축소
  • 데이터 사이언스
  • 머신러닝
  • 브라이틱스
  • 인공지능
  • Brightics Studio
  • javascript
  • 브라이틱스 튜토리얼
  • 데이터분석
  • Brightics
  • 크롤링
  • 삼성SDS 브라이틱스
  • web
  • 삼성SDS
  • beautifulsoup
  • 브라이틱스 스튜디오
  • Brightics AI
  • 생활코딩
  • react
  • 브라이틱스 스튜디오 사용법

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
cbw1030

기록하는 공간

[Java] 메서드 정적 바인딩과 동적 바인딩
Programming/Java

[Java] 메서드 정적 바인딩과 동적 바인딩

2020. 7. 5. 23:42
반응형

다음과 같은 소스코드가 있다고 가정하자.

class Exam {
    public void total() {
        return kor + eng + math;
    }
}

class NewExam extends Exam {
    public void total() {
        return super.total() + com;
    }

    public static void print(Exam exam) {
        int total = exam.total();
        System.out.println(total);
    }

    public static void main(String args[]) {
        print(new Exam(1, 1, 1));
        print(new NewExam(1, 1, 1, 1));
    }
}

print 메서드에서 exam.total을 호출하면 Exam, NewExam 클래스 중 어떤 클래스의 total 메서드가 호출될까?

print 메서드의 매개변수에 어떤 클래스가 전달되냐에 따라 달라진다.

Exam 객체가 전달되면 Exam의 total 메서드가 실행되고 NewExam 객체가 전달되면 NewExam의 total 메서드가 실행된다. 만약 NewExam 클래스에서 total 메서드를 오버라이드 하지 않았다면 Exam 클래스의 total 메서드가 실행될 것이다.

 

이렇게 메서드의 매개변수에 따라(객체가 무엇이냐에 따라) 호출되는 메서드가 달라지는 것을 메서드 동적 바인딩이라고 한다.

 

C++의 경우는 컴파일러가 exam.total() 부분을 컴파일 시점에 결정을 하여 참조 형식에 의한 결정(정적 바인딩)을 해버린다. 정적 바인딩은 컴파일을 하고 난 이후에는 절대 바뀌지 않는다.

 

하지만, 자바는 컴파일러가 이러한 행위를 결정하지 않는 특징이 있다. 자바는 객체가 무엇이냐에 따라서 바인딩 되는 주소가 달라지기 때문에 실행해봐야 안다. 그래서 실행 중에 메서드 위치가 결정되는 것을 동적 바인딩이라고 한다.

반응형
저작자표시 (새창열림)

'Programming > Java' 카테고리의 다른 글

[Java] String / StringBuilder / StringBuffer의 차이점은 무엇일까?  (0) 2020.09.27
[Java] Enum 클래스에 대해 알아보자  (0) 2020.09.14
[Java] 참조형식과 호출되는 메서드의 관계  (0) 2020.07.04
[Java] Log4j에 대해 알아보자  (0) 2019.11.11
[JAVA] 날짜와 시간 다루기(java.time)  (0) 2019.11.09
    'Programming/Java' 카테고리의 다른 글
    • [Java] String / StringBuilder / StringBuffer의 차이점은 무엇일까?
    • [Java] Enum 클래스에 대해 알아보자
    • [Java] 참조형식과 호출되는 메서드의 관계
    • [Java] Log4j에 대해 알아보자
    cbw1030
    cbw1030

    티스토리툴바