Java : Class

m_ngyeong·2024년 10월 16일
0

Java

목록 보기
12/14
post-thumbnail

☕️ Java : Object-oriented programming


Class

클래스(Class)는 객체 지향 프로그래밍(OOP)의 핵심 개념 중 하나로, 객체를 정의하는 청사진(설계도)이다. 클래스는 속성(필드)행동(메서드)을 하나의 단위로 묶어 새로운 데이터 타입을 정의한다. 이 클래스에서 생성된 객체는 클래스에서 정의한 속성과 행동을 갖게 된다.

클래스의 주요 구성 요소

  • 필드(Field): 클래스의 속성 또는 상태를 저장하는 변수로 객체의 데이터(상태)를 나타냄.
    예: 사람 클래스의 이름, 나이, 주소 등.
  • 메서드(Method): 객체의 동작 또는 행동을 정의하는 함수. 필드에 접근하거나 그 값을 변경하는 역할.
    예: 걷다, 말하다, 계산하다 등의 행동을 구현.
  • 생성자(Constructor): 객체가 생성될 때 호출되는 특수한 메서드. 필드를 초기화하거나 객체를 준비하는 데 사용됨.

클래스의 정의

Java에서 클래스는 class 키워드를 사용하여 정의된다. 클래스는 속성(필드)과 행동(메서드)을 정의하고, 이 클래스로부터 여러 개의 객체를 만들 수 있다.

public class Person {
    // 필드 (속성)
    String name;
    int age;

    // 생성자
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 메서드 (행동)
    public void introduce() {
        System.out.println("My name is " + name + " and I am " + age + " years old.");
    }
}
  • 이 클래스는 Person이라는 이름을 가진 사람 객체를 정의하는 설계도.
  • 사람은 이름과 나이 속성을 가지고 있으며, 자기소개를 할 수 있는 introduce()라는 행동을 정의함.

객체 생성(Object Creation)

클래스는 설계도에 불과하므로 실제로 사용할 객체를 생성해야 한다. 객체는 new 키워드를 사용하여 생성된다.

public class Main {
    public static void main(String[] args) {
        // Person 클래스의 객체 생성
        Person person1 = new Person("Alice", 30);
        Person person2 = new Person("Bob", 25);

        // 메서드 호출
        person1.introduce(); // My name is Alice and I am 30 years old.
        person2.introduce(); // My name is Bob and I am 25 years old.
    }
}
  • person1person2는 각각 Person 클래스에서 생성된 객체임. introduce() 메서드를 호출하면 각 객체의 상태에 따라 다르게 동작함.

객체 참조(Object Reference)

객체 참조는 변수가 메모리의 객체를 가리키는 방식이다. 객체는 메모리(힙 영역)에 저장되고, 이를 참조하는 변수가 해당 객체를 가리킨다. Java에서는 모든 객체는 참조 타입 변수를 통해 접근한다.

public class Car {
    String model;

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

    public void showModel() {
        System.out.println("Car model: " + model);
    }

    public static void main(String[] args) {
        // 객체 생성 및 참조
        Car myCar = new Car("Tesla");
        
        // 참조 변수를 통해 객체의 메서드 호출
        myCar.showModel();  // Car model: Tesla

        // 또 다른 참조 변수로 동일 객체 참조
        Car anotherCar = myCar;
        anotherCar.showModel();  // Car model: Tesla
        
        // 참조 변수와 객체의 관계
        anotherCar.model = "BMW";
        myCar.showModel();  // Car model: BMW (같은 객체를 참조하므로 내용 변경 반영)
    }
}
  • myCaranotherCar는 같은 객체를 참조하고 있음.
    하나의 객체를 여러 개의 참조 변수로 가리킬 수 있음.
  • anotherCar.model을 변경하면 myCar로 참조한 객체도 변하게 됨.

클래스의 특징

  • 클래스 : 객체를 만들기 위한 틀이나 설계도.
  • 객체 : 클래스에서 정의한 속성과 행동을 가진 실제 데이터.

예를 들어, Person이라는 클래스는 "사람"을 정의한 것이고, person1person2는 각각 그 클래스에서 만들어진 실제 "사람" 객체이다.

캡슐화(Encapsulation):

필드와 메서드를 하나로 묶어 외부에서 필드에 직접 접근하지 못하게 하고, 메서드를 통해서만 필드에 접근하도록 하는 개념이다. 주로 private 접근 제어자를 사용하여 구현한다.

public class Person {
    private String name;
    private int age;

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

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

상속(Inheritance):

기존 클래스(부모 클래스, 상위 클래스)의 속성과 메서드를 자식 클래스(하위 클래스)가 물려받아 사용하는 것으로 재사용하는 개념이다. 상속을 통해 코드의 재사용성과 확장성을 높일 수 있다. Java에서는 extends 키워드를 사용하여 상속을 구현한다.

예시1:

public class Employee extends Person {
    private String company;

    public Employee(String name, int age, String company) {
        super(name, age); // 부모 클래스 생성자 호출
        this.company = company;
    }

    public void work() {
        System.out.println(name + " works at " + company);
    }
}

예시2:

// 부모 클래스
class Animal {
    String name;

    public void eat() {
        System.out.println(name + " is eating.");
    }
}

// 자식 클래스 (Animal 클래스를 상속받음)
class Dog extends Animal {
    public void bark() {
        System.out.println(name + " is barking.");
    }
}

public class InheritanceExample {
    public static void main(String[] args) {
        // Dog 객체 생성
        Dog myDog = new Dog();
        myDog.name = "Buddy";

        // 부모 클래스의 메서드 사용
        myDog.eat();  // Buddy is eating.

        // 자식 클래스의 메서드 사용
        myDog.bark(); // Buddy is barking.
    }
}
  • Dog 클래스는 Animal 클래스를 상속받아 Animal의 속성인 name과 메서드 eat()을 물려받음.
  • Dog 클래스는 추가적으로 bark()라는 메서드를 정의해 자신만의 기능을 추가함.
  • 상속은 코드 재사용의 좋은 예시이며, 자식 클래스는 부모 클래스의 속성과 메서드를 그대로 사용할 수 있음.

다형성(Polymorphism):

같은 이름의 메서드를 다양한 방식으로 동작하도록 하는 개념이다. 오버라이딩(Overriding)과 오버로딩(Overloading)을 통해 구현할 수 있다.

추상화(Abstraction):

객체의 구체적인 동작을 감추고 필요한 부분만 외부에 제공하는 개념이다. 인터페이스나 추상 클래스를 통해 구현할 수 있다.



참고문헌,
https://hyperskill.org/knowledge-map/251?track=8

profile
사용자 경험 향상과 지속적인 성장을 추구하는 프론트엔드 개발자 ʚȉɞ

0개의 댓글