Java 40

자바 프로그래밍 (Java) - 30 : 상속과 접근 제한자

- 접근 제한자 접근 제한자는 public, protected, private이 있다. public은 모든 접근을 허가하는 것이며, protected는 이 클래스를 상속하는 클래스들만 접근할 수 있게 허가해주는 것이다. 마지막으로 private은 해당 클래스에만 사용하게 제한하는 접근 제한자이다. 다음은 Person 클래스와 이를 상속하는 Student 클래스이다. Person의 public, protected 변수만 접근할 수 있는 것을 볼 수 있다. public class Person { private int prvtVar; public int pbVar; protected int ptVar; Person(){ prvtVar = 1; pbVar = 2; ptVar = 3; } } public clas..

Java 2016.07.14

자바 프로그래밍 (Java) - 29 : 다운캐스팅 (Downcasting)과 ClassCastException

2) 다운 캐스팅(Down casting) 하위 클래스 데이터 타입으로 형 변환하는 것을 down casting이라고 한다. 주의할 점은 업캐스팅 되기 전의 클래스로만 다운 캐스팅할 수 있다. 예를 들어 아래 예에서 sender[0] 인스턴스를 SMSSender로 다운 캐스팅할 수 없다. abstract class MessageSender { public void test(){ System.out.println("message"); } } public class EMailSender extends MessageSender { public String type = "EMail"; } public class SMSSender extends MessageSender { public String type = "..

Java 2016.07.13

자바 프로그래밍 (Java) - 28 : 클래스 업캐스팅 (Upcasting)

- Upcasting, Down casting 1) 업캐스팅(upcating) 상위 클래스로 데이터 타입을 바꾸는 것을 업캐스팅(upcating)이라고 한다. 다음은 EmailSender와 SMSSender 객체를 상위 클래스인 MessageSender 타입의 배열로 upcasting하여 관리하는 예제이다. 중요한 점은 인스턴스는 그 클래스 타입이 사용할 수 있는 메서드와 변수만 접근할 수 있다는 것이다. 또한 하위 클래스에서 재정의한 경우 재정의된 메서드가 우선적으로 호출된다. abstract class MessageSender { public void test(){ System.out.println("message"); } } class EMailSender extends MessageSender {..

Java 2016.07.13

자바 프로그래밍 (Java) - 27 : 이름 바인딩 (Name Binding)

- Name Binding 프로그래밍 언어에서 데이터나 코드와 식별자 사이의 관계(연관)을 말한다. 한 식별자는 한 객체에 묶여 있고, 이를 그 객체의 reference(참조)라고 한다. 실제 기계어에는 식별자라는 개념이 없지만, 식별자와 객체의 binding은 프로그래머가 프로그램을 개발할 때 사용된다. Binding Time에 따라 static, dynamic으로 분류된다. 1) Static binding 프로그램이 시작되기 전에 binding되는 것을 Static binding이라고 한다. 2) Dynamic binding 프로그램이 시작되고 있는 중에 binding이 일어나는 것을 Dynaminc binding이라고 한다.

Java 2016.07.13

자바 프로그래밍 (Java) - 26 : 상속 (final과 abstract - 2)

