티스토리 뷰
스프링을 제대로 학습하기 전 자바의 기초 지식을 잡기 위해 복습했던 기록입니다.
참조 변수
기본타입 - 정수, 실수, 논리 -> 실제 값을 변수에 저장
참조 타입 - 배열, 열거, 클래스, 인터페이스 -> 메모리 번지를 변수 안에 저장
메모리 영역
1. 메소드 영역
- JVM이 시작될 때 생성, 모든 스레드가 공유 / 클래스들을 클래스 로더로 읽어 클래스 별로 분류해서 저장
2. 힙 영역
- 객체와 배열이 생성, JVM 스택 영역의 변수나 다른 객체의 필드에서 참조,
- 참조하는 변수나 필드가 없다면 JVM이 GC를 실행시켜 자동으로 제거
3. JVM 스택 영역
- 메소드를 호출할 때마다 프레임을 push하고 종료되면 프레임을 pop
- 프레임 내부에 로컬 변수 스택 존재
-> 참조변수의 == 가 안되는 이유? 변수에 저장된 것은 메모리 번지라서 안된다.
클래스
객체 - 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있는 식별 가능한 것
객체간의관계 - 집합 관계 - 여러개의 객체로 하나의 객체를 만드는 관계
사용 관계 - 객체 간의 상호작용(호출 등)
상속 관계 - 상위 객체를 기반으로 하위 객체를 생성하는 관계
클래스 선언 -> 접근제어자 class 클래스명
객체 생성 -> new 클래스명(); => 객체는 메모리 힙 영역에 생성
클래스의 구성요소 - 필드 - 객체의 데이터가 저장되는 곳
생성자 - 객체 생성 시 초기화 역할(자동으로 호출되는 메소드)
메소드 - 호출하면 블록 내의 내용 실행
인스턴스 멤버와 정적 멤버 -> 메모리 낭비를 막기 위해서 구분
인스턴스 멤버 - 객체마다 가지고 있는 멤버
정적 멤버 - 클래스에 위치시키고 객체들이 공유하는 멤버, 클래스에 고정, 객체를 생성하지 않고 사용 가능
- 인스턴스 필드나 인스턴드 메서드를 사용 불가능, this 키워드 사용 불가능
this - 객체 내부에서 인스턴스 멤버에 접근하기 위한 키워드
Singleton - 전체 프로그램에서 단 하나의 객체만 만들도록 보장할 때, 이때의 객체를 싱글톤이라 함
- 클래스 외부 new 연산자로 생성자 호출이 없도록 막아야 함 -> 생성자의 접근 제한자를 private로
- 정적 필드 하나 선언 후 자신의 객체를 생성하여 초기화. -> private static Singleton singleton = new Singleton();
- 외부에서 객체를 얻는 유일한 방법은 getInstance() <- (가상의) 메소드를 호출하는 것 뿐
final 필드 - 초기 값이 정해지면 수정 불가능 한 값 -> 초기값을 선언 시 초기화하거나 생성자에게서 주는 방법 뿐
상수 - 불변의 값, static final로 선언
접근 제한자 - public(외부 클래스가 자유롭게 사용), protected(같은 패키지, 자식만 사용), private , 미적용 -> default(같은 패키지)
객체의 필드를 객체 외부에서 접근하는 것을 객체지향프로그래밍에서는 지양한다. 객체의 무결성 때문 => Getter,Setter 사용