코딩과 결혼합니다

230917 - 자바의 정석 chapter 06 (261p ~307p) 본문

2세/Java

230917 - 자바의 정석 chapter 06 (261p ~307p)

코딩러버 2023. 9. 17. 22:43
728x90

JVM 메모리 구조

  • 메서드 영역 : 클래스에 대한 정보를 저장
  • 힙 : 실행 중 생성되는 인스턴스는 모두 이곳에서 생성
  • 호출스택 : 메서드가 작업을 수행하는 동안 지역변수들과 연산의 중간결과 등을 저장
호출스택+
- 메서드가 호출되면 수행이 필요한 만큼의 메모리를 스택에 할당받는다.
- 메서드가 수행을 마치고 나면 사용했던 메모리를 반환하고 스택에서 제거된다.
- 호출스택의 제일 위에 있는 메서드가 현재 실행 중인 메서드이다.
- 아래에 있는 메서드가 바로 위의 메서드를 호출한 메서드이다.

 

 

매개변수

  • 기본형 매개변수
    • 변수의 값을 읽기만 할 수 있다.
    • 변수의 값을 변경을 하였을 때, 원본이 아닌 복사본이 변경된 것이라 원본에는 아무런 영향을 미치지 못하는 것.
  • 참조형 매개변수
    • 변수의 값을 읽고 변경할 수 있다.
    • 저장된 곳의 주소를 알 수 있기 때문에 값을 읽어 오는 것은 물론 값을 변경하는 것도 가능

 

 

재귀호출 

      - 메서드의 내부에서 메서드 자신을 다시 호출하는 것으로 재귀호출을 하는 메서드는 '재귀 메서드'라 한다.

  • 반복문보다 재귀호출의 수행시간이 더 오래 걸린다.
  • 하지만 논리적 간결함 때문에 쓰이기도 한다.
  • 재귀호출은 비효율적이므로 재귀호출에 드는 비용보다 재귀호출의 간결함이 주는 이득이 충분히 큰 경우에 사용

 

 

 

메서드

  • 클래스 메서드(static 메서드)
    • static이 붙어 있으면 클래스 메서드
    • 인스턴스와 관계없는 메서드를 클래스 메서드로 정의
  • 인스턴스 메서드
    • 인스턴스 변수와 관련된 작업을 하는, 즉 메서드의 작업을 수행하는데 인스턴스 변수를 필요로 하는 메서드

 

 

 

오버로딩

      - 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것 = '메서드 오버로딩' , 또는  '오버로딩'이라 한다.

  • 조건
    1. 메서드 이름이 같아야 한다.
    2. 매개변수의 개수 또는 타입이 달라야 한다.
  • 가변인자와 오버로딩
    • 가변인자는 '타입... 변수명'과 같은 형식으로 선언
    • 가변인지 외에도 매개변수가 더 있다면, 가변인자를 매개변수 중에서 제일 마지막에 선언해야 한다.

 

 

생성자

    - 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'

  • 기본 생성자 : 모든 클래스에는 반드시 하나 이상의 생성자가 정의되어 있어야 한다. 컴파일러가 자동으로 생성자를 추가해 주지만 '클래스 내에 생성자가 하나도 없을 때'에 한해서 이다.
  • 매개변수가 있는 생성자 : 인스턴스를 생성하는 동시에 원하는 값으로 초기화할 수 있게 된다.
  • 생성자에서 다른 생성자 호출하기 - this(), this
    • 생성자의 이름으로 클래스이름 대신 this를 사용한다.
    • 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다.
    • this 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있다.
    • this() 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용한다.

 

 

변수의 초기화

     - 변수를 선언하고 처음으로 값을 저장하는 것. 가능하면 선언과 동시에 적절한 값으로 초기화하는 것이 바람직하다.

     - 멤버변수(클래스변수, 인스턴스변수)와 배열의 초기화는 선택적이지만, 지역변수의 초기화는 필수적이다.

  • 명시적 초기화 : 변수를 선언과 동시에 초기화
  • 초기화 블럭 
    • 클래스 초기화 블럭 : 클래스변수의 복잡한 초기화에 사용
    • 인스턴스 초기화 블럭 : 인스턴스변수의 복잡한 초기화에 사용