때늦은.. 자바 (다시정리해본다는 뜻)

최고고·2025년 1월 22일
0

접근제한자

접근 제어자의 종류
- private : 모든 외부 호출을 막는다.
- default (package-private): 같은 패키지안에서 호출은 허용한다.
- protected : 같은 패키지안에서 호출은 허용한다. 패키지가 달라도 상속 관계의 호출은 허용한다.
- public : 모든 외부 호출을 허용한다
차단 -------------------------------- 허용
private -> default -> protected -> public

캡슐화(Encapsulation)

- 속성(데이터)과 기능(처리 메서드)을 하나로 묶음 - 외부에서의 접근을 제한함 (직접적 변경 방지)
- 외부에 꼭 필요한 기능만 노출하고 나머지는 모두 내부로 숨기는 것

객체의 데이터는 메서드를 통해서 접근해야함 데이터를 숨겨야함!

자바 메모리 구조

메서드 영역, 스택 영역, 힙 영역 세개로 나뉨

  • 메서드 영역(Method Area):
    - 메서드 영역은 프로그램을 실행하는데 필요한 공통 데이터 관리 / 살행시 한번 로드됨
    - 프로그램의 모든 영역에서 공유
    - 클래스 정보를 보관
    ⬇️ 저장내용 ⬇️
    - 클래스 정보
    - static 영역: static 변수들을 보관
    - 런타임 상수 풀: 프로그램을 실행하는데 필요한 공통 리터럴 상수를 보관
  • 스택 영역(Stack Area):
    - 실제 프로그램이 실행되는 영역
    - 메서드 실행시 하나씩 쌓이고 메서드 종료시 제거됨 ---> 스택프레임
    - 각 쓰레드별로 하나의 실행 스택이 생성됨
  • 힙 영역(Heap Area):
    - 객체(인스턴스)와 배열이 생성되는 영역
    - new 명령어를 사용시 이 영역을 사용함
    - 가비지 컬렉션(GC)이 이루어지는 주요 영역 / 더 이상 참조되지 않는 객체는 GC에 의해 제거됨
    - 모든 스레드가 공유

메소드 영역: 프로그램의 설계도. (클래스와 메소드가 정의된 청사진)
힙 영역: 저장 창고. (필요한 데이터를 동적으로 저장하는 공간)
스택 영역: 작업 공간. (작업을 수행하기 위한 임시 공간)

static 변수

  • 클래스와 함께 메모리에 로드됨
  • 프로그램이 실행되고 클래스가 처음 로드될 때 메모리에 할당되기 때문에 객체를 생성하지 않아도 클래스를 통해 접근이 가능하다. -- 클래스변수임
  • 동일한 클래스에서 생성된 모든 객체가 같은 static 변수를 공유함
  • 주의 : 모든 객체가 공유하므로 값이 변경될 경우 모든 객체에 영향을 미침
  • 메모리 위치 : 힙영역
  • static 메소드 역시 클래스로 바로 접근 가능하다.

static 메서드

  • static 메서드는 static 만 사용할 수 있다.
  • 클래스 내부의 기능 사용 시 static 이 붙은 정적 메서드나 정적 변수만 사용할 수 있음
  • 모든 곳에서 static 을 호출가능
  • 접근 제어자만 허락한다면 클래스를 통해 모든 곳에서 static을 호출할 수 있음
  • 클래스를 통해 바로 접근가능
  • static import을 활용하자 ex) import static package이름.클래스명.*;

main()는 정적메서드

  • 인스턴스 생성 없이 실행하는 가장 대표적인 메서드
  • JVM이 프로그램 실행을 위해 반드시 호출해야 하므로 이름이 고정되어 있음
  • 인자 값 String[] args : 커맨드라인 인수를 받을 수 있는 배열.
  • public static void main(String[] args) 형태가 반드시 필요 -- > 안그러면 JVM 실행이 안됨

멤버 변수(필드)의 종류

- 인스턴스 변수:
static 이 붙지 않은 멤버 변수
인스턴스를 생성해야 사용할 수 있음
객체 생성 시 각각 할당
객체를 통해서만 접근 가능
객체마다 독립적으로 유지
메모리 위치 : 힙영역
- 클래스 변수: static 이 붙은 멤버 변수

final 변수

  • 선언 시 초기화하거나, 생성자에서 초기화해야함 --값을 한 번만 초기화
  • 일반적으로 상수를 정의할 때 사용하며, 이름을 대문자로 작성하는 것이 관례임
  • 상수는 변하지 않고, 항상 일정한 값을 갖는 수인데, 자바에서는 단 하나만 존재하는 변하지 않는 고정된 값인 static final 키워드를 사용한다

final 메서드 / final 클래스

  • 메서드를 오버라이딩할 수 없도록 고정하기 위함 / 클래스를 상속할 수 없도록 고정

상속 extends

  • 기존 클래스(부모 클래스)의 특성과 동작을 새 클래스(자식 클래스)에 재사용하거나 확장
  • 코드 재사용성, 유지보수성 높임, 확장성(오버라이딩)
  • 부모 클래스 (Parent Class):
    다른 클래스에 상속되는 기본 클래스.
    슈퍼클래스(Superclass)라고도 함.
  • 자식 클래스 (Child Class):
    부모 클래스의 특성과 동작을 상속받는 클래스.
    서브클래스(Subclass)라고도 함.
  • private 접근 제한자로 선언된 멤버는 상속되지 않음
  • 단일 상속 ---> 대안 : 인터페이스를 사용함으로 다중 구현 가능
  • super 키워드 : 부모 클래스의 멤버(필드, 메서드)에 접근하거나 부모 클래스의 생성자를 호출할 때 사용
    - 상속 관계를 사용하면 자식 클래스의 생성자에서 부모 클래스의 생성자를 반드시 호출해야 함
    - 부모클래스의 생성자가 기본생성자일경우 super() 생략 가능 (자동 호출됨)
    - 부모클래스의 생성자가 매개변수가 있는 생성자라면 호출하려면 명시적으로 작성해야 함. super(pram);
    - super()는 생성자의 첫 줄에 작성되어야 함
  • 상속과 메모리 구조
    자식 생성시 내부에서는 상속관계에 있는 부모 인스턴스까지 생성함
    자식 메서드 호출시 자식에서 찾고, (호출하는 변수타입에 따라 찾음) 하지만 자식에서 해당 메서드가 없을 경우 부모클래스에서 찾는다. --- 못찾으면 컴파일 오류 발생!
  • 자식클래스에서 새로운 기능 추가 가능
  • 상속 받은 메서드를 재정의 하는 것 - 오버라이딩
  • 메서드 오버로딩은 ?? 메서드 이름이 같고 매개변수가 다른 메서드를 여러개 정의하는 것
  • static , final , private 키워드가 붙은 메서드는 오버라이딩 x
  • 생성자는 오버라이딩 할 수 없다.

0개의 댓글