공부 기록/개념정리

[객체 지향] JAVA _ 접근 제어자, static, 객체와 클래스

코딩걈자 2024. 4. 19. 19:15
반응형

접근 제어자

=> 클래스, 변수, 메서드 등의 접근 가능한 범위를 지정하는 데 사용

  • 객체 지향의 특징인 '정보 은닉'을 위해 제공되는 기능, 접근 권한을 구체화 할 수 있음
  • public
    • 외부로 공개되며, 해당 객체를 사용하는 프로그램 어디에서나 직접 접근할 수 있음
  • protected
    • 부모 클래스에 대해서는 public처럼 취급되고, 외부에서는 private멤버처럼 취급
    • 같은 클래스, 같은 패키지, 자식클래스(다른패키지)에서 접근 가능
  • default
    • 접근 제어의 기본값, 같은 클래스, 같은 패키지에 속하는 멤버만 접근 가능
  • private
    • 외부에 공개되지 않고, 직접 접근할 수 없는 클래스 멤버 => 해당 객체의 public 메소드를 통해 접근
    • 해당 멤버를 선언한 클래스에서만 접근 가능
접근제어자 같은 클래스 멤버 같은 패키지 멤버 자식클래스 멤버 그 외 영역
public o o o o
protected o o o x
default o o x x
private o x x x

static

=> 'static' 키워드는 클래스 수준에 정적 변수와 메서드를 선언할 때 사용되며, 객체의 인스턴스와는 독립적으로 사용됨

  • '정적인, 고정된' => static이 붙는 변수나 메서드는 어떤 객체에 소속되는 것이 아닌 클래스에 고정되어 있는 것
  • 메모리에 고정적으로 할당, 메모리의 static 영역에 적재되고 프로그램이 종료될 때 해제됨
    • static이 붙지 않으면 객체가 생성될 때마다 호출 => 각 객체들에서 공통적으로 하나의 값이 유지되어야 할 경우 static 사용
  • 객체 생성 없이 사용 가능, static 메서드 내에서는 인스턴스 변수를 사용할 수 없음
    • main함수를 static으로 구현하여 바로 실행할 수 있도록 해줌
  • static이 과도하게 많을 경우 메모리 과부화 가능, 테스트가 어려울 수 있고, 오버라이딩이 불가능
  • 특정 클래스나 인스턴스에 종속되지 않고, 재사용이 가능하며, 범용 기능을 제공하는 유틸리티성 메서드에 사용
  • final을 앞에 붙이면 그 값을 변경할 수 없음

객체와 클래스

=> 클래스는 객체를 만들기 위한 설계도이며, 객체는 그 설계도에 다라 만들어진 실제 사물이나 개념. 객체지향프로그래밍에 코드 재사용성을 높이고, 프로그램 구조를 체계적으로 관리할 수 있도록 해줌.

  •  클래스
    • 객체를 생성하기 위한 템플릿의 역할, 객체의 속성(상태)과 행동(메소드)을 정의함
    • class 키워드 사용
    • JVM메모리의 클래스 영역에 로드됨
  • 객체
    • 자신의 속성을 가지고 있고, 다른것과 식별 가능한 것
    • 클래스에 정의된 속성과 행동을 가지고 있는 인스턴스, 클래스를 기반으로 메모리에 할당된 실체
    • 클래스의 인스턴스화
    • new키워드로 생성
//클래스
class Car{
	Striing color;
    void drive(){
    	System.out.println("Driving");
        }
 	}
    
Car myCar = new Car(); //객체