20201022_TIL
by Haebin Seo
오늘 한 일
- 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(); } }
- 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 영역만 존재한다.
- stack
- constructor(생성자)
- default 생성자는 기존에 생성자가 존재하지 않을 시에만 컴파일러가 생성해준다. 따라서 하나 이상의 생성자를 작성해 사용하는 경우, 기존의 default 생성자가 필요하다면 직접 작성해야 한다.
- 생성자는 메서드가 아니다. 상속되지 않으며, 리턴값은 없다.
- 여러 개의 생성자가 하나의 클래스에 있을 수 있다.(생성자 오버로드)
-
참조 자료형(reference data type) 클래스 형으로 선언하는 자료형
변수의 자료형 예시 기본 자료형 int, long, float, double, … 참조 자료형 String, Date, Student, … - information hiding(정보 은닉)
-
접근 제어자 접근 가능 범위 public 모든 곳에서 접근 가능 protected 상속 관계까지 접근 가능 default 같은 package 내에서 접근 가능 private 해당 클래스 내에서만 접근 가능
- class
참조
- stack & heap: https://yaboong.github.io/java/2018/05/26/java-memory-management/
- Do it! 자바 프로그래밍 입문: https://www.inflearn.com/course/자바-프로그래밍-입문/dashboard
Subscribe via RSS