객체 지향 프로그래밍
1. 객체란?
데이터(속성)와 해당 데이터를 처리하는 방법(메서드)을 포함하는 프로그래밍의 기본 단위
2. 클래스(classes)
객체를 생성하기 위한 템플릿, 데이터(속성)와 메소드(행동)을 정의
커피자판기라는 class 를 생성했을 때 커피라는 클래스 안에
속성 : 커피의 종류, 가격, 재고, 물의 온도 (변수를 이용한 설정)
기능 : 커피제조하기, 재고관리, 가격설정(메서드를 활용한 설정)
3.속성
일반적으로 변수를 정의하듯이
변수타입 변수명;
으로 설정을 해주면 된다.
<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();
}
}

이와 같이 활용할 수 있다.