본문 바로가기

전체 글32

다형성(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.
변수의 초기화 1. 변수의 초기화? 변수를 선언하고 처음으로 값을 저장하는 것을 '변수의 초기화'라고 한다. 변수의 초기화는 경우에 따라 선택적이거나 필수적이기도 하지만, 가능하면 선언과 동시에 초기화하는 것이 좋다. 그 이유는 멤버변수는 초기화하지 않아도 자동적으로 변수의 자료형에 맞는 기본값으로 초기화가 이루어지지만, 지역변수는 사용하기 전에 반드시 초기화를 해야 하기 때문이다. 멤버변수(클래스변수, 인스턴스변수)와 배열의 초기화는 선택적이지만, 지역변수의 초기화는 필수적이다. 2. 멤버변수의 초기화 방법 1) 명시적 초기화 2) 생성자 3) 초기화 블럭 -인스턴스 초기화 블럭 : 인스턴스변수를 초기화하는 데 사용. -클래스 초기화 블럭: 인스턴스변수를 초기화 하는데 사용. 2.1 명시적 초기화(explicit i.. 2021. 3. 23.
생성자(Constructor) 1. 생성자란? 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메소드다. 따라서 변수의 초기화 작업에 주로 사용되며, 인스턴스 생성 시에 실행되어야 할 작업을 위해서도 사용된다. 인스턴스 초기화: 인스턴스변수들을 초기화하는 것을 의미. 생성자 또한 클래스 내에 선언되며, 구조도 메소드와 유사하지만 리턴 값이 없다는 것이 메소드와 다른 점이다. 그렇다고 해서 생성자 앞에 리턴 값이 없을 뜻하는 키워드 void를 사용하지는 않는다. 다만, 아무것도 적지 않는다. 2. 생성자의 조건 1) 생성자명은 클래스의 이름과 동일해야 한다. 2) 생성자는 리턴 값이 없다. 생성자도 메소드이기 때문에 리턴 값이 없다는 의미의 void를 붙여야 하지만, 모든 생성자가 리턴 값이 없으므로 void를 생략할 수 있게 된 것이.. 2021. 3. 23.
클래스 메소드와 인스턴스 메소드 1. 클래스 메소드: static이 붙어 있는 메소드 클래스 메소드도 클래스변수처럼 객체를 생성하지 않고도 호출이 가능하다. 1) 형태: 클래스명.메소드명(매개변수) 2) 사용시기와 정의 :: 메소드 중에서 인스턴스와 관계없는(인스턴스 변수나 인스턴스 메소드를 사용하지 않는) 메소드를 클래스 메소드(static메소드)로 정의한다. 그렇다고 인스턴스 변수를 사용하지 않는다고 해서 반드시 클래스 메소드로 정의하는 것은 아니지만 특별한 이유가 없는 한 그렇게 하는 것이 일반적이다. **클래스 영역에 선언된 변수를 멤버변수라고 하는데 이중 static이 붙은 것은 클래스변수(static변수), static이 붙지 않은 것은 인스턴스변수라고 한다. 멤버변수는 인스턴스 변수와 static 변수를 모두 통칭하는 말이.. 2021. 3. 19.