반응형

[Oracle Java Tutorial을 읽고 순서에 의해 정리한 후 본인의 경험과 이해를 바탕으로 작성된 글임을 밝힌다.]

[Java Tutorial, 자바 프로그래밍 기초 배우기, Java Programming, 자바 튜토리얼]

이번 포스팅은 객체지향 프로그램인 자바(Java)에서 사용하는 생성자(Constructor)에 대해 알아본다.

클래스 (Classes)

클래스 생성자(Providing Constructors for your Classes)

클래스(Class)에는 생성자(Constructor)가 있다. 클래스를 이용해서 객체를 생성하는 시점에 생성자는 호출된다. 생성자는 메서드처럼 선언된다. 하지만 이름은 클래스 명과 같아야 하고 반환 타입이 없다. 아래 예를 확인해 보자.

   class TestConstructor{

    private int a;

    private int b;

    private int c;

    public TestConstructor(int aa, int bb, String cc){

       a=aa;

       b=bb;

       c=cc;

      }

   }

   TestConstructor tc = new TestConstructor(1, 2, “Test”);

위 코드에서 생성자는 객체가 생성(인스턴스)되는 시점에 new 키워드에 의해 호출된다. 그리고 클래스에 의해 생성된 tc 객체를 위한 메모리 공간이 생성되고 각 필드의 값이 초기화된다.

클래스는 생성자를 선언하지 않아도 기본적으로 생성자 하나는 가지고 있다. 어떠한 입력값도 없는 빈 생성자이다. 생성자는 1개 이상 구현할 수 있다. 단 입력값이 달라야 한다. 우선 입력값이 전혀 없는 기본 생성자부터 좀 전에 3개의 입력값(int, int String) 타입으로 구현된 생성자가 현재 존재한다.

자바(Java)에서는 메서드(method)의 오버로딩(Overloading)처럼 생성자도 입력값(argument)의 개수와 타입에 따라 여러 개를 생성할 수 있다. 같은 개수나 타입의 생성자를 구현하면 자바 플랫폼(platform)은 구별할 수 없게 되어 컴파일 오류가 난다.

 

 

사실 생성자는 클래스 구현할 때 필수적으로 구현하는 건 아니다. 앞서 이야기했던 거처럼 기본 생성자(입력값이 없는)가 존재하기 때문이다. 생성자를 만들지 않으면 컴파일러는 자동으로 기본 생성자를 만들어 준다. 그런데 이 기본 생성자는 슈퍼클래스의 입력값이 없는 생성자를 호출하게 된다. 만약 슈퍼클래스에 입력값이 없는 생성자가 없을 경우 컴파일러는 문제를 제기할 것이고 여러분은 그게 잘 동작하는지 반드시 확인해 봐야 한다. 만약 구현한 클래스에 명확한 슈퍼클래스가 없다면 암묵적으로 Object의 슈퍼클래스에서 입력값이 없는 생성자를 갖게 될 것이다.

자신이 구현한 클래스의 생성자나 슈퍼클래스의 생성자나 프로그래머가 잘 판단해서 사용하면 된다.

다음 포스팅은 메서드나 생성자로 정보를 전달하는 방법에 대해 알아볼 것이다.

반응형
반응형

[Oracle Java Tutorial을 읽고 순서에 의해 정리한 후 본인의 경험과 이해를 바탕으로 작성된 글임을 밝힌다.]

[Java Tutorial, 자바 프로그래밍 기초 배우기, Java Programming, 자바 튜토리얼]

진정 자바 프로그래머라면 이제부터 잘 봐야 한다. 이번 포스팅은 객체지향 프로그램인 자바(Java)에서 사용하는 메서드(method)에 대해 살펴본다.

클래스 (Classes)

메서드 정의(Defining Methods)

일반적인 메서드(Method)선언 예제이다.

    Public double calAns(int a, double b) {

       //여기에 계산식 구현

    }

메서드 선언 시 반드시 필요한 요소들은 메서드 반환 값 타입(method return type), 괄호, 그리고 몸체를 감싸는 중괄호 { }이다.

 

 

다음 6가지 구성 요소들이 메서드 선언 시 일반적인 사항들이다.

  1. 한정어(접근자) – public, private 그리고 다른 접근자들

  2. 반환 값 타입(return type) – 메서드의 반환 값에 대한 데이터 타입, 만약 반환 값이 없으면 void

  3. 메서드 명 – 기본적으로 필드명 방식과 같지만 약간 다른 부분이 있다.

  4. 괄호 안 파라메터 – 콤마로 구분해서 입력 파라메터를 정의한다. 파라메터 명 앞에는 데이터 타입을 지정한다.

  5. 예외 처리

  6. 중괄호로 묶은 메서드 몸체 – 메서드 코드, 지역 변수 선언을 구현한다.

해당 정보들은 추후 더 자세히 포스팅하겠다.

메서드 이름(Naming a Method)

메서드 이름은 기본 필드명처럼 구성하면 되지만 몇 가지 제약이 있다. 먼저 메서드 이름은 반드시 소문자 동사로 시작해야 한다. 그 다음 부사, 명사 등이 올 수 있고 해당 단어들은 첫 글자를 대명사로 써야 한다.예를 들어 본다.

add

addSomeData

setX

isOk

일반적으로 메서드는 클래스 안에서 유일한 이름으로 지어야 한다. 그러나 메서드 오버로딩(overloading)인 경우는 같은 이름을 사용할 수 있다.

메서드 오버로딩 (Overloading Methods)

자바 프로그래밍 언어(Java Programming Language)는 오버로딩(overloading)을 지원한다. 자바는 메서드 간 가지고 있는 다른 특징을 가지고 구분할 수 있다. 다른 파라메터를 가지고 있다면 같은 메서드 이름이라도 같은 클래스에 존재할 수 있다. 메서드의 기능은 같은데 파라메터 타입이 다르다는 이유로 다른 이름을 지어 메서드를 여러 개 만든다는 건 비효율적이다. 이유인 즉, 나는 값을 설정하고 싶다. 그럼 set이라는 메서드 명만 알고 값은 내 맘대로 설정해서 넣으면 알아서 해당 메서드를 찾아가면 되는데 그런 기능이 없다면 엄청나게 다양한 이름의 메서드를 기억하고 찾아야 한다.

setInt(int a) setFloat(float a) setString(string a)

하지만 자바에서 지원하는 메서드 오버로딩은 단 하나의 이름으로 입력 파라메터만 다르게 해서 구현할 수 있다.

set(int a) set(float a) set(string a)

자바에서 메서드 오버로드는 메서드 이름은 같고 입력 파라메터의 개수가 다르던가, 아니면 타입이 달라야 한다. 그래야 컴파일러가 구분해서 찾을 수 있기 때문이다.

주의할 점은 컴파일러는 리턴 타입은 고려하지 않는다. 같은 메서드 명에 같은 파라메터이지만 리턴 타입이 다르다고 해서 다른 메서드로 인식하지 않는다. 오류다

사실 실전 코딩에서 가끔 사용하는데 튜토리얼에서는 가독성이 좋지 않으니 가급적 드물게 사용하라고 되어 있다.

다음 포스팅은 생성자에 대해 알아본다. 즐코딩~

반응형