[Java] 클래스(Class)_1

SeoYoon·2024년 11월 12일

💗JAVA

목록 보기
15/21

1. 객체 지향 프로그래밍

  • 객체(Object) : 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있ㄴ으면서 식별 가능한 것
  • 필드(Field) : 개체의 속성
  • 메서드(Method) : 객체의 동작, 객체들 사이의 상호작용 수단


2. 객체 간의 관계

2-1. 집합 관계(Aggregation & Composition)

: 집합 관계는 한 객체가 다른 객체를 포함하는 관계

(1) Aggregation(집합)

  • 전체-부분 관계
  • 약한 결합이라고도 함
  • ex.) 학교학생 관계
    : 학교는 여러 학생을 포함하지만, 학생은 학교와 관계없이 독립적으로 존재할 수 있음

(2) Composition(향상)

  • 전체-부분 관계
  • 강한 결합이라고도 함
  • 부분 객체는 전체 객체에 종속되어 있으며, 전체 객체가 사라지면 부분 객체도 함께 사라짐
  • ex.) 의 관계
    : 집이 없어지면 방도 존재할 수 없음


2-2. 사용 관계(Dependency)

  • 사용 관계는 한 클래스가 다른 클래스의 기능을 일시적으로 사용하는 관계
  • 의존 관계라고도 불리며, 주로 메서드 내부에서 다른 객체를 생성하거나 메서드를 호출할 때 나타냄
  • ex.) 주문서 클래스가 상품 클래스를 사용하는 경우


2-3. 상속 관계(Inheritance)

  • 상속 관계는 클래스 간의 계층 구조를 나타내며, 부모 클래스의 속성과 메서드 자식 클래스가 물려받는 관계
  • IS-A관계로 불리며, 자식 클래스는 부모 클래스의 특성을 그대로 가져가면서 확장할 수 있음
  • ex.) 동물(Animal)개(Dog)의 관계


3. 객체와 클래스

  • 클래스(Class)

    - 설계도, 붕어빵 틀
    - 객체를 생성하기 위한 필드와 메서드가 정의되어 있는 곳

  • 인스턴스(Instance) :
    - 붕어빵
    - 클래스로부터 만들어진 객체


3-1. 객체 지향 프로그래밍의 개발 3단계

  1. 클래스 설계

  2. 설계된 클래스로 객체 생성

  3. 생성된 객체 이용



4. 클래스 선언

4-1. 자바의 식별자 작성 규칙

  • 하나 이상의 문자로 이루어져야 함 : Car, Book...
  • 첫 글자에는 숫자가 올 수 없음 : 1Car(X)
  • $, _ 외의 특수문자 사용 불가능
  • 자바 키워드는 사용 불가 : int, double ...

**public 접근 제한자는 파일 이름과 동일한 이름의 클래스 선언에만 붙일 수 있음



5. 객체 생성과 클래스 변수

new 클래스();

- new는 클래스로부터 객체를 생성시키는 연산자

- new 연산자 뒤에는 생성자가 오는데 생성자는 클래스()의 형태를 가지고 있고, new연산자로 생성된 객체는 메모리 힙heap영역에 생성시킨 후에 객체의 번지를 리턴함
** 이 주소를 참조 타입인 클래스 변수에 저장해두면 변수를 통해 객체 사용 가능

- 객체 지향 프로그램에서는 메모리 내에서 생성된 객체의 위치를 모르면 객체를 사용할 수 없음



6. 예시 코드

class Person {
	// 인스턴스 변수(객체마다 개별적으로 존재)
    String name;
    int age;
    
    // 클래스 변수(모든 객체가 공유)
    static int count = 0;
    
    // 생성자
    public Person(String name, int age) {
    	this.name = name;
        this.age = age;
        count++; // 객체가 생성될 때마다 count 증가
    }
    
    // 인스턴스 메서드
    pubilc void printInfo() {
    	System.out.println("Name: " + name + ", Age: " + age);
        
    // 클래스 메서드(클래스 변수 접근)
    public static void printCount() {
    	System.out.println("Total number of people : " + count);
    }
    
    public static void main(String[] args) {
    	// 객체 생성
        Person person1 = new Person("Alice", 25);
        Person person2 = new Person("Bob", 30);
        
        // 인스턴스 메서드 호출(클래스 변수 확인)
        Person.printCount();
    }
}

6-1 예시코드 출력 결과

Name : Alice, Age : 25
Name : Bob, Age : 30
Total number of people : 2

7. 클래스 구성 요소

(1) 필드(Field)

- 클래스 내부에 선언된 변수
- 객체가 생성될 때 속성(데이터)을 저장하기 위해 사용
- 인스턴스 변수와 클래스(static) 변수로 나눔

class Car {
	// 인스턴스 변수(각 객체마다 개별적으로 존재)
    String model;
    int year;
    
    // 클래스 변수(모든 객체가 공유)
    static int totalCars;

- modelyear는 각 객체마다 개별적으로 존재하는 인스턴스 변수
- totalCars는 모든 객체가 공유하는 클래스 변수


(2) 생성자(Constructor)

- 생성자는 객체가 생성될 때 호출되는 특별한 메서드
- 객체를 초기화하고, 필요한 초기 설정을 수행하는 데 사용됨
- 생성자의 이름은 클래스 이름과 동일하며, 반환 타입을 명시하지 않음
- 기본 생성자(매개 변수가 없는 생성자)와 매개 변수를 받는 생성자가 있음
- 생성자가 명시적으로 정의되지 않으면 기본 생성자가 자동으로 제공

Class Car {
	String model;
    int year;
    
    // 생성자(매개 변수를 받는 생성자)
    public Car(String model, int year) {
    	this.model = model;
        this.year = year;
    }
    
    // 기본 생성자
    public Car() {
    	this.model = "Unknown";
    	this.year = 0;
    }
}

- Car(String model, int year) 생성자는 Car객체 생성 시 모델과 연도를 초기화함
- Car() 기본 생성자는 모델을 "Unknown", 연도를 0으로 초기화함


(3) 메서드(Method)

- 메서드는 특정 작업을 수행하는 함수
- 반환 타입, 이름, 매개변수 목록으로 구성됨
- 메서드는 객체의 동작을 정의하고, 객체가 수행할 수 있는 행동을 나타냄
- 메서드는 인스턴스 메서드와 클래스 메서드(static 메서드)로 나뉨

Class Car() {
	String model;
    int year;
    
    // 생성자
    public Car(String model, int year) {
    	this.model = model;
        this.year = year;
    }
    
    // 인스턴스 메서드
    public void displayInfo() {
    	System.out.println("Model : " + model + ", Year : " + year);
    }
    
    // 클래스 메서드
    public static void greet() {
    	System.out.println("Welcome to the car showroom!");
    }
}

- displayInfo() 메서드는 인스턴스 메서드로, 각 객체의 modelyear를 출력함
- greet() 메서드는 클래스 메서드로 객체를 생성하지 않고도 호출할 수 있음



8. 정리

  • 필드 : 클래스 내부에 선언된 변수로, 객체의 상태를 저장
  • 생성자 : 객체 생성 시 호출되며, 객체를 초기화
  • 메서드 : 특정 작업을 수행하는 함수로, 객체의 활동을 정의
profile
공부 기록

0개의 댓글