08 클래스 더 알아보기
블록(Block)과 스코프(Scope)
변수의 유효 범위를 결정하는 개념으로, 자바에서 코드의 구조와 가독성뿐만 아니라 메모리 관리에도 영향을 미칩니다. 자바에서 변수는 선언된 블록 내에서만 유효하며, 이를 스코프라고 합니다.
블록(Block)
블록은 중괄호 {}
로 둘러싸인 코드 영역을 의미합니다. 자바에서 블록은 여러 곳에서 사용되며, 일반적으로 조건문, 반복문, 메소드 등을 정의할 때 블록을 사용합니다. 블록은 코드의 실행 흐름을 제한하는 역할을 합니다.
블록의 종류
메소드 블록: 메소드 내에서 실행되는 코드 영역입니다.
조건문 블록:
if
,else
,switch
등의 조건문 내에서 사용되는 블록입니다.반복문 블록:
for
,while
,do-while
등의 반복문에서 사용되는 블록입니다.익명 블록: 메소드나 클래스 외부에서 사용되며, 별도의 문법 없이
{}
로만 감싸서 특정 코드를 묶는 블록입니다.
blockExample 패키지
스코프(Scope)
스코프는 변수나 메소드가 유효한 범위를 의미합니다. 자바에서는 변수가 선언된 블록 내에서만 접근 가능하며, 해당 블록을 벗어나면 더 이상 그 변수에 접근할 수 없습니다.
스코프의 종류
메소드 스코프: 메소드 내에서 선언된 변수는 해당 메소드 내에서만 접근할 수 있습니다. 메소드가 종료되면 해당 변수는 메모리에서 사라집니다.
클래스 스코프(필드 스코프): 클래스 내에서 선언된 변수(필드)는 클래스의 모든 메소드에서 접근 가능합니다. 이는 인스턴스 변수와 정적 변수로 나뉩니다.
인스턴스 변수는 객체가 생성될 때마다 새롭게 생성되고, 해당 객체 내에서 유효합니다.
정적 변수는 클래스 단위로 하나만 존재하며, 모든 인스턴스에서 공유됩니다.
블록 스코프: 블록 내에서 선언된 변수는 해당 블록 내에서만 유효하며, 블록이 끝나면 변수가 소멸합니다.
매개변수 스코프: 메소드의 매개변수로 전달된 변수는 해당 메소드 내에서만 유효합니다.
인스턴스의 필드는 다른 영역으로 간주하여 변수 선언 가능
instanceField 패키지
패키지
패키지(Package)는 관련된 클래스와 인터페이스들을 그룹화하여 조직화된 코드 구조를 제공하는 자바의 기능입니다. 자바에서 패키지는 클래스들을 논리적인 단위로 묶어 관리하며, 코드의 재사용성과 유지보수성을 높입니다.
자바 프로젝트의 디렉토리(폴더) - 패키지로 불리게 됨
일정 규모 이상의 프로그램을 적절히 모듈화
패키지 정보: 클래스의 구성요소 중 하나
클래스명의 중복을 피하기 위해 사용
같은 클래스명을 가져도 패키지가 다름
import
import
는 자바에서 다른 패키지에 속한 클래스나 인터페이스를 현재 클래스에서 사용할 수 있도록 해주는 키워드입니다. import
문을 사용하여 다른 패키지에 속한 클래스를 불러오면, 해당 클래스나 인터페이스를 직접적으로 접근하고 사용할 수 있게 됩니다. 이로써 패키지 내부의 클래스를 명시적인 경로 없이도 간편하게 사용할 수 있습니다.
1. 기본 import
문법
import
문법패키지이름: 사용하려는 클래스가 속한 패키지의 이름입니다.
클래스이름: 해당 패키지 내에서 사용할 클래스의 이름입니다.
또한 import 패키지이름.*;
를 사용하면 해당 패키지 내의 모든 클래스를 불러올 수 있습니다.(와일드카드)
1. Car
클래스
Car
클래스vehicles 패키지
2. Main
클래스
Main
클래스importVehicles 패키지 (vehicles 패키지랑 다른 위치)
실행 흐름
Main
클래스는vehicles
패키지의Car
클래스를 사용하려고 합니다.vehicles
패키지는Main
클래스와 다른 패키지에 속해 있으므로,import vehicles.Car;
구문을 사용해Car
클래스를 가져옵니다.이제
Car
클래스를 직접적으로 사용할 수 있습니다.
패키지와 접근 제어자의 실용적인 사용
public
과 패키지
클래스나 메소드를 외부에서 접근 가능하게 하려면
public
으로 선언하여 모든 패키지에서 접근할 수 있도록 해야 합니다.
protected
와 패키지
패키지 내부 또는 상속받은 클래스에서만 사용해야 할 때
protected
를 사용합니다. 이를 통해 외부 패키지에서는 접근을 제한하면서도 상속 관계에서는 확장할 수 있습니다.
default
와 패키지
패키지 전용 기능을 만들 때 유용합니다. 패키지 외부에서는 접근할 수 없기 때문에, 패키지 내부의 코드만 접근 가능한 유틸리티 클래스나 메소드를 만들 때 사용됩니다.
private
와 패키지
클래스 내부에서만 사용할 필드나 메소드는
private
으로 선언하여, 다른 클래스나 패키지에서 접근할 수 없게 해야 합니다.
접근 제어자
같은 클래스
같은 패키지
상속받은 자식 클래스
다른 패키지
public
O
O
O
O
protected
O
O
O
X
default
O
O
X
X
private
O
X
X
X
접근 제어자가 패키지와의 관계에서 어떻게 동작하는지를 보여줍니다.
메인 메소드
main
메소드의 역할
main
메소드의 역할자바 애플리케이션의 시작점으로, JVM이 프로그램 실행 시 가장 먼저 호출하는 메소드입니다.
프로그램이 시작되면 필요한 초기화 작업을 수행하고, 이후 다른 메소드나 객체를 생성하여 프로그램 로직을 수행합니다.
기본 main
메소드
main
메소드실행 흐름
자바 가상 머신(JVM)은 자바 애플리케이션을 실행할 때, 클래스 내의
main
메소드를 호출합니다.위의 코드에서,
main
메소드는"Hello, Java!"
를 출력하는 역할을 합니다.프로그램이 끝나면
main
메소드도 종료되며, 프로그램이 종료됩니다.
열거형(enum)
열거형(enum)은 자바에서 상수들의 집합을 정의할 때 사용하는 특별한 데이터 타입입니다. 즉, 정해진 상수들의 이름을 가진 집합을 만들고, 그 상수들만 사용할 수 있도록 하는 기능을 제공합니다. enum
을 사용하면 가독성을 높이고, 값의 범위를 제한하여 코드의 안정성과 유지보수성을 향상시킬 수 있습니다.
enum의 기본 문법
enum
은 자바에서 클래스와 비슷하게 동작하지만, 상수들을 정의하는 데 특화된 타입입니다.
enum
사용
enum
사용switch
문에서의 enum 사용
switch
문에서의 enum 사용enum 활용
enum
은 단순한 상수 집합을 넘어서, 클래스처럼 필드, 생성자, 메소드를 가질 수 있습니다. 이를 통해 각 상수에 추가적인 속성이나 동작을 부여할 수 있습니다.
필드: 상수와 연관된 속성 값입니다.
생성자: 각 상수가 생성될 때 호출되며, 필드를 초기화합니다.
메소드: 각 상수에 대한 동작을 정의합니다.
enum 활용 예제
자동차의 모델명과 가격을 속성으로 가지는 enum
을 정의하고, 필드, 생성자, 메소드를 사용하는 예제입니다.
enum 작성
enum 사용
위에 선언된 enum Car는 컴파일 시에 다음과 같은 구조의 클래스로 변환됨
Last updated