회고할것

공부하는 챕터와 상관없이 헷갈렸던 기본적인 객제지향개념들

❓ 객체와 인스턴스

클래스가 있을 때, 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 한다.
결국 같은의미라고 생각할 수 있지만 의미하는 범위는 [객체 > 인스턴스] 로 객체가 조금 더 포괄적이고 인스턴스는 구체적이다.

예시를 들자면 '학생'이라는 것은 그냥 객체라고 말할 수 있지만 Student라는 클래스 안에서의 '학생'은 인스턴스라고 말하는것이 좋다.

❓기본 생성자

모든 클래스에서 생성자는 반드시 하나 이상 정의되어야한다.
그렇기때문에 우리가 클래스 내에 생성자를 하나도 정의해주지 않았다면 컴파일러는 자동으로 기본 생성자를 추가하여 컴파일한다.

이것은 어디까지나 클래스 내에 생성자가 '하나도 없는 경우'에만 해당한다는점!

        class Person {
            String name;
        }
        class Student {
            String name;
            Student(String n) {
                name = n;
            }
        }

Person 클래스의 경우 생성자가 하나도 없기 때문에 컴파일러가 기본생성자를 추가해주었다.

      class Test {
          public static void main(String[] args) {
              Person person = new Person();
              Student student = new Student();}} //컴파일에러

그러나 Student의 경우 이미 생성자 Student(String n)이 정의되어 있기때문에 컴파일러가 기본생성자를 추가해주지않아 컴파일에러가 발생하게된다.

여기서 오류를 해결하고 싶다면 Student 클래스에 생성자 Student()를 추가로 정의해주거나 new Student(n) 생성자를 사용해주면 된다.

❗️초기화

  1. 초기화 기본값
자료형기본값
booleanfalse
byte, short, int0
참조형 변수null
  • 인스턴스 변수는 초기화 해주지 않아도 자동으로 자료형의 기본값에 따라 초기화된다.
  • 지역변수는 자동적으로 초기화되지 않으므로 지역변수의 초기화는 필수적이다.

  1. 멤버변수 초기화방법
  • 명시적 초기화 : 변수를 선언과 동시에 초기화 하는 것.
    가장 기본적이고 간단한 방법으로 우선적 고려하기.
    ex)
        class Bus {
            int busNum = 4212; //기본형 변수 초기화
            Color color = new Color(); //참조형 변수 초기화
        }
  • 생성자
  • 초기화 블럭 : 명시적 초기화가 복잡할 경우 사용
    생성자보다 인스턴스 초기화 블럭이 먼저 수행된다.

  1. 위의 내용을 바탕으로 알아본 초기화 순서

    (1) 클래스 초기화 (처음 메모리에 로딩될 때 차례대로 수행)
    기본값-명시적 초기화-클래스 초기화 블럭

    (2) 인스턴스 초기화 (인스턴스 생성할 때 차례대로 수행)
    기본값-명시적 초기화-인스턴스 초기화 블럭-생성자
  • 클래스변수는 인스턴스변수보다 항상 먼저 생성되고 초기화됨.


느낀점

객체지향의개념을 완전히 깨닫기엔 아직도 한참 먼 것 같다..
추천방식대로 꾸준히 반복학습 할 예정입니다.

profile
이안이의 우당탕탕 개발기

0개의 댓글