[이것이 자바다] 05. 클래스
안녕하세요. 이번에는 자바의 핵심이라고도 할수있는 클래스에 대해 정리한 내용입니다. 객체지향 언어를 배울때 이런 객체의 개념을 아는것이 정말 중요한데, 확실히 자바로 개념을 익히니까 다른 언어에서 이런 클래스가 나와도 사용하기가 더 쉬워지는것 같습니다.
1. 클래스 사용 이유
- 서로 연관된 데이터를 따로 관리하는건 매우 비효율적이며, 오류를 유발할 수 있습니다.
- 객체 지향 프로그래밍(OOP)
- 각 대상을 하나의 객체(Object)로 선언, 객체의 설계도 == 클래스(Class)입니다.
- 클래스 == 속성(필드) + 행동(메서드)로 이루어져 있습니다.
2. 클래스와 객체
- 클래스(Class)
- 객체 설계도
- 데이터와 기닝을 정의합니다.
- 객체(Object)
- 클래스를 바탕으로 만들어진 실체(Instance)입니다.
- 메모리 공간 차지, 고유한 데이터를 저장합니다.
- 객체 생성 행위 : 인스턴스화(Instantiation)
- 생성된 객체 : 클래스의 인스턴스(Instance)라고 부릅니다.
// 객체의 설계도(클래스)
public class 클래스이름 {
// 필드 (Field): 객체의 데이터, 속성
타입1 이름1;
타입2 이름2;
...
}
// 클래스 객체 생성
클래스이름 클래스변수 = new 클래스이름(); // 'new' 연산자로 객체 생성(인스턴스화)
- 클래스 객체 : 참조 변수입니다.
- 실제 힙(Heap) 메모리의 주소값을 저장합니다.
3. 3가지 핵심 구성요소
필드 / 생성자 / 메소드
필드 (Fields)
- 클래스 블록
{}에 선언된 변수. 객체의 데이터(멤버 변수)입니다. - 사용법
클래스변수.필드이름.으로 접근합니다.
생성자 (Constructors)
new연산자로 객체 생성 할때 호출됩니다.- 호출되며 객체의 필드를 초기화합니다.
- 규칙
- 생성자 이름 == 클래스 이름
- 리턴 타입이 없음
- 기본 생성자 (Default Constructor)
- 생성자 안만들면 자바 컴파일러가
public 클래스이름() {}형태 빈 생성자를 자동 추가합니다.
- 생성자 안만들면 자바 컴파일러가
- 생성자 오버로딩
- 객체 생성 방법 여러 가지 제공합니다.
- 매개변수의 타입, 개수, 순서 바꾸면서 오버로딩합니다.
public class 클래스이름 {
타입1 이름1;
// 생성자 1: 기본 생성자
public 클래스이름() {
}
// 생성자 2
public 클래스이름(타입 이름) {
this.이름1 = 이름;
// this == 이 객체 자신
}
// 생성자 3
public 클래스이름(타입 이름1, 타입 이름2) {
this.이름1 = 이름2;
}
}
this/this():this.필드명- 매개변수 이름 == 필드 이름
- 이 객체 자신의 필드임을 명시합니다.
this()- 생성자 내부에서 사용합니다.
- 같은 클래스의 다른 생성자 호출합니다.
- 반드시 생성자 첫 줄 위치해야 합니다.
public 클래스이름(String 변수1, String 변수2) {
this(변수1, 변수2, 값); // 아래의 생성자를 호출함
}
public 클래스이름(String 변수1, String 변수2, int 변수3) {
this.변수1 = 변수1;
this.변수2 = 변수2;
this.변수3 = 변수3;
}
메소드 (Methods)
- 객체의 동작, 기능을 정의하며
like 함수와 같습니다.
리턴타입 메소드이름(매개변수, ...) {
실행할 코드;
return 값;
}
리턴 타입
- 메소드가 끝나고
return할 값의 타입입니다. - 리턴 없으면
void입니다. return- 메소드 실행 즉시 중단
return뒤의 값 반환
- 메소드가 끝나고
메소드 오버로딩 (Method Overloading)
- 클래스 내부 이름은 같지만 매개변수의 타입, 개수, 순서 바꾸면서 오버로딩합니다.
4. 인스턴스 멤버 vs 정적 멤버
인스턴스 멤버 (Instance Member)
- 객체 소유입니다.
- 객체 생성 >> 객체 내부 독립적인 공간 할당됩니다.
- 반드시 객체 생성 >>
참조변수.멤버이름형태로 접근합니다.
정적(static) 멤버
- 클래스 소유입니다.
- 프로그램 시작 시 클래스 자체에 한 번만 고정 공간 할당됩니다.
- 객체 생성 X >>
클래스이름.멤버이름형태로 바로 접근합니다. - 모든 객체가
static멤버 공유합니다.
- 공용 데이터
- 모든 객체가 동일한 값을 공유할때 사용합니다.
- 유틸리티 기능
- 객체의 상태와 상관없이 결과 도출할 때 사용합니다.
static 사용 주의사항
- 정적(static) 메소드 내부 인스턴스 멤버 사용 불가합니다.
- 인스턴스 멤버 : 객체가 생성되어야만 존재하기 때문입니다.
- but, 인스턴스 메소드에서
static멤버 사용 가능합니다.
5. final 키워드
final필드: 상수(Constant)화- 단 한 번만 초기화 가능 이후 값 변경 불가합니다.
final클래스: 마지막 자식- 다른 클래스가 상속(
extends) 불가능합니다.
- 다른 클래스가 상속(
final메소드:- 자식 클래스에서 오버라이딩(재정의) 불가능합니다.
6. 패키지와 접근 제한자
패키지 (Package)
- 연관된 클래스 묶음 관리 폴더입니다.
- 클래스의 이름 중복 방지, 체계적 코드 관리합니다.
import- 다른 패키지의 클래스 사용하기 위해 해당 클래스 경로 명시합니다.
접근 제한자 (Access Modifier)
외부 접근 범위 제한 >> 데이터 보호, 의도치 않은 사용방지 (캡슐화)합니다.
public- 완전 공개.
- 어떤 클래스에서든 접근가능합니다.
protected- 가족 공개.
- 같은 패키지 or 상속 관계 다른 패키지의 자식 클래스에서만 접근 가능합니다.
default- 이웃 공개.
- 아무것도 안적으면
default, 같은 패키지의 클래스에서만 접근 가능합니다.
private- 나만 공개.
- 해당 클래스 내부에서만 접근 가능합니다.
Getter와 Setter 메소드
private필드를 외부에서 안전하게 접근할 수 있도록 하는public메소드입니다.Getter- 필드 값 읽어서 반환합니다.
Setter- 외부로부터 필드 값을 변경합니다.
ex)
public class Car {
private int speed; // 외부에서 직접 수정 불가
// Getter
public int getSpeed() {
return speed;
}
// Setter
public void setSpeed(int speed) {
if (speed < 0) { // 유효성 검사
this.speed = 0;
return; // 음수 속도는 무시
}
this.speed = speed;
}
}
감사합니다.
'Language > JAVA' 카테고리의 다른 글
| [이것이 자바다].ch7.인터페이스 (0) | 2025.12.27 |
|---|---|
| [이것이 자바다].ch6.상속 (1) | 2025.12.26 |
| [이것이 자바다].ch4.참조타입 (3) | 2025.12.25 |
| [이것이 자바다].ch3.조건문과 반복문 (0) | 2025.12.25 |
| [이것이 자바다].ch2.연산자 (0) | 2025.09.28 |