오늘 한 일

  • Java 공부
    • this
      • 자신의 메모리(생성된 인스턴스 스스로)를 가리킴
        public class Person {
          String name;
          int age;
        
          public Person(String name, int age) {
            this.name = name; /*자신의 메모리를 가리킴*/
            this.age = age; /*자신의 메모리를 가리킴*/
          }
        }
        
      • 생성자에서 다른 생성자를 호출
        public class Person {
          String name;
          int age;
                
          public Person() {
            this("이름없음", 1); /*생성자에서 다른 생성자를 호출*/
          }
        
          public Person(String name, int age) {
            this.name = name;
            this.age = age;
          }
        }
        

        note: this를 이용해 다른 생성자를 호출할 때는 그 이전에 어떠한 statement도 사용할 수 없다. 클래스 생성이 완료되지 않은 시점에서 다른 코드가 들어와 있는 것이기 때문.

      • 자신의 주소를 반환함
        public class Person {
          String name;
          int age;
                
          public Person returnSelf() {
            return this; /*자신의 주소를 반환함*/
          }
        }
        
    • static 변수
      • 클래스 변수라고도 하며, 클래스의 모든 인스턴스에서 공유하는 변수가 필요할 떄 사용. (멤버변수는 인스턴스 변수라고도 한다.)
      • static 변수는 인스턴스가 생성될 때 마다 다른 메모리를 가지는 것이 아니라 프로그램이 메모리에 적재(load)될 때 데이터 영역의 메모리에 생성된다. 따라서 인스턴스의 생성과 관계없이 클래스 이름으로 직접 참조한다.
        class Student {
          static int serialNum;
        }
                  ː
                  ː
        Student.serialNum = 100; //serialNum이 static 변수
        
      • heap이 아닌 static memory 영역에 저장된다. 해당 영역에는 상수, 리터럴, 전역 변수, static 변수 등이 저장되며, 프로그램의 시작부터 종료까지 메모리에 남아있는다.
    • 변수의 유효 범위

      변수 유형 선언 위치 사용 범위 메모리 생성과 소멸
      지역 변수(로컬 변수) 함수 내부에 선언 함수 내부에서만 사용 스택 함수가 호출될 때 생성되고 함수가 끝나면 소멸함
      멤버 변수(인스턴스 변수) 클래스 멤버 변수로 선언 클래스 내부에서 사용하고 private이 아니면 참조 변수로 다른 클래스에서 사용가능 인스턴스가 생성될 때 힙에 생성되고, 가비지 컬렉터가 메모리를 수거할 때 소멸됨
      static 변수(클래스 변수) static 예약어를 사용하여 클래스 내부에 선언 클래스 내부에서 사용하고 private이 아니면 참조 변수로 다른 클래스에서 사용가능 데이터 영역 프로그램이 처음 시작할 때 상수와 함께 데이터 영역에 생성되고 프로그램이 끝나고 메모리를 해제할 때 소멸됨
    • singleton 패턴(static 응용)
      • 전 시스템에 단 하나의 인스턴스만이 존재하도록 구현하는 방식 singleton_pattern singleton_pattern_diagram

참조
Do it! 자바 프로그래밍 입문: https://www.inflearn.com/course/자바-프로그래밍-입문/dashboard