Java/Java 기본 45

자바에서 객체의 타입을 확인하는 법

자바에서 객체의 타입을 확인하는 법 자바로 코딩을 하다보면 각 객체들의 타입을 체크해야만 할 때가 있다. 그럴 때에 사용하는 것이 바로 instanceof 연산자이다. instanceof 연산자의 구문은 다음과 같다:객체_레퍼런스 instanceof 클래스_타입 instanceof는 이항 연산자로서 주어진 레퍼런스 변수가 가리키는 객체가 주어진 클래스의 타입인지 확인을 한 후, 그 결과에 해당하는 boolean을 반환한다. i.e.class Person {}class Student extends Person {}class Researcher extends Person {}class Professor extends Researcher {} public class InstanceofExample { publ..

Java/Java 기본 2018.07.09

객체의 타입 변환 : 업캐스팅과 다운캐스팅

객체의 타입 변환 : 업캐스팅과 다운캐스팅 캐스팅(casting)이란 개발자가 프로그램 코드로 행하는 강제 타입 변환이다. 자바에서 캐스팅은 업캐스팅과 다운캐스팅의 두 가지가 있다. 1. 업캐스팅(upcasting) - 서브 클래스의 레퍼런스를 슈퍼 클래스 레퍼런스에 대입- 슈퍼 클래스 레퍼런스로 서브 클래스 객체를 가리키게 되는 현상 서브 클래스는 슈퍼 클래스의 모든 특성을 상속받는다. 따라서 서브 클래스는 슈퍼 클래스로 취급될 수 있다. 예를 들면, 사람을 생물이라고 불러도 되는 것과 같다.서브 클래스 객체가 슈퍼 클래스 타입으로 변환되는 것을 업캐스팅(upcasting)이라고 한다. i.e.class Person {String name;String id; public Person(String nam..

Java/Java 기본 2018.07.09

상속과 생성자

상속과 생성자 1. 서브 클래스와 슈퍼 클래스의 생성자 호출 및 실행 관계 상속 관계에 있는 서브 클래스와 슈퍼 클래스는 각각 생성자를 가지고 있다. 두 생성자들의 관계에 대해서 일반적으로 혼동하는 부분에 대해서 알아보도록 하자. Q1. 서브 클래스의 인스턴스가 생성될 때 서브 클래스의 생성자와 슈퍼 클래스의 생성자가 모두 실행되는가? 아니면 서브 클래스의 생성자만 실행되는가? A1. 둘 다 실행된다. 생성자는 인스턴스를 초기화할 목적으로 사용되므로 서브 클래스의 생성자는 서브 클래스 내의 멤버를 초기화하거나 필요한 초기화 작업을 수행할 필요가 있고, 슈퍼 클래스의 생성자는 슈퍼 클래스의 멤버를 초기화하거나 필요한 초기화 작업을 수행할 필요가 있기 때문이다. Q2. 서브 클래스의 인스턴스가 생성될 때 서..

Java/Java 기본 2018.07.03

상속과 접근 지정자

상속과 접근 지정자 자바의 접근 지정자에는 총 4가지 종류가 있다. 그렇다면, 슈퍼 클래스 멤버에 선언한 4가지 유형의 접근 지정자에 대해 다른 클래스에서 어떤 접근이 허용되는지 알아보도록 하자. - private슈퍼 클래스의 멤버에 private 접근 지정자가 지정되면 서브 클래스라도 자기 멤버 같이 직접 사용할 수 없다. -protected슈퍼 클래스의 protected 멤버는 두 가지 상황에서 접근을 허용한다. 1) 같은 패키지에 속한 다른 클래스에 접근을 허용한다.2) 같은 패키지든 다른 패키지든 상속을 받는 서브 클래스에 접근을 허용한다. -public슈퍼 클래스의 멤버가 public이면 서브 클래스뿐만 아니라 어떤 클래스에서도 접근할 수 있다. 같은 패키지에 있든 다른 패키지에 있든 상관없다...

Java/Java 기본 2018.07.03

서브 클래스의 객체와 멤버 사용

서브 클래스의 객체와 멤버 사용 A라는 클래스를 상속받는 클래스 B가 있다고 하자. 클래스 A로 객체 a를 만들고, 클래스 B로 객체 b를 만들었을때, 객체 a는 오직 A의 멤버 변수와 멤버 메소드만을 사용할 수 있다. 그에 반해, 객체 b는 클래스 B의 멤버 변수와 메소드 뿐 아니라 클래스 A의 멤버 메소드와 변수까지 사용할 수 있다. 상속을 받았기 때문에, 클래스 B는 클래스 A의 멤버를 모두 가지기 때문이다. 서브 클래스 객체를 생성하면, 그 안에는 서브 클래스의 멤버들 뿐 아니라 슈퍼 클래스의 멤버들도 함께 생성된다.

Java/Java 기본 2018.07.03

상속 선언

상속 선언 자바에서는 슈퍼 클래스로부터 상속받은 서브 클래스를 선언할 때 extends 키워드를 사용한다. i.e.public class Person {...} public class Student extends Person {//Person을 상속 받는 클래스 Student 선언...} public class StudentWorker extends Student {//Student를 상속 받는 클래스 StudentWorker 선언...} Student 클래스는 Person 클래스의 특성을 물려받으므로 Person 클래스에 선언된 필드나 메소드를 다시 반복 선언할 필요가 없으며, 새롭게 추가된 특성을 표현하는 필드나 메소드만을 선언하면 된다. StudentWorker가 Student를 상속받으면 Pers..

Java/Java 기본 2018.07.02

상속의 개념

상속의 개념 현실의 세계에서 상속은 부모의 재산을 자손이 물려받는 것을 의미한다. 객체 지향에서 의미하는 상속은 재산 상속보다는 부모의 생물학적 특성을 물려받는 유전에 더 가깝다고 할 수 있다. 따라서 객체 지향에서 상속이 의미하는 바는 부모 클래스에 정의된 필드와 메소드를 자식 클래스가 물려받는 것이다. 상속이 이루어지면 자식 클래스는 부모 클래스에 정의된 필드와 메소드를 정의하지 않아도마치 정의한 것과 같은 효과가 있다. 한가지 분명히 하고자 하는 것은 상속은 클래스 사이의 상속이지 객체 사이의 상속이 아니라는 점이다. 자식 객체가 생성될 때 자식 클래스와 부모 클래스의 상속 관계에 따라 부모 클래스에 정의된 멤버를 가지고 생성된다. 1. 상속의 특성 1) 데이터와 함수의 중복성을 제거한다.2) 데이..

