[Java] 클래스

2025. 4. 16. 13:11Java

객체 : 물리적으로 존재하거나 추상적으로 생각할 수 있는 식별 가능한 모든 것

  • 객체는 속성과 기능으로 구성
  • 객체는 서로의 메서드를 호출하여 상호작용하며, 이를 통해 프로그램이 구성됨
  • 상호작용 시 객체들은 전달인자와 반환값으로 데이터를 주고받음
    • 전달인자(매개값, Argument): 메서드를 호출할 때 전달하는 데이터
    • 반환값(리턴값, Return Value): 메서드가 실행 후 돌려주는 결과값

 

img

객체 지향 프로그래밍 (Object-Oriented Programming, OOP)

  • 객체들을 먼저 만들고, 이 객체들을 하나씩 조립해서 완성된 프로그램을 만드는 기법
  • 코드의 재사용성과 유지보수성을 높이는 것이 장점
  • 특징 : 추상화, 캡슐화, 상속, 다형성

 

클래스

  • 객체를 생성(생성자)하고, 객체가 가져야할 데이터(필드)가 무엇이고, 객체의 동작(메소드)은 무엇인지 정의
  • 필드, 생성자, 메소드 등으로 구성
public class Car {
    // 필드 선언
    String model;
    int speed;

    // 생성자 선언
    Car(String model) {
        this.model = model;
    }

    // 메소드 선언
    void setSpeed(int speed) {
        this.speed = speed;
    }
}
Car myCar = new Car();
System.out.println("모델: " + myCar.model);
myCar.speed = 60;  // 필드값 변경

 

  • 필요시 매개변수를 달리하는 생성자를 여러개 선언하는 생성자 오버로딩 을 사용
  • 생성자가 오버로딩되어 있을 경우, new 연산자로 생성자를 호출할 때 제공되는 매개값의 타입과 수에 따라 생성자가 결정
 Car() { }

    Car(String model) {
        this.model = model;
    }

    Car(String model, String color) {
        this.model = model;
        this.color = color;
    }

 

가변 길이 매개변수

  • 메서드 호출 시 매개변수의 개수를 동적으로 지정할 수 있게 해주는 기능
// 가변 길이 매개변수
int sum(int... values) {
    int sum = 0;
  for(int i = 0; i < values.length; i++) {
      sum += values[i];
  }
  return sum;
}

 

정적(static) 멤버

  • 클래스에 고정된 멤버로서 객체 생성 없이 사용할 수 있는 필드와 메서드
  • 정적 멤버는 static 키워드를 사용하며, 클래스가 메모리에 로딩되는 시점에 JVM의 Method Area에 생성됨
  • 정적 메서드 안에서는 인스턴스 멤버를 직접 사용할 수 없음
  • this 키워드 사용 불가
  • 객체가 필요 없는 공통적인 데이터나 기능을 정적으로 선언

 

final 필드

  • 한 번 초기화되면 값을 변경할 수 없는 필드

 

Getter / Setter 메서드

  • 접근 제한자(public, private, default, protected)에 따라서 접근을 제한하는 역할이 클래스마다 나뉘기 때문에 필요
  • Getter: private 필드의 값을 반환하는 메서드 (외부에서 필드 값을 얻어감)
  • Setter: private 필드의 값을 변경하는 메서드 (외부에서 필드 값을 변경함)
public class Person {
    private String name;    // private 필드

    // Getter 메서드
    public String getName() {
        return name;
    }

    // Setter 메서드
    public void setName(String name) {
        this.name = name;
    }
}

장점

  • 데이터 은닉(Data Hiding): 필드를 private으로 선언하여 외부에서 직접 접근을 막음
  • 유효성 검사: setter 메서드에서 데이터의 유효성을 검증할 수 있음
  • 읽기 전용 필드 설정: getter만 제공하고 setter는 제공하지 않으면 읽기 전용 필드를 만들 수 있음
  • 캡슐화 강화: 내부 구현을 숨기고 필요한 경우 구현 방식을 변경할 수 있음

 

싱글톤 패턴 (Singleton)

  • 객체의 인스턴스가 오직 1개만 생성되는 것을 보장하는 디자인 패턴
  • 클래스의 인스턴스가 하나만 생성됨 → 생성자를 private으로 만들어 외부 접근을 제한
  • 생성된 인스턴스에 대한 전역 접근점을 제공 → 하나의 인스턴스를 외부에서 얻어가서 사용

참고자료

'Java' 카테고리의 다른 글

[Java] 컬렉션 자료구조  (1) 2025.04.30
[Java] Multi Thread  (1) 2025.04.29
[Java] 제네릭  (0) 2025.04.29
[Java] 인터페이스  (1) 2025.04.21
[Java] 상속  (1) 2025.04.17