ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [자바의 정석] ch6-30 ~ ch6-41 객체지향 개념 정리 (오버로딩, 생성자, 생성자 this(), 참조변수 this, 변수의 초기화)
    Programming Language/Java 2021. 7. 16. 23:03

    ch6-30 오버로딩(overloading)

    - 한 클래스 안에 같은 이름의 메서드 여러개를 정의하는 것 

    (하나의 메서드 이름에 메서드 하나여야 하는데, 오버로딩은 하나의 메서드 이름에 여러개의 메서드)

     

    - 오버로딩이 성립하기 위한 조건 (3가지)

    1. 메서드 이름이 같아야함

    2. 매개변수의 개수 또는 타입이 달라야함

    3. 반환 타입은 영향 없음

     

    보기1 (조건1만 성립-> 오버로딩 아님) -> 메서드 중복정의 

    int add(int a, int b) { return a+b; }

    int add(int x, int y) { return x+y; }

     

    보기2 (조건1만 성립-> 오버로딩 아님) -> 메서드 중복정의

    int add(int a, int b) { return a+b; }

    long add(int a, int b) { return (long)(a+b); }

     

    보기3 (조건1, 조건2 성립) -> 오버로딩이지만 컴파일러가 어떤 메서드 호출하려고 했는지 (타입 때문에)모호하기 때문에 ambiguous 에러

    long add(int a, long b) { return a+b; }

    long add(long a, int b) { return a+b; }

     

     

    ch6-31 오버로딩(overloading) - 예제

    - 오버로딩의 올바른 예: 매개변수는 다르지만 같은 의미의 기능 수행

     

     

    ch6-32 생성자(constructor)

    - iv 초기화 메서드

    - 인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드'

    - 이름이 클래스 이름과 같아야함

    - 리턴값이 없음(void 안붙임)

    - 모든 클래스는 반드시 생성자(한 개 이상)를 가져야함

    *생성자가 하나도 없을 때 컴파일러가 기본 생성자 추가해줌

     

    Time t = new Time(); ----> 객체 생성

    t.hour = 12;

    t.minute = 34;

    t.second = 56;

     

    -> 위의 코드를 아래와 같이 한 줄로 바꿀 수 있음

    Time t = new Time(12, 34, 56); 

                       ------------------ 생성자 호출

     

     

    ch6-33 기본 생성자(default constructor)

    - 매개변수가 없는 생성자

    - 생성자가 하나도 없을 때만, 컴파일러가 기본 생성자 자동 추가

    *모든 클래스는 반드시 1개 이상의 생성자가 있어야함 (이 규칙을 지키기 위해서 생성자가 자동 추가해줌)

     

    클래스이름() { } // 기본 생성자

    Pint() { }          // Poinit 클래스의 기본 생성자

     

     

    ch6-34 매개변수가 있는 생성자

     

    Car c = new Car();

    c.color = "white";             -----> Car c = new Car("white", "auto", 4);

    c.gearType = "auto";                   1  4        2                          3

    c.door = 4;

     

                                              1. 참조변수 c 만들어짐

                                                         2. 객체 생성

                                                              3. 객체 초기화("white", "auto", 4), 생성자 호출(Car("white", "auto", 4))

                                                        4. 대입 (객체와 참조변수 연결)

     

     

    ch6-36 생성자 this()

    - 생성자에서 다른 생성자 호출할 때 사용

    - 다른 생성자 호출 시 첫 줄에서만 사용 가능

     

     

    ch6-37 참조변수 this

    - 생성자 this() 와 연관 없음

    - 인스턴스 자신을 가리키는 참조변수

    - 인스턴스 메서드(생성자 포함)에서 사용 가능

    - 지역변수(lv)와 인스턴스 변수(iv)를 구별할 때 사용

     

     

    <-------------------------------------------------------------정리------------------------------------------------------------->

    - this : 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있음       모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재

     

    - this(), this(매개변수) : 생성자, 같은 클래스의 다른 생성자 호출할 때 사용

     

    *this와 this()는 비슷하게 생겼을 뿐 완전 다른 것. this는 '참조변수'이고, this()는 '생성자'임

     

     

    ch6-38 변수의 초기화

    - 지역변수(lv)는 수동 초기화 해야함(사용전 꼭!)

    - 멤버변수(iv, cv)는 자동 초기화됨

     

    class InitTest {

         int x;               // 인스턴스 변수  (자동)

         int y = x;         // 인스턴스 변수

     

         void method1() {

              int i;           // 지역변수  (수동)

              int j = i;      // 에러. 지역변수를 초기화하지 않고 사용

         }

     

    }

     

     

    ch6-39 멤버변수의 초기화

     

    - 클래스 변수 초기화 시점: 클래스가 처음 로딩될 때 단 한번 (메모리에 올라갈 때)

    - 인스턴스 변수 초기화 시점: 인스턴스가 생성될 때 마다

     

    1. 명시적 초기화(=) -> 대입연산자 (선언 시)

     

    2. 초기화 블럭 -> 복잡한 초기화 여러문장 넣기

    - 클래스 초기화 블럭 : static { }

    - 인스턴스 초기화 블럭 : { }

     

    3. 생성자 -> iv 초기화, 복잡한 초기화

     

    -------------------------------------------------------*cv, iv 초기화1. 자동초기화 : 02. 간단초기화 : =3. 복잡초기화 : { } -> 거의 안씀   - cv 초기화-> static { }   - iv 초기화-> 생성자

     

    <-------------------------------------------------------------정리------------------------------------------------------------->

    1. cv 초기화 -> iv 초기화 (초기화 시점)

    2. 자동 -> 간단 -> 복잡 (초기화 순서)

     

     

     

    ============================================================================

    https://youtu.be/2rDeHSO4bdw

     

     

    댓글

Designed by Tistory.