본문 바로가기

Java29

다형성(polymorphism) - 참조변수와 인스턴스의 연결 부모 타입의 참조변수와 자식 타입의 참조변수의 차이는 사용할 수 있는 멤버의 개수다. 만약 부모 클래스에 선언된 멤버변수와 동일한 이름의 인스턴스변수가 자식 클래스에도 정의되어 있을 때, 부모 타입의 참조변수로 자식 인스턴스를 참조하는 경우와 자식 타입의 참조변수로 부모 타입의 인스턴스를 참조하는 경우에는 서로 다른 결과를 얻는다. 메소드의 경우 부모 클래스의 메소드를 자식 클래스에서 오버라이딩한 경우에도 참조변수의 타입에 관계없이 항상 실제 인스턴스의 메소드(오버라이딩한 메소드)가 호출되지만, 멤버변수의 경우 참조변수의 타입에 따라 달라진다. static메소드는 static변수처럼 참조변수의 타입에 영향을 받는다. 참조변수의 타입에 영향을 받지 않는 메소드는 인스턴스 메소드뿐이다. 그래서 static메.. 2021. 4. 1.
다형성(polymorphism) - instanceof 연산자 1. instanceof 연산자는 참조변수가 참조하고 있는 실제 타입을 알아보기 위해 사용한다. 주로 조건문에 사용되며 instanceof의 왼쪽에는 참조변수를 오른쪽에는 타입(클래스명)이 피연산자로 위치한다. 연산의 결과는 true 또는 false로 반환한다. 이 때 true로 값을 얻는다는 건 참조변수가 검사한 타입으로 형변환이 가능하다는 의미다. 2. 형태 참조변수 instanceof 참조타입(클래스명) instanceof 연산자 예제) class InstanceofTest { public static void main(String args[]) { FireEngine2 fe = new FireEngine2(); if(fe instanceof FireEngine2) { System.out.print.. 2021. 3. 31.
다형성(polymorphism) 1. 다형성 다형성이란 여러 가지 형태를 가질 수 있는 능력을 의미하며, 좀 더 구제적이지만 간단히 말하면 부모 클래스의 참조변수로 자식 클래스의 인스턴스를 참조하는 것이다. 간단히 예를 들면 서로 다른 두개의 클래스가 있다고 하면 쉽게 알 수 있다. 예제1) public class Tv { boolean power; //전원 상태 int channel; //채널 void power(){ } void channelUp(){ }//채널 up void channelDown(){ }//채널 down } class CaptionTv extends Tv{ String text; //캡션을 보여주기 위한 문자열 void caption() { } } 이때, Tv와 CaptionTv는 서로 상속관계에 있으며, 이 두 .. 2021. 3. 30.
접근제어자(Access Modifier)와 제어자(Modifier) 1. 접근제어자 멤버 또는 클래스에 사용되어, 해당하는 멤버나클래스를 외부에서 접근하지 못하도록 제한하는 역할을 한다. 접근 제어자가 default임을 알리기 위행실제로 default를 붙이지는 않으며, 클래스나 멤버변수, 메소드, 생성자에 접근 제어자가 지정되어 있지 않다면, 접근 제어자가 defalut임을 의미한다. **접근제어자는 오직 하나만 사용할 수 있으며, 위의 네 가지 종류중 하나만 사용할 수 있다. 접근제어자에 따른 접근 허용 범위 제어자 같은 클래스 같은 패키지 (다른 패키지)자식 클래스 전체 public O O O O protected O O O (default) O O private O 접근 범위가 넓은 것(왼쪽)부터 좁은 것(오른쪽)을 나열하면 다음과 같다. public > prot.. 2021. 3. 26.
오버로딩과 오버라이딩 자바 관련된 기본 면접 질문란을 보면 항상 단골처럼 나오는 "오버로딩과 오버라이딩의 차이가 뭔가요?"의 주인공들이다. 사실 둘은 비슷해보이지만 완전히 다르다. 1. 오버로딩(재정의) 메소드도 변수와 마찬가지로 같은 클래스 내에서 서로 구별될 수 있어야 하기 때문에 각기 다른 이름을 가져야 한다. 그러나 자바에서는 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면 같은 이름을 사용해 메소드를 정의할 수 있다. 즉, 한 클래스 내에 같은 이름의 메소드를 여러개 정의하는 것을 메소드 오버로딩 또는 오버로딩이라 한다. 1.1 오버로딩의 충족 조건 ① 메소드명이 같아야 한다. ② 매개변수의 개수 또는 타입이 달라야 한다. 두 가지 조건을 만족하지 못하는.. 2021. 3. 25.
상속(Inheritance) 1.1 상속의 정의와 특징 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 특징 1) 적은 양의 코드로 새로운 클래스를 작성할 수 있다. 2) 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이하다. → 1, 2번의 이유로 코드의 재사용성을 높이고 코드 중복을 제거하여 프로그램의 생산성과 유지보수에 좋다. 3) 생성자와 초기화 블럭은 상속되지 않는다. 4) 자식 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다. 상속을 구현하는 방법 class Child extends Parents { ... } -Child class : 상속받는 클래스(자식 클래스) -Parents class : 상속해주는 클래스(부모 클래스) 상속을 받는 자식 클래스는 부모의 모든 멤버를 상.. 2021. 3. 24.