사용자 도구

사이트 도구


자바_프로그래밍_book

담을 내용들

  1. 클래스 추상 클래스
  2. 접근자
  3. 상속
  4. overloading, overridding
  5. 인터페이스
  6. enum
  7. generic
  8. Stream
  9. awt, swing, SWT의 과정
  10. Java 2D Drawing
  11. listener
  12. exception
  13. Java Collection Framework (Map, Set, List) 차이
  14. Java Net
  15. equals와 hashcode 구현, 객체 비교는 어떻게 이루어지는가?
  16. class loader 동작
  17. finalize와 GC
  18. JUnit
  19. Java 웹 프로그래밍

클래스의 정의

public class Test{
    public static void main(String args[]){
        System.out.println("Test");
    }
}

자바는 프로그래밍의 기본 단위가 클래스이다. 이말은 곧 원하는 소프트웨어를 제작하기 위해서는 최소한 하나 이상의 클래스가 기술되어야 한다는 것이다.

Test 클래스의 내용은 세부적으로 살펴보면 먼저 선언부에는 클래스 접근자와 클래스 이름이 기술되어 있다. 하나의 Java File에는 하나의 public 접근이 가능한 class가 존재해야 하며 public 접근이 가능한 class의 이름은 java 파일명과 동일해야 한다.

작성한 프로그램이 실행되기 위해서는 JVM이 식별 가능한 프로그램의 진입점이 명시 되어야 하는데 이에 대한 부분이 public static void main에 해당한다.

다른 메소드들과 다르게 main 메소드가 static를 띄는 이뉴는 public class의 class 메소드로서 JVM이 클래스에 대한 객체를 생성하지 않더라도 프로그램을 시작 시킬 수 있도록 하기 위해서 이다. 만약 그렇지 않다면 JVM은 main() 메소드를 찾을 수 없다는 예외와 함께 종료된다.

class내의 멤버들이 가지는 접근자로는 private, public, protected, package가 있다.

각 접근자의 동작은 다음과 같다.

접근자(접근 제한자) 동작 범위
private 데이터 멤버를 클래스 외부로 공개하지 않는다.
public 클래스 멤버에 대한 모든 접근을 허용한다.
protected 확장하는 클래스에 데이터 멤버를 제한적으로 공개한다.
package 클래스가 포함된 클래스의 패키지 내로 데이터 멤버 접근을 제한한다.

클래스 멤버들에 접근자를 두는 이유는 프로그래머가 만들어낸 멤버나, 메소드들이 의도하지 않은 외부의 접근과 데이터의 수정으로 부터 사전에 예측 가능하고 제어가 가능한 수준으로 제한을 둘 수 있도록 하기 위함이다.

예를들어 객체 내부의 중요 데이터에 대해서 이 객체를 사용하는 사용자가 수정할 수 없도록 하고 싶다면 메소드나 데이터 멤버의 접근자로 private를 사용하게 되는 것이다.

클래스와 추상 클래스

클래스와 추상 클래스의 차이는 실체화 될 수 있는 것과 없는 것에 대한 개념적인 디자인을 제공하느냐 이다.

프로그래머가 꼭 추상 클래스나 클래스에 대한 구별을 두고 만들어야 할 필요는 없을 수도 있으나 이는 객체지향 프로그래밍에서는 올바르지 않은 것이라고 할 수 있다.

개념적으로 살펴 보자면 클래스는 눈으로 확인할 수 있는 실체를 디자인하는 요소라고 한다면 추상 클래스는 눈에 보이지 않는 사전적 요소라고 할 수 있다.

그림1. 클래스와 추상 클래스의 문제

왼쪽의 예를 통해 살펴 보자면 세모, 네모, 동그라미의 경우 우리가 명확히 모양과 실체를 알수 있고 도형의 경우는 머릿속으로 생각만 할 수 있는 개념적인 요소라는 것을 알 수 있다.

두 번째 예의 경우도 앞서 설명한 마찬가지로 실체가 있는 대상과 개념적으로만 존재하는 대상으로 구별되는 것을 알 수 있다. 이러한 실체와 개념적인 대상을 표현하는 것이 클래스와 추상 클래스의 차이이다.

추상 클래스의 언어적 요소는 아래와 같다.

public abstract class MyShape {
    public abstract double getShape();
    public abstract String getName();
}

추상 클래스의 특징으로는 하나 이상의 추상 메소드를 포함하여야 한다는 것이며 다른 일반 메소드 및 구현도 함께 포함 할 수 있다.

추상 클래스를 확장하는 클래스에서는 부모 추상 클래스에서 선언된 추상 메소드를 반드시 재작성(override)하여야 하며 그렇지 않을 경우 확장하는 클래스 자체도 추상 클래스로 선언 되어야 한다.

상속

클래스와 추상 클래스에서는 상속이라는 개념을 통해서 다른 클래스의 기능을 확장해 나갈 수 있다. 이 말은 이미 구현된 다른 클래스의 기능을 확장한 후 추가적인 기능을 구현해 새로운 클래스를 만들어 낼 수 있다는 의미이다.

왼쪽의 그림은 상속의 예이다. B 클래스는 A 클래스를 확장하고 있다.

A 클래스이ㅡ 경우 walk()라는 메소드를 가지고 있으며 A 클래스를 확장한 B 클래스는 A 클래스의 walk()와 run() 메소드 둘 다를 가지게 된다. 이것은 확장의 경우 부모 클래스의 모든 특성들을 확장하는 클래스가 모두 물려 받기 때문이다.

B클래스에 대한 객체 생성시 메모리에 적재 되면서 초기화 되는 순서는 class A가 먼저 초기화 되고 class B가 초기화 된다. 이러한 초기화 순서는 클래스 B가 A의 특성을 물려 받기 위해서 A가 먼저 생성되어야 하는 것을 생각해 보면 간단하다.

오바라이딩(overridding)과 오버로딩(overroading)

오버라이딩과 오버로딩은 상속에서 발생하는 중요한 개념이다.

메소드 오버로딩은 메소드의 시그니쳐(정의)에 따라서 고유한 식별이 가능한 것을 나타낸다.

draw(..

자바_프로그래밍_book.txt · 마지막으로 수정됨: 2013/12/11 00:46 저자 127.0.0.1