오늘 한 일

  • Java 공부
    • class
      • class는 대부분 문자로 시작한다
      • 하나의 Java 파일에 하나의 class를 두는게 원칙이나 여러개의 class가 같이 있는 경우 public class는 단 하나여야 한다. 또한 이 public class와 java 파일의 이름은 동일해야 한다.
      • java의 모든 코드는 class 내부에 위치해야 한다.
      • class 내의 main 함수는 class의 메서드가 아니다. 그저 시작점으로 호출되는 부분이다.
    • package는 소스 코드를 계층 구조로 관리하도록 구성하는 것이다.
    • 메서드 객체의 기능을 제공하기 위해 class 내부에 구현되는 함수이다.
    • instance
      class —— 생성(인스턴스화) ——> instance
      (static code)   (dynamic memory)
      • 객체(object): 구체적, 추상적 데이터 단위. 생성된 인스턴스.
    • instance & heap memory
      • 하나의 클래스 코드로부터 여러개의 인스턴스가 생성된다. 각 인스턴스는 heap memory에 생성되는데, 각각의 인스턴스는 다른 메모리에 다른 값을 가진다. 각 인스턴스 영역에는 멤버 변수가 저장된다. 메서드는 heap에 저장되지 않는다.
      • Student 클래스에서 생성한 두 객체를 각각 참조 변수 studentLee와 studentSong에 할당했을 때, stack과 heap은 다음과 같은 상태일 것이다.
        public class Student {
          int studentID;
          String studentName;
          String address;
          int grade;
        
          public static void main(String[] args) {
            Student studentLee = new Student();
            Student studentSong = new Student();
          }
        }
        

        instanceAndHeap

    • stack & heap
      • stack
        • Heap 영역에 생성된 Object 타입의 데이터의 참조값(메모리 주소)이 할당된다.
        • 원시(primitive) 타입의 데이터가 실제 값과 함께 할당된다. ex) byte, short, int, float, …
        • 지역변수들은 scope 에 따른 visibility 를 가진다.
        • 각 Thread 는 자신만의 stack 을 가진다. 즉, 스레드 하나가 새롭게 생성되는 순간 해당 스레드를 위한 stack 도 함께 생성되며, 각 스레드에서 다른 스레드의 stack 영역에는 접근할 수 없다.
      • heap
        • 주로 긴 생명주기를 가지는 데이터들이 저장된다. (대부분의 오브젝트는 크기가 크고, 서로 다른 코드블럭에서 공유되는 경우가 많다) 애플리케이션의 모든 메모리 중 stack 에 있는 데이터를 제외한 부분이라고 보면 된다. 모든 Object 타입(Integer, String, ArrayList, …)은 heap 영역에 생성된다.
        • Heap 영역에 있는 오브젝트들을 가리키는 레퍼런스 변수가 stack 에 올라가게 된다.
        • 몇개의 스레드가 존재하든 상관없이 단 하나의 heap 영역만 존재한다.
    • constructor(생성자)
      • default 생성자는 기존에 생성자가 존재하지 않을 시에만 컴파일러가 생성해준다. 따라서 하나 이상의 생성자를 작성해 사용하는 경우, 기존의 default 생성자가 필요하다면 직접 작성해야 한다.
      • 생성자는 메서드가 아니다. 상속되지 않으며, 리턴값은 없다.
      • 여러 개의 생성자가 하나의 클래스에 있을 수 있다.(생성자 오버로드)
    • 참조 자료형(reference data type) 클래스 형으로 선언하는 자료형

      변수의 자료형 예시
      기본 자료형 int, long, float, double, …
      참조 자료형 String, Date, Student, …
    • information hiding(정보 은닉)
    • 접근 제어자 접근 가능 범위
      public 모든 곳에서 접근 가능
      protected 상속 관계까지 접근 가능
      default 같은 package 내에서 접근 가능
      private 해당 클래스 내에서만 접근 가능

참조