코딩 공부/Java

[Java] Chpater 2- 01) 클래스와 객체

sintory-04 2025. 2. 25. 14:01

    1️⃣ 클래스란?

    : 객체를 만들 때 필요한 청사진이다.

    - Java에서 클래스는 객체를 만들 때 필요한 청사진(설계도) 이다.

    - 클래스의 첫 글자가 대문자이다.

    2️⃣ 객체

    - 실제로 존재하는 것이다.

    • 우리가 주변에서 볼 수 있는 컴퓨터, 계산기, 자동차 같은 사물들이 객체
    • 추가로 어떤 개념이나 논리 같은 것들도 객체가 될 수 있음
    • 예를 들어 덧셈, 뺄셈 등 눈에 보이지 않은 것들도 무형의 객체가 될 수 있음
    • 클래스가 준비되어 있다면 클래스를 기준으로 여러 객체들을 만들어 낼수 있음

    - Person.class 사람이라는 객체를 만들면서 확인해보자.

    • 클래스는 객체를 만들기 위한 설계도이다.
    • Person 클래스는 사람 객체를 만들기 위한 설계도이다.
    • 객체를 만들때 new 라는 키워드를 사용한다.
    • 객체를 만드는 과정을 인스턴스화 라고 표현한다.
    • 인스턴스화가 되면 Java 메모리 상에 객체가 만들어진다.
    public class Person() { 
            ...
    }
    public class Main {
    
            public static void main(String[] args) {
                    Person personA = new Person(); // ✅ 첫번째 객체 생성 
                    Person personB = new Person(); // ✅ 두번째 객체 생성
            }
    }

    3️⃣ 클래스 구조(속성, 생성자, 기능)

    - 클래스 구조는 1. 속성, 2. 생성자. 3. 기능 부분으로 나누어집니다.

    class 클래스 {
    
            // 1. 속성
    
            // 2. 생성자
    
            // 3. 기능
    }

    1. 속성 Property, field

    • 객체는 속성(특징)을 작성하는 곳
    • 객체를 생성해야 속성에 접근 가능
    • 이 속성들은 변수로 표현
    • 프로퍼티(property), 필드(field)라고도 함.
    • 사람의 속성을 예로 들면 나이, 이름, 주소 등이 해당

    2. 생성자

    • 객체를 만들 때 사용합니다.
    • 객체를 어떻게 만들지 정의해 놓는 것입니다. - 조립설명서
    • 생성자가 없으면 클래스를 객체화 시킬 수 없습니다.(조립불가)

    1)\ 기본 생성자

    • 클래스를 생성하면 기본 생성자는 자동으로 추가가 됩니다.
    • 그렇기 때문에 우리는 클래스를 객체화 시킬 수 있었습니다.
    • 아래의 코드가 숨겨져 있는 것이다.
    Class() {}
    • 하지만, 생성자를 만들어 주게될 시, 기본 생성자(위의코드) 가 사라지게 된다.

    2)\ 생성자의 특징

    - 1 반환자료형이 없다.

    • 반환 값이 없다는 것은 return을 주지 않아도 된다는 것.

    - 2 클래스 명과 이름이 똑같다.

    • 클래스 명과 똑같이 해주어야 한다.
    public class People(){
        // 1. 속성
        int age ;
        // 2. 생성자: 클래스의 이름과 같은 걸 볼 수 있다.
        People(int age){
            this.age = age;
        }
    }
    • Main 에서는 생성자 대로 인스턴스화 시켜주어야 한다 !
    public class Main {
            public static void main(String[] args) {
                    Person personA = new Person(); // ❌ 에러발생
                    Person personB = new Person(); // ❌ 에러발생
            }
    }

    - 3 여러 개가 존재할 수 있다.

    • 아래와 같이 여러개가 존재할 수 있다.
      public class People(){
        // 1. 속성
        int age ;
        String args;
        // 2. 생성자: 클래스의 이름과 같은 걸 볼 수 있다.
        People(int age){
            this.age = age;
        }
        People(int age, String args){
            this.age = age;
            this.args = args;
        }
      }

    3. 기능(메서드)

    • 객체의 기능을 나열하는 곳이다.
    • 클래스와 관련된 기능을 작성하는 것이 좋다.
    • 메서드를 활용하는 것이 객체의 기능을 활용하는 것이다.
    // 예시 코드
    class Person {
            // 속성 정의
            ...
            // 생성자 정의
            ...
            // 기능 정의
            // ✅ 사람의 소개 기능
            void introduce() {
                    System.out.println("안녕하세요.");
                    System.out.println("나의 이름은 " + this.name + "입니다.");
                    System.out.println("나이는 " + this.age + "입니다.");
            }
    
            // ✅ 사람의 더하기 기능
            int sum(int a, int b) {
                    int result = a + b;
                    return result;
            }
    }

    1) Getter

    - 클래스의 속성을 가져오는 기능이다.

    // People 클래스
    String getName() {
            return this.name;
    }
    
    int getAge() {
            return this.age;
    }
    
    String getAddress() {
            return this.address;
    }
    • 위의 코드에서 Getter 기능을 정의하면 Main 에서 접근 가능하다.
    String name = person.getName();
    int age = person.getAge();
    String address = person.getAddress();

    2) Setter

    - 객체의 속성을 외부에서 설정할 수 있게 해준다.

    void getName(String name) {
            this.name = name;
    }
    
    void getAge(int age) {
            this.age = age;
    }
    
    void setAddress(String address) {
            this.address = address;
    }
    public class Main {
    
            public static void main(String[] args) {
                    Person personA = new Person("gygim", 20);
                    Person personB = new Person("Steve", 15);
    
                    personA.setAddress("서울"); // ✅ personA 의 주소 설정
                    personB.setAddress("미국"); // ✅ personA 의 주소 설정
    
            }
    }