객체 지향 프로그래밍(OOP)
자바 객체지향 프로그래밍 3대 개념
- 캡슐화 encapsulation
- 상속 inheritance
- 다향성 polymorphism
객체 지향 프로그래밍이란?
- 객체(구성요소) 중심으로 프로그래밍하는 것.
- 프로그램을 실제 세상에 가깝게 모델링함.
- 컴퓨터가 수행하는 작업을 객체들 갂의 상호 작용으로 표현함.
- 클래스(혹은 객체)들의 집합으로 프로그램 작성함.
ex)
커피 자판기 프로그램을 개발한다면,
커피 종휴 선택 동전 넣기 출력 자판기 속에 있는 돈통... 기능들을 실행해야함.
coin...이 자판기 속에 있는 돈통속 동전이라면,
int coin500, coin100, coin50, coin10; 선언
- 동전을 넣으면 동전 종류에 따라
coin...증감함.
- 주문 취소 시,
coin...을 돌려주고 돈통에 남는 동전 수 감소함.
isFull() boolean 메소드로 돈통이 꽉차면 ture , 아니면 false를 리턴 받음.
- ture면 주문 받지 않음
..... (이런식으로 자판기의 기능 별 코드를 나눠 작성함.)

절차 지향 프로그래밍이란?
-
시작해서 끝나는 과정을 그대로 프로그래밍하는 것.
-
절차 지향 프로그래밍의 문제점
- 절차 지향의 최대 단점은 flow chart상에서 특정 부분을 수정할 경우 어려움.
- 일부 코드를 수정 시, 전체 프로그램 중에 다른 부분도 같이 수정해야만 함.
-
개발자 간에 커뮤니케이션 오류가 발생하기 쉬움.
-
유사한 프로그래밍을 할 경우, 비슷한 소스코드를 재활용하기 매우 어려움.
-
결과적으로 시간이 오래걸림.
--> 개발 인력 인건비가 매우 비쌈.
🧑🏻🏫 : "아주 간단한 작업도 최소 3명~ 5명이 같이 프로그램을 개발합니다. 절차 지향 프로그래밍은 개발자들이 소통하며 코딩해야해서 서로간에 소통 오류가 많이 발생됩니다."
객체(Object)와 클래스(Class)
자바에서 class와 instance의 차이점
- 클래스 : 설계도의 개념(field, method)
- 인스턴스 : 클래스를 힙메모리에 만드는 경우.

- 파일 이름과 클래스 이름이 같은게 좋음.
- 클래스는 파일당 하나만 있어야함.
new는 heap메모리를 새로 만들 때 사용함
- 보통 클래스 안에 생성자 overroading 되어 있는 형태
클래스의 변수
new 연산자에 의해 return된 객체의 주소 저장.(참조 타입 변수)
- heap메모리 영역의 객체를 이용하기 위해 사용함.
this.필드명
-
힙메모리에 존재한는 인스턴스 주소
-
클래스 안에 필드가 있는 경우
- 필드는 클래스의 부품.
- 필드 안에 클래스가 들어가기도 함.
-
필드는 초기값을 갖음
- 객체 내부 :
this.필드이름으로 접근함.
- 객체 외부 :
변수.필드이름으로 접근함.
생성자(constructor)
- 생성자는 필드를 초기화 할 때 사용함.
- 생성자는 기본 생성자를 갖음
- 생성자를 만들지 않으면 컴파일러가 자동으로 만들어줌.