본문 바로가기
프로그래밍/JAVA

초보 자바 프로그래밍(49) - 클래스(Class)의 개념

by 머니테크리더 2023. 5. 9.
반응형

자바 클래스의 개념 대표 이미지
자바 클래스의 개념 대표 이미지

🔖 INDEX

     

     

    클래스는 객체 지향 프로그래밍 언어에서 가장 중요한 개념 중 하나로, 객체를 생성하기 위한 설계도 또는 틀입니다. 클래스를 사용하여 객체의 상태(state)와 동작(behavior)을 정의할 수 있으며, 이를 통해 코드의 재사용성, 모듈화 및 유지 보수가 용이해집니다.

     

    클래스의 목적

    클래스는 객체를 만들기 위한 목적으로 사용됩니다. 객체는 현실 세계의 개체를 표현하며, 상태와 동작을 가지고 있습니다. 클래스를 사용하면 이러한 객체의 공통된 특성을 한 곳에 모아 정의할 수 있습니다. 이를 통해 객체의 일관성을 유지할 수 있고, 변경이 필요한 경우 클래스만 수정하면 되므로 유지 보수가 쉬워집니다.

     

    클래스의 구성 요소

    클래스는 주로 다음과 같은 구성 요소로 이루어져 있습니다.

    • 멤버 변수 (Member Variables): 클래스의 속성을 정의합니다. 객체의 상태를 저장하는 데 사용됩니다.
    • 메서드 (Methods): 클래스의 기능을 정의합니다. 객체의 동작을 구현하는 데 사용됩니다.
    • 생성자 (Constructors): 객체 생성 시 초기화 작업을 수행합니다. 객체가 생성될 때 자동으로 호출되는 메서드입니다.

     

    클래스의 선언

    자바에서 클래스를 선언하는 방법은 다음과 같습니다.

    class 클래스명 {
        // 멤버 변수 선언
        // 메서드 선언
    }

    예를 들어, "사람"이라는 클래스를 선언해 보겠습니다.

    class Person {
        String name; // 이름
        int age; // 나이
    
        // 메소드 선언
        void introduce() {
            System.out.println("안녕하세요, 제 이름은 " + name + "이고 나이는 " + age + "살입니다.");
        }
    }

     

     

    객체 생성

    클래스는 객체를 생성하기 위한 설계도입니다. 클래스는 객체를 생성할 때 사용되며, 한 번 정의된 클래스를 통해 여러 개의 객체를 생성할 수 있습니다. 객체는 클래스를 통해 생성된 실체입니다. 각 객체는 독립적인 상태와 행동을 가지며, 클래스의 멤버 변수와 메서드를 공유합니다.

    클래스를 선언한 후에는 클래스를 통해 객체를 생성할 수 있습니다. 객체를 생성하기 위해 'new' 키워드를 사용하며, 이때 생성자를 호출하여 객체를 초기화합니다. 객체 생성 후, 참조 변수를 통해 해당 객체를 참조하게 됩니다. 

     

    예를 들어, "Person" 클래스를 이용해 객체를 생성하고 사용해 보겠습니다.

    public class Main {
        public static void main(String[] args) {
            // 객체 생성
            Person person = new Person();
            person.name = "홍길동";
            person.age = 25;
    
            // 객체의 메소드 호출
            person.introduce();
        }
    }

    클래스를 이해하고 사용하게 되면 객체 지향 프로그래밍의 핵심 개념들을 이해하고 활용할 수 있게 됩니다. 클래스를 사용하여 객체를 생성하고 관리하면, 프로그램의 구조가 명확해지고 코드의 가독성이 향상됩니다. 또한, 클래스를 통해 객체 간의 상호 작용을 구현함으로써 프로그램의 유연성과 확장성을 높일 수 있습니다.

     

    객체를 활용한 프로그래밍 이해하기

    객체를 활용한 프로그래밍은 객체 간의 상호 작용을 통해 프로그램을 구현하는 방법입니다. 객체는 각자의 상태와 행동을 가지며, 객체 간의 메시지를 주고받아 동작하게 됩니다. 이를 통해 코드의 재사용성, 모듈화, 캡슐화 등 객체지향 프로그래밍의 장점을 실현할 수 있습니다.

    예를 들어, "Person" 클래스와 "Company" 클래스를 만들고 객체를 활용해 프로그래밍하는 예제를 살펴보겠습니다.

    class Person {
        String name;
        int age;
    
        Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        void introduce() {
            System.out.println("이름: " + name + ", 나이: " + age);
        }
    }
    
    class Company {
        String companyName;
        Person ceo;
    
        Company(String companyName, Person ceo) {
            this.companyName = companyName;
            this.ceo = ceo;
        }
    
        void showCompanyInfo() {
            System.out.println("회사 이름: " + companyName);
            System.out.print("대표자: ");
            ceo.introduce();
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Person ceo = new Person("김철수", 45);
            Company company = new Company("철수네 회사", ceo);
    
            company.showCompanyInfo();
        }
    }

    위 예제에서는 "Person" 클래스와 "Company" 클래스를 정의하고, 객체를 생성하여 서로 상호작용하는 모습을 확인할 수 있습니다. 이렇게 객체를 활용하면 코드의 가독성과 재사용성을 높일 수 있습니다.

     

     

    클래스 간의 관계

    클래스는 다음과 같은 관계를 가질 수 있습니다.

    • 상속 (Inheritance): 한 클래스가 다른 클래스의 속성과 메서드를 물려받는 관계입니다. 이를 통해 코드 재사용성을 높이고 중복 코드를 줄일 수 있습니다.
    • 연관 (Association): 한 클래스가 다른 클래스의 객체를 멤버 변수로 가지는 관계입니다. 클래스 간의 상호 작용을 표현할 때 사용됩니다.
    • 집합 (Aggregation): 한 클래스가 다른 클래스의 객체를 멤버 변수로 가지되, 두 객체의 생명주기가 독립적인 관계입니다.
    • 포함 (Composition): 한 클래스가 다른 클래스의 객체를 멤버 변수로 가지되, 두 객체의 생명주기가 의존적인 관계입니다.

     

    클래스의 접근 제한자

    클래스의 멤버 변수와 메서드에는 접근 제한자를 사용하여 외부에서의 접근을 제한할 수 있습니다. 접근 제한자는 다음과 같습니다.

    • public: 모든 클래스에서 접근 가능합니다.
    • protected: 같은 패키지 내의 클래스와 하위 클래스에서 접근 가능합니다.
    • (default): 같은 패키지 내의 클래스에서만 접근 가능합니다. 접근 제한자를 생략하면 기본적으로 default가 됩니다.
    • private: 클래스 내부에서만 접근 가능합니다. 이를 통해 클래스의 캡슐화를 지원하며, 코드의 안전성과 유지 보수성을 높일 수 있습니다.

     

    이처럼 클래스를 이해하고 활용하게 되면 객체 지향 프로그래밍의 핵심 개념들을 이해하고 활용할 수 있게 됩니다. 클래스를 사용하여 객체를 생성하고 관리하면, 프로그램의 구조가 명확해지고 코드의 가독성이 향상됩니다. 또한, 클래스를 통해 객체 간의 상호 작용을 구현함으로써 프로그램의 유연성과 확장성을 높일 수 있습니다.

     

     

    댓글