본문 바로가기

java

자바강의 6일차

1. 오버로딩(overloading)

   1-1) 오버로딩이란?

          - 한 클래스 내에 같은 이름의 메소드를 여러개 정의하는 것을 '메소드 오버로딩(method overloading)' 또는 간단히 오버로딩(overloading)이라고 한다.

          - 하나의 메소드 이름으로 여러 기능을 구현하기 위해 사용한다.

 

   1-2) 오버로딩의 조건

           ① 메소드 이름이 같아야 한다.

           ② 매개변수의 개수또는타입이 달라야 한다.

                    - 메소드의 이름이 같더라도 매개변수가 다르면 서로 구별될 수 있기 때문에 오버로딩이 가능하다.

                    - 반환타입은 오버로딩을 구현하는데 아무런 영향도 주지 못한다.

    

    1-3) 오버로딩의 장점

           - 하나의 이름을 사용하고 기억하면 되므로 '이 메소드는 이름이 같으니 같은 기능을 하겠구나'라고 쉽게 예측이 가능하다.

           - 메소드 이름을 절약할 수 있다.

            ==> 작명고민을 덜 수 있는 동시에 사용되어야 할 메소드이름을 다른 메소드의 이름으로 사용할 수 있다. 

 

2. 생성자(Constructor)

   2-1) 생성자란?

         - 생성자는 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메소드'이다.

         - 즉 인스턴스 변수의 초기화 작업에 주로 사용되며, 인스턴스 생성시에 실행되어야 할작업을 위해서도 사용된다.

         - 생성자의 조건은 다음과 같다.

             ① 생성자의 이름은 클래스의 이름과 같다.

             ② 생성자는 리턴값이 없다.

          - new 연산자가 인스턴스를 생성하는 것이지 Data()와 같은 생성자가 인스턴스를 생성하는것이 아니다.

              Data d = new Data();

               ① 연산자 new에 의해서 메모리(heap)에 Data 클래스의 인스턴스가 생성된다.

               ② 생성자 Data()가호출되어 수행된다.

               ③ 연산자 new의 결과로 생성된 Data인스턴스의 주소가 반환되어 참조변수 d에 저장된다.

      2-2) 기본생성자(default constructor)

              - 지금까지는생성자를 모르고도 프로그래밍을 해왔지만 사실 모든 클래스에는 반드시 하나 이상의 생성자가정의되어 있어야 한다.

              - 지금까지 클래스에 생성자를 정의하지 않고도 인스턴를 생성할 수 있었던이유는 컴파일러가 제공하는 기본 생성자 덕분이었다.

              - 기본 생성자가 컴파일러에 의해서  추가되는경우는 클래스에 정의된 생성자가하나도 없을 때 뿐이다.

 

      2-3) 매개변수가 있는 생성자

              - 생성자도 메소드처럼 매개변수를 선언하여 호출 시 값을 넘겨받아 인스턴스의 초기화 작업에 사용할 수 있다.

              - 인스턴스마다 각기 다른 값으로 초기화디어야 하는 경우가 많은데 매개변수를 사용한 초기화는 매우 유용하다.

 

      2-4) 생성자에서 다른생성자 호출하기 - this(), this

               - 같은 클래스의 멤버들 간에 서로 호출할 수 있는 것처럼 생성자간에서 서로 호출이 가능하다.

                  단, 다음 두 조건을만족 시켜야 한다.

                       ① 생성자의 이름으로 클래스이름 대신 this()를 사용한다.

                       ② 한 생성자에서 다른 생성자를 호출 할 때는 반드시 첫 줄에서만 호출이 가능하다.

 

                - 생성자에서 다른 생성자를 첫 줄에서만 호출이 가능하도록 한 이유는 생성자 내에서 초기화 작업도중에

                  다른 생성자를 호출하게 되면, 호출된 다른생성자 내에서도 멤버변수들의 값을 초기화 할 것이므로

                  다른생성자를 호출하기 이전의 초기화 작업이 무의미해질 수 있기 때문이다.

                - this()는 생성자를 의미하고, this는 참조변수로 인스턴스 자기 자신을 가리킨다는 차이점에 유의하자.     

 

3. 변수의 초기화

      3-1) 변수의초기화 

          - 변수를 선언하고 처음으로 값을 저장하는 것을 '변수의 초기화'라고 한다.

          - 멤버변수는 초기화를 하지 않아도 자동적으로 변수의 자료형에 맞는 기본값으로 초기화가 이루어지지만,

            지역벼수는 사용하기전에 반드시 초기화를 해야한다.

          - 멤버변수의 초기화 방법은 아래와 같다.

            ① 명시적 초기화(explicit intialization)

            ② 생성자(constructor)

            ③ 초기화 블록(initialization block)

                  - 인스턴스 초기화블록             : 인스턴스 변수를 초기화 하는데 사용

                  - 클래스 초기화 블록               : 클래스 변수를 초기화 하는데 사용

     

      3-2) 명시적 초기화

            - 변수를 선언과 동시에 초기화 하는 것을 명시적 초기화라고 한다.

            - 가장 기본적이면서도 간단한 초기화 방법이므로 여러 초기화 방법 중에서 가장 우선적으로 고려되어야 한다.

   

      3-3) 초기화 블록

            - 초기화 블록에는 '클래스초기화 블록'과 '인스턴스 초기화 블록' 두 가지 종류가 있다.

            - 클래스 초기화 블록은 클래스 변수(static)의 초기화에 사용되고, 인스턴스 초기화 블록은 인스턴스 변수의 초기화에 사용된다.

            - 초기화블록 작성 시 인스턴스 초기화 블록은 단순히 클래스내에 블록{}을 만들고 그 안에 코드를 작성하기만 하면된다.

            - 클래스 초기화 블록은 인스턴스 초기화 블록 앞에 단순히static을 덧붙이기만 하면 된다.

            - 클래스 초기화 블록은 메모리에 로딩될 때 한번만 수행되지만, 인스턴스 초기화 블록은 인스턴스가

              생성될 때 마다 수행되며 생성자보다 인스턴스 초기화 블록이먼저 실행된다.

 

        3-4) 멤버변수의 초기화시점과순서

             

                클래스 변수의 초기화 시점                    클래스가 처음 로딩될 때 단한번만 초기화 된다.

                인스턴스변수의 초기화 시점                  인스턴스가 생성될 때마다 각 인스턴스별로 초기화가 이루어진다.

 

                클래스 변수의 초기화 순서                    기본값 -> 명시적 초기화 -> 클래스초기화블록

                인스턴스변수의 초기화 순서                 기본값 -> 명시적 초기화 -> 인스턴스 초기화 블록 -> 생성자

 

'java' 카테고리의 다른 글

자바강의 8일차  (0) 2024.01.15
자바강의 7일차  (0) 2024.01.14
자바강의 5일차  (0) 2024.01.10
자바강의 4일차  (0) 2023.12.30
자바강의 3일차  (1) 2023.12.27