웹개발/JAVA

객체 지향 프로그래밍

bergerac 2025. 2. 17. 09:11

1. 객체란? 

데이터(속성)와 해당 데이터를 처리하는 방법(메서드)을 포함하는 프로그래밍의 기본 단위

 

2. 클래스(classes)

객체를 생성하기 위한 템플릿, 데이터(속성)와 메소드(행동)을 정의

커피자판기라는 class 를 생성했을 때 커피라는 클래스 안에 

속성 : 커피의 종류, 가격, 재고, 물의 온도 (변수를 이용한 설정)

기능 : 커피제조하기, 재고관리, 가격설정(메서드를 활용한 설정)

 

3.속성

일반적으로 변수를 정의하듯이

변수타입 변수명; 

으로 설정을 해주면 된다.

 

<static 변수>

:정적변수  클래스(static, 정적) 필드(변수) 

이와 같이 static을 사용하여 변수를 설정할 수 있고, 이를 정적변수라 한다.


1) 클래스의 '모든 인스턴스에서 공유되는' 데이터 변수
2) 'static 키워드'를 사용하여 선언되는 변수
3) 해당 클래스로 생성되는 인스턴스가 '모두 동일한 값'을 가짐
4) 프로그램이 시작될 때 생성 ~ 프로그램 종료 시 소멸
5)  JVM의 'Method Area'라고 불리는 영역에 저장

 

4. 메서드(method)

ReturnType methodName(Parameter List) {
    - 메서드의 기능, 동작 정의
}

 

-> 이와 같이 작성한다.


1. ReturnType(반환 유형)
: 메서드 동작 후 반환하는 데이터 유형 지정
- 반환 데이터가 없는 경우 void 지정

2. methodName(메서드명)
: lowerCamelCase 사용, 동사 사용을 권장
cf) 변수명 - 명사 사용을 권장

 

5. Coffee class의 구현

- class 명은 항상 시작을 대문자로 해주어야 한다.

 

6. 생성자 만들기

<생성자를 만드는 이유>

1) 객체 생성 시 필요한 초기화 작업을 수행하기 위해

2) 필수 필드를 강제하여 일관된 객체를 생성하기 위해

3) 오버로딩을 활용하여 다양한 방식으로 객체를 생성하기 위해

4) 객체 생성 시 특정 동작(로그 출력, DB 연결 등)을 자동으로 실행하기 위해

5) 불필요한 setter 호출을 방지하고 불변성을 유지하기 위해

즉, 생성자는 객체를 올바르게 초기화하고, 안정적이고 일관된 객체 생성을 보장하는 중요한 역할을 합니다.

 

<기본생성자>

클래스명() { 
}
public Coffee() {
}

 

<전체 필드 생성자 만들기 및 초기화>

전체 필드 생성자란? 

클래스의 모든 필드(멤버변수)를 초기화할 수 있는 생성자

보통 객체를 한번에 초기화할 때 사용한다.

**intellij의 경우, Alt+insert의 단축키를 통해 생성자(Constructor)을 만들 수 있다.

클래스명(모든 매개변수){
    this.필드1 = 매개변수1
    this.필드2 = 매개변수2
 }
public Coffee(String categories, int price, int inventory, int temp) {
    this.categories = categories;
    this.price = price;
    this.inventory = inventory;
    this.temp = temp;
}

 

7. 생성자를 활용하여 main 함수에서 객체 생성하기

방법1) 기본생성자를 활용한 객체 생성 

클래스명 객체명 = new 클래스명();
Coffee hail_le = new Coffee();

 

안에 값을 설정해줄 때는 

객체명.변수명 = 설정값;
hail_le.categories = "icedAmericano";
hail_le.price = 4500;
hail_le.inventory = 65;
hail_le.temp = 0;

 

이와 같이 설정해준다.

 

방법2)전체 필드 생성자(All args Constructor)를 활용하는 방법

클래스명 객체명 = new 클래스명(설정값1, 설정값2...);
Coffee hail_le1 = new Coffee("latte",5000,50,56);

 

이렇게 되면 각각 hail_le와 hail_le1의 객체가 생성되었다.

 

8. main 함수에서 method(메서드)활용하기

//객체명.메서드명(변수값);
hail_le.priceSetting(2300);//2300의 수익을 내고 싶을 때
hail_le.manageInventory(3);//3잔 팔았을 때

이와 같이 위에서 5에서 구현해준 메서드를 활용할 수 있다. 

확인하기 위하여 coffee class에 displayInfo의 함수를 다음과 같이 만들어주고  

void displayInfo(){
    System.out.println("주문하신 음료는 : "+categories);
    System.out.println("주문하신 음료의 가격은 : "+price);
    System.out.println("현재 주문 가능한 수량은 : "+inventory);
    System.out.println(makeCoffee());
}

Main 에서 display를 해주면 

public class Main {
    public static void main(String[] args) {
        Coffee hail_le = new Coffee();
        hail_le.categories = "icedAmericano";
        hail_le.price = 4500;
        hail_le.inventory = 65;
        hail_le.temp = 0;

        Coffee hail_le1 = new Coffee("latte",5000,50,90);
        //클래스명 객체명 = new 클래스명(설정값1, 설정값2...);

        //객체명.메서드명(변수값);
        hail_le.priceSetting(2300);//2300의 수익을 내고 싶을 때
        hail_le.manageInventory(3);//3잔 팔았을 때
        hail_le.displayInfo();
        hail_le1.displayInfo();


    }
}

이와 같이 활용할 수 있다.