공부 내용을 정리하고 앞으로의 학습에 이해를 돕기 위해 작성합니다.
기본편 강의를 2/3 정도 들었다.
아는 내용들은 간략하게 정리하고 중요하다고 판단되는 단원은 상세하게 기록할 것이다.
공부내용
패키지
1. 패키지는 모두 소문자로 작성 (관례)
2. 패키지의 이름과 위치는 폴더 위치와 같아야 함 (필수)
3. 패키지 이름 앞 부분은 일반적으로 회사의 도메인 이름을 거꾸로 사용
4. 패키지를 구성할 때 서로 관련된 클래스는 하나의 패키지에 모으고, 관련이 적은 클래스는 다른 패키지로 분리하는 것이 좋음
접근 제어자
1. 접근 제어자의 종류
- private : 모든 외부 호출을 막음
- default : 같은 패키지안에서 호출은 허용
- protected : 같은 패키지안에서 호출은 허용, 패키지가 달라도 상속 관계의 호출은 허용
- public : 모든 외부 호출을 허용
2. 접근 제어자를 명시하지 않으면 패키지 안에서 호출을 허용하는 default 접근 제어자가 적용
3. 클래스 레벨의 접근 제어자는 public, default만 사용할 수 있음
4. 객체의 데이터는 객체가 제공하는 기능인 메서드를 통해서 접근해야 함
자바 메모리 구조와 static
1. 메모리 구조
(비유)
자바의 메모리 구조는 메서드, 스택, 힙 영역 3개로 나눔
- 메서드 영역 : 클래스 정보를 보관
- 스택 영역 : 실제 프로그램이 실행되는 영역. 메서드를 실행할 때마다 하나씩 쌓임
- 힙 영역 : 객체(인스턴스)가 생성되는 영역. new 명령어를 사용하면 이 영역을 사용함. (배열도 이 영역에 생성)
(실제)
- 메서드 영역
- 프로그램을 실행하는데 필요한 공통 데이터를 관리
- 프로그램의 모든 영역에서 공유
- 스택 영역
- 자바 실행 시 하나의 실행 스택이 생성됨
- 각 스택 프레임은 지역 변수, 중간 연산 결과, 메서드 호출 정보 등을 포함
- 힙 영역
- 객체(인스턴스)와 배열이 생성되는 영역
- 가비지 컬렉션(GC)이 이루어지는 영역 (참조되지 않는 객체는 GC에 의해 제거됨)
※ 스레드 수만큼 스택 영역 생성
※ 인스턴스 변수는 각각 메모리가 할당/ 메서드는 공통으로 관리
2. 스택
- 자바는 스택 영역을 사용해서 메서드 호출과 지역 변수(매개변수 포함)를 관리함
- 메서드는 호출하는 만큼 스택 프레임에 쌓임
- 스택 프레임이 종료되면 지역 변수도 함께 제거
- 스택 프레임이 모두 종료되면 프로그램도 종료
3. static 변수
- static 키워드를 사용하면 공용으로 함께 사용하는 변수 생성 가능
- 멤버 변수에 static을 붙이면, static 변수/ 정적 변수 / 클래스 변수 라고 함
- static이 붙은 정적 변수에 접근하려면.(dot) + 변수명으로 접근하면 됨
- 자신의 클래스에 있는 정적 변수는 클래스명 생략 가능
- 멤버 변수(필드)의 종류
- 인스턴스 변수(static X)
- 인스턴스를 생성해야 사용 가능
- 인스턴스를 만들 때마다 생성
- 클래스 변수(static O)
- 클래스 변수/ 정적 변수/ static 변수 등으로 불림
- 클래스에 바로 접근해서 사용 가능
- 여러 곳에서 공유하는 목적
- 인스턴스 변수(static X)
- 변수와 생명주기
- 지역 변수(매개변수 포함)
- 스택 프레임이 제거되면 함께 제거됨 -> 생존 주기 짧음
- 인스턴스 변수
- 힙 영역에서 GC가 발생 전 까지는 생존 -> 생존 주기 김
- 클래스 변수
- JVM이 로딩되는 순간 생성되고 종료될 때 제거 -> 생존 주기 가장 김
- 지역 변수(매개변수 포함)
4. static 메서드
- 메서드 앞에 static을 붙이면 정적 메서드, 클래스 메서드라고 함
- static이 붙지 않은 인스턴스 메서드는 인스턴스를 생성해야 호출 가능
- static 메서드는 static만 사용 가능
- 클래스 내부 기능을 사용할 때 정적 메서드는 인스턴스 변수 or 인스턴스 메서드 사용 불가
- 특정 인스턴스의 기능을 사용하려면 참조값을 알아야 하는데 정적 메서드는 참조값 없이 호출하기 때문
- 접근 제어자만 허락한다면 클래스를 통해 모든 곳에서 호출 가능
- main() 메서드는 인스턴스 생성 없이 실행하는 가장 대표적인 메서드
마무리
메모리 구조와 static 부분이 이해가 잘 안 돼서 강의를 두 번 돌려보고 블로그에 정리를 하니 이해가 더 잘 되는 것 같다.
강사님이 강의 중간중간 단축키와 꿀팁을 말해주시는데 실무에서 자주 쓰인다고 하니 잘 외워놓아야겠다.
앞으로 글을 다시 볼 때 요약한 부분을 보고 전체 내용이 떠오를 수 있게끔 요약하는 습관을 들이도록 노력해 봐야겠다.
'BackEnd > Java' 카테고리의 다른 글
인프런 실전 자바 기본편(3) (0) | 2024.06.27 |
---|---|
인프런 실전 자바 기본편(1) (0) | 2024.06.23 |