Java/Java 기본 2018.07.01

Annotation

Annotation - 어노테이션은 Java 5에 추가된 기능이다! - 클래스나 메소드 위에 붙으며, '@'로 시작 - 어노테이션을 클래스나 메타코드에 붙인 후, 클래스가 컴파일되거나 실행될 때 어노테이션의 유무나 어노테이션에 설정된 값을 통하여 클래스가 좀 더 다르게 실행되게 할 수 있다. - 어노테이션은 자바가 기본으로 제공하는 것도 있고, 사용자가 직접 작성한 커스텀 어노테이션(custom annotation)도 있다. - 커스텀 어노테이션을 JVM이 실행시에 감지할 수 있도록 하려면 "@Retention(RetentionPolicy.RUNTIME)"를 붙여줘야 한다. i.e.@Retention(RetentionPolicy.RUNTIME)public @interface count100 { ... }

Java/Java 기본 2018.06.29

final

final final은 반드시 알아야 할 기본적인 키워드이다. final 키워드가 사용될 수 있는 곳은 세 군데이다. 1. final 클래스 final이 클래스 이름 앞에 사용되면 클래스를 상속받을 수 없음을 지정한다. 다음 예시의 FinalClass는 final 키워드가 클래스 선언 시에 사용 되었기 때문에, 다른 클래스가 이를 상속 받으려 할 경우 컴파일 오류가 발생하게 된다. i.e. final class FinalClass {...} class DerivedClass extends FinalClass { //컴파일 오류 발생...} 2. final 메소드 메소드 앞에 final 속성이 붙으면 이 메소드는 더 이상 오버라이딩할 수 없음을 지정한다. 자식 클래스가 부모 클래스의 특정 메소드를 오버라이..

Java/Java 기본 2018.06.29

static 멤버

static 멤버 1. static 멤버의 선언 다음과 같이 멤버 선언 시 앞에 static이라고 붙이기만 하면 된다. i.e. class StaticSample {int n; //non static field void g() { //non static method..} static int m; //static field static void f() { //static method...}} 2. non-static 멤버와 static 멤버의 차이 이제 non static 멤버와 static 멤버의 특징과 차이점을 살펴보자. 객체를 생성하지 않고도 사용할 수 있는 멤버를 static 멤버라고 부른다. 같은 클래스를 이용하여 객체들이 생성되어질 때에 각각의 객체들은 자신만의 필드들을 갖는다. 이들 필드는 인..

Java/Java 기본 2018.06.29