👍 무엇을 새롭게 알았는지
- JVM 메모리 구조
- Method Area
- 프로그램 시작 시 정보가 저장
- 클래스 정보(.class 파일) 가 올라가는 곳.
- 클래스의 메서드 정보, static 변수 등이 저장
- 모든 객체가 공유하는 공용 공간 - Stack Area
- 가장 위에 있는 접시를 먼저 꺼내듯 비슷한 구조
- 선입후출(LIFO) 구조 입니다. 먼저 들어온 것이 가장 늦게 나간다는 뜻
- 메서드가 호출될 때마다 새로운 접시한장(스택프레임)이 쌓임
- 가장 위의 접시(최근 호출된 메서드)가 먼저 실행
- 메서드 실행이 끝나면 스택에서 제거 - Heap Area
- new 키워드로 생성된 객체가 저장되는 곳
- 객체의 실제 데이터가 저장되고 데이터의 주소는 stack 영역에 저장
- Method Area
- 래퍼클래스
- 기본자료형을 객체로 감싸는 클래스를 의미
- 래퍼클래스가 담겨 있는 변수도 참조형 변수와 같으나, 출력 시 메모리 주소값이 나오지 않는 것이 차이
- 내부적으로 toString()이 오버라이딩 되어 있기 때문!
- 왜 사용하는가?
- 기본형은 객체와 같이 속성, 기능을 가질 수 없음, 그러나 객체는 기능 제공이 가능
- 기본형을 감싼 객체를 만들어 기능을 제공하면 편리하게 데이터처리를 할 수 있음
- 오토박싱 vs 언박싱
- 래퍼클래스 ↔︎ 기본형으로 형변환은 굉장히 자주 일어남
- Java에서는 이 형변환 과정을 자동으로 지원해 줌
- 기본형 연산과 래퍼형 연산의 성능 비교
- 래퍼형은 내부적으로 데이터를 감싸고 있기때문에 연산시 불리
- 객체에서 기본형 값을 꺼내서 연산하는 추가작업이 발생
- 이런 추가 작업때문에 기본형보다 래퍼클래스는 연산 속도가 느림
- 빠른 작업이 필요한 경우 기본형을 직접 활용하는 것이 좋은 선택
- Static
- static 키워드로 선언된 변수와 메서드는 MethodArea에 저장됨
- static은 공유가 필요한 곳에 사용되어야 함
- static 메서드에서는 인스턴스 변수에 접근할 수 없음
- 객체가 먼저 생성되어야 하는데 생성없이 접근할 수 없는 것
- 쉽게 정리하자면 객체마다 다를 필요 없이 항상 똑같아야 하는 것일 때 static을 사용함 ⭐️
- final
- final의 용도
- 변수는 변경이 불가능하게 함
- 클래스는 상속할 수 없게 함
- 메서드는 수정할 수 없게 만듬(오버라이딩 불가)
- 상수 : 변하지 않고 항상 일정한 값을 갖는 수
- Java에서는 상수를 대문자로 표현하는 것이 관례
- 변경되면 안되는 값이므로 static fianl 키워드를 사용해 선언
- static으로 선언하는 이유는 여러곳에서 값을 공유해 쓰일 목적으로 활용
- final의 용도
인터페이스
- 인터페이스는 설계 표준
- 클래스가 따라야 할 최소한의 공통 규칙을 정의하는 역할
- 최소한의 규격을 정의하고 세부 구현은 각 클래스에서 진행하고 확장할 수 있도록 함
- 인터페이스를 응용하여 인터페이스 다중구현, 인터페이스 다중 상속 처리를 할 수 있음
- 인터페이스에 변수를 선언하는 경우는 자동으로 상수로 선언됨
- static 선언으로 인하여 구현체 없이 활용 가능
- static 선언으로 인하여 구현체 없이 활용 가능
인터페이스 - 캡슐화
- 캡슐화를 통해 정보를 보호하고 필요한 경우에만 안전하게 접근할 수 있도록 할 수 있음
- 기본적으로 접근제어자의 개념에 대해 이해를 바탕으로 작업이 진행되어야 함
접근제어자
| 접근제어자 | 클래스 내부 | 패키지 내부 | 상속한 클래스 | 전체 공개 |
| public | 🟢 | 🟢 | 🟢 | 🟢 |
| protected | 🟢 | 🟢 | 🟢 | ❌ |
| default | 🟢 | 🟢 | ❌ | ❌ |
| private | 🟢 | ❌ | ❌ | ❌ |
캡슐화가 적용된 클래스는 데이터를 private으로 보호하고 있음
이에 따라 데이터 조회나 변경이 필요한 경우에 안전한 접근방법을 요구함
그 과정을 수행할 수 있는 메서드 개념이 게터(Getter) 와 세터(Setter)
- 게터(Getter) : 데이터를 안전하게 접근하기 위해 사용
- 세터(Setter) : 데이터를 안전하게 설정/변경하기 위해 사용
- 단, 무분별한 세터를 방지하여 보호된 데이터를 목적에 맞게 활용될 수 있도록 작업하는 것이 중요!
'JAVA' 카테고리의 다른 글
| [JAVA] 자바 개념 확장 - Generic, Lambda, Stream, Thread (0) | 2025.09.17 |
|---|---|
| [JAVA] 자바 개념 확장 - Exception, Optional, Colletion (0) | 2025.09.17 |
| JAVA 문법 규칙 및 GitHub 커밋 컨벤션 학습 (0) | 2025.09.15 |
| JSP/Servlet 기초 (1) | 2025.09.05 |
| Thymleaf (0) | 2025.09.05 |