본문 바로가기
BackEnd/Java

인프런 실전 자바 기본편(2)

by 개발 Blog 2024. 6. 25.

공부 내용을 정리하고 앞으로의 학습에 이해를 돕기 위해 작성합니다.

 

기본편 강의를 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 변수 등으로 불림
      • 클래스에 바로 접근해서 사용 가능
      • 여러 곳에서 공유하는 목적
  • 변수와 생명주기
    • 지역 변수(매개변수 포함)
      • 스택 프레임이 제거되면 함께 제거됨 -> 생존 주기 짧음
    • 인스턴스 변수
      • 힙 영역에서 GC가 발생 전 까지는 생존 -> 생존 주기 김
    • 클래스 변수
      • JVM이 로딩되는 순간 생성되고 종료될 때 제거 -> 생존 주기 가장 김

4. static 메서드

  • 메서드 앞에 static을 붙이면 정적 메서드, 클래스 메서드라고 함
  • static이 붙지 않은 인스턴스 메서드는 인스턴스를 생성해야 호출 가능
  • static 메서드는 static만 사용 가능
    • 클래스 내부 기능을 사용할 때 정적 메서드는 인스턴스 변수 or 인스턴스 메서드 사용 불가 
    • 특정 인스턴스의 기능을 사용하려면 참조값을 알아야 하는데 정적 메서드는 참조값 없이 호출하기 때문
  • 접근 제어자만 허락한다면 클래스를 통해 모든 곳에서 호출 가능
  • main() 메서드는 인스턴스 생성 없이 실행하는 가장 대표적인 메서드

 

마무리

메모리 구조와 static 부분이 이해가 잘 안 돼서 강의를 두 번 돌려보고 블로그에 정리를 하니 이해가 더 잘 되는 것 같다. 

강사님이 강의 중간중간 단축키와 꿀팁을 말해주시는데 실무에서 자주 쓰인다고 하니 잘 외워놓아야겠다.

앞으로 글을 다시 볼 때 요약한 부분을 보고 전체 내용이 떠오를 수 있게끔 요약하는 습관을 들이도록 노력해 봐야겠다.

'BackEnd > Java' 카테고리의 다른 글

인프런 실전 자바 기본편(3)  (0) 2024.06.27
인프런 실전 자바 기본편(1)  (0) 2024.06.23