- 다음은 Person 클래스를 추상화한 것이다. 추상화된 메서드가 없어도 에러가 발생하지 않은 것을 볼 수 있다. 즉 추상 클래스는 꼭 추상 메서드가 있어야하는 것은 아니다. public abstract class Person { private String name; Person(String name){ this.name = name; } public void eat(){ System.out.println("Eating..."); } } - 또한 부모 클래스의 메서드가 추상화된 경우, 자식 클래스에서 꼭 재정의 해주어야 한다. 재정의하지 않으면 컴파일 에러가 발생한다. public abstract class Person { private String name; Person(String name){ th..

Java 2016.07.13

자바 프로그래밍 (Java) - 25 : 상속 (final과 abstract - 1)

- final과 상속 final로 선언한 클래스는 상속을 하지 못하며, final로 선언한 메서드는 오버라이딩할 수 없다. 다음은 Person 클래스를 상속할 수 없게 만든 예제이다. 이미 클래스의 상속을 금지했기 때문에 의미가 없지만 eat 메서드도 final로 재정의를 금지하였다. final public class Person { private String name; Person(String name){ this.name = name; } public final void eat(){ System.out.println("Eating..."); } } - 추상 클래스 (abstract class) 추상 메서드란 메서드의 시그니처만 있고 바디가 없는 메서드를 말한다. 추상 클래스란 abstract 키워드를..

Java 2016.07.13

자바 프로그래밍 (Java) - 24 : 상속 (오버라이딩)

- 오버라이딩 (Overriding) 부모로부터 멤버 메서드를 상속 받을 때, 자식 클래스에서 그 메서드를 재정의하는 것을 메서드 오버라이딩이라고 한다. 메서드 오버라이딩을 수행하는 경우 메서드의 시그니쳐(반환 형, 매개변수)를 변경하지 않아야 한다. 오버라이딩되는 메서드의 접근 제한자는 변경할 수 있는데, 부모의 접근 제한자보다 넓은 범위로만 변경할 수 있다. 다만 부모의 메서드를 오버라이딩할 때, 부모의 재정의되는 메서드의 기능이 필요한 경우가 많다. 이 부분을 자식 메서드에서 재정의 시 똑같이 작성하면 코드 중복이 발생한다. 이런 중복을 super 키워드로 자식에 의해서 가리어진 부모의 멤버를 호출하여 피할 수 있게 된다. public class Person { private String name;..

Java 2016.07.13

자바 프로그래밍 (Java) - 23 : 상속 (개관)

- 클래스의 상속 extends 키워드를 통해서 클래스의 멤버 변수와 멤버 메서드가 상속된다. 즉 private 필드와 메서드는 클래스 고유의 것이기 때문에 절대 상속되지 않는다. 자식 클래스의 생성자가 호출되면, 먼저 부모 클래스의 기본 생성자를 호출하여 부모 클래스의 인스턴스가 만들어진다. 따라서 부모 클래스의 인수 있는 생성자가 있는 경우, 자식 클래스 생성자에서 부모의 인수 있는 생성자를 ‘명시적으로’ 호출하지 않으면 컴파일 에러가 발생한다(기본 생성자는 다른 생성자가 없는 경우에 자동적으로 추가되어지는 것이므로). 이렇게 명시적으로 부모 클래스의 생성자를 호출하는 것은 super() 키워드를 사용한다. super도 자식 생성자의 맨 위쪽에 위치해야한다. 자식 클래스의 인스턴스가 만들어지기 전에 ..

Java 2016.07.13

자바 프로그래밍 (Java) - 22 : 정적 구성 요소(static)와 기능 클래스, 정적 초기화 블록(static initialization block)

- 정적 구성 요소(static)와 기능 클래스, 정적 초기화 블록(static initialization block) 1) 정적 구성 요소 모든 인스턴스가 공유하는 데이터가 필요한 경우가 있다. static 키워드를 통해서 필드를 정적으로 만들 수 있다. 그리고 정적 필드를 변경하는 경우 정적 메서드(static method)를 사용하는 것이 일반적이다. 정적 구성 요소는 인스턴스를 만들기 전에도 클래스에 접근하여 사용할 수 있다. 주의할 점은 정적 메서드는 특정 객체에 속하지 않기 때문에, 특정 객체에 속하는 구성요소(인스턴스 필드, 인스턴스 메서드)를 사용할 수 없다는 것이다. 2) 기능 클래스 클래스 내부에 멤버 변수가 없고, 기능적인 메서드만을 제공해주는 클래스가 있다. 이를 기능 클래스라고 한..

Java 2016.07.13

자바 프로그래밍 (Java) - 21 : 예외 처리 방법

- Exception Handling 다음은 10을 들어온 인자로 나누는 메서드이다. 메서드 내부에서 인자 값이 0이면 인위적으로 예외를 발생시키도록 작성한 것을 볼 수 있다. 이 예외는 Checked Exception이기 때문에, 다음과 같이 하지 않으면 컴파일 에러가 발생한다. 1) 예외가 발생한 메서드에 throws Exception으로 발생한 예외를 호출한 곳으로 던진다. 2) 메서드 내부적에서 try – catch로 예외를 핸들링한다. 이 경우 첫 번째 방법이 권장된다. 그 이유는 메서드 내부에서 예외를 발생 시키고, 이를 다시 예외를 발생시킨 곳에서 try - catch문으로 핸들링한다는 것은 예외 처리라는 의미가 없어지기 때문이다. 다시말해 메서드 내부에서 예외가 발생하면 메서드를 호출한 개..

Java 2016.07.13