티스토리 뷰

Java

다시 복습하는 JAVA [1/3]

GiHoo 2023. 5. 24. 23:19

스프링을 제대로 학습하기 전 자바의 기초 지식을 잡기 위해 복습했던 기록입니다.

 

참조 변수

기본타입 - 정수, 실수, 논리 -> 실제 값을 변수에 저장

참조 타입 - 배열, 열거, 클래스, 인터페이스 -> 메모리 번지를 변수 안에 저장

 

메모리 영역 

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 사용

공지사항
최근에 올라온 글
최근에 달린 댓글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30