분류 전체보기(20)
-
자바[JAVA] : 다이나믹 메서드 디스패치 (Dynamic Method Dispatch)
● 다이나믹 메서드 디스패치 (Dynamic Method Dispatch) 메서드 디스패치(Method Dispatch) 메서드 디스패치란 어떤 메서드를 호출할지 결정하여 실제로 실행시키는 과정이다. 자바는 런타임 시 객체를 생성하고, 컴파일 시에는 생성할 객체 타입에 대한 정보만 보유한다. 이에따라 이 과정은 static(정적)과 dynamic(동적)이 있다. - Static Dispatch : 컴파일 시점에서, 컴파일러가 특정 메소드를 호출할 것이라고 명확하게 알고있는 경우이다. (정적) 컴파일 시 생성된 바이트 코드에도 이 정보가 그대로 남아있다. 런타임(실행 시점)이 되지 않아도 미리 결정하는 개념이다. 함수를 오버로딩하여 사용하는 경우 인자의 타입이나 리턴타입 등에 따라 어떤 메서드를 호출할지 ..
2021.01.28 -
자바[JAVA] : Object 클래스
● Object 클래스 모든 클래스의 조상 Object 클래스는 모든 클래스 상속계층도의 최상위에 있는 조상클래스이다. 다른 클래스로부터 상속 받지 않는 모든 클래스들은 자동적으로 Object클래스로부터 상속받게 함으로써 이것을 가능하게 한다. 아래와 같이 다른 클래스로부터 상속받지 않는 클래스를 정의하면 코드를 컴파일 할 때 자동적으로 extends Object를 추가하여 상속받도록 한다. class Example { ... } //Object가 자동적으로 추가되어있음. class Example extends Object { ... } String클래스나 System클래스를 import문 없이 따로 정의하지 않고 사용할 수 있었던 이유는 이 메서드들이 Object클래스에 정의된 것들이기 때문이다. Ob..
2021.01.28 -
자바[JAVA] : final 키워드
● final 키워드 - final은 '마지막의' 또는 '변경될 수 없는'의 의미를 가지고 있으며 거의 모든 대상에 사용될 수 있다. 변수에 사용되면 값을 변경할 수 없는 상수가 되며, 메서드에 사용되면 오버라이딩을 할 수 없게 되고 클래스에 사용되면 자신을 확장하는 자손클래스를 정의하지 못하게 된다. (대규모 프로젝트에서 하나의 기능단위로 쪼갠 메서드에 final이 붙으면 더이상 변경하지 말라는 의미로도 자주 사용되니 꼭 기억!) final class FinalTest { // 조상이 될 수 없는 클래스 final int MAX_SIZE = 10; // 값을 변경할 수 없는 멤버변수(상수) final void getMaxSize() { // 오버라이딩할 수 없는 메서드(변경불가) final int LV..
2021.01.28 -
자바[JAVA] : 추상클래스
● 추상 클래스 추상 클래스(abstract class) 란? 클래스를 설계도에 비유한다면, 추상클래스는 미완성 설계도라 할 수 있다. 클래스가 미완성이라는 것은 멤버의 개수에 관계된 것이 아니라, 단지 미완성 메서드(추상메서드)를 포함하고 있다는 의미이다. 미완성 설계도로 완성된 제품을 만들 수 없듯이 추상클래스로 인스턴스는 생성할 수 없다. 추상클래스는 상속을 통해서 자손 클래스에 의해서만 완성될 수 있다. 추상클래스 자체로는 클래스로서의 역할을 다 못하지만, 새로운 클래스를 작성하는데 있어서 바탕이 되는 조상 클래스로서 중요한 의미를 갖는다. 추상클래스는 키워드 'abstract'를 붙이기만 하면 된다. 클래스 선언부의 abstract를 보고 이 클래스에는 추상메서드가 있으니 상속을 통해서 구현해주..
2021.01.28 -
자바[JAVA] : 오버라이딩(Overriding) 이란?
● 메소드 오버라이딩 오버라이딩(overriding)이란? 조상클래스로부터 상속받은 메서드의 내용을 변경하는 것을 오버라이딩이라고 한다. 상속받은 메서드를 그대로 사용하기도 하지만, 자손 클래스 자신에 맞게 변경해야 하는 경우가 많다. 이럴 때 조상의 메서드를 오버라이딩이라 한다. (override의 사전적 의미는 '~위에 덮어쓰다(overwrite)' 이다. 오버라이딩의 조건? 오버라이딩은 메서드의 내용만을 새로 작성하는 것이므로 메서드의 선언부는 조상의 것과 완전히 일치해야 한다. 그래서 오버라이딩이 성립하기 위해서는 다음과 같은 조건을 만족해야 한다. (중요) 자손 클래스에서 오버라이딩 하는 메서드는 조상클래스의 메서드와 - 이름이 같아야 한다. - 매개변수가 같아야 한다. - 반환타입이 같아야 한..
2021.01.28 -
자바[JAVA] : super 키워드
● super 키워드 super는 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변수이다. 멤버변수와 지역변수의 이름이 같을 때 this를 붙여서 구별했듯이 상속받은 멤버와 자신의 멤버와 이름이 같을 때는 super를 붙여서 구별할 수 있다. 조상 클래스로부터 상속받은 멤버도 자손클래스 자신의 멤버이므로 super대신 this를 사용할 수 있다. 그래도 조상 클래스의 멤버와 자손클래스의 멤버가 중복 정의되어 서로 구별해야하는 경우에만 super를 사용하는 것이 좋다. 조상의 멤버와 자신의 멤버를 구별하는데 사용된다는 점을 제외하고는 super와 this는 근본적으로 같다. 모든 인스턴스메서드에는 자신이 속한 인스턴스의 주소가 지역변수로 저장되는데, 이것이 참조변수인 this와 ..
2021.01.28