절차지향 프로그래밍
장점
- 컴퓨터의 처리 방식과 유사하며, 처리 속도가 빠르다.
단점 
- 코드의 양이 증가할수록, 재사용성과 유지보수의 어려움이 급격하게 증가
- 대형 프로젝트에 부적합

 특징
- 행동(코드) 중심 // 일에따라서 함.
- 처리해야 할 명령어를 결정하고, 필요한 데이터 요청 // 데이터를 나중에 요청한다.
- Top-Down 방식으로 설계 // 위에서 아래로

=> 따라서 객체지향이 나옴

객체지향 프로그래밍
- 실제 세계를 모델링 하여 소프트웨어를 개발하는 방법
- 메세지를 교환하는 상호작용을 통해 전체 시스템이 운영되는 개념
- 속성, 메소드로 표현 

데이터(상태) 중심
- 개발의 편리, 효율성을 높이는데 목적이 있다. 
- 생산성을 향상 시킬 수 있다.
- 프로그램 모듈을 재사용 할 수 있다.
- 프로그램의 확장 및 유지 보수가 용이하다.

객체란 ?
- 자동차, 컴퓨터, 책 등과 같이 우리 주위에서 손쉽게 접할 수 있는 모든 물리적 사물 또는 실체를 가르키는 말
- 객체는 특성과 행위, 정체성 등 세가지 특징이 있다.
특성(속성)은 해당 객체에 저장되어 있는 정보
하나의 클래스 안에는 단일책임, 서로 관련성있는 데이터와 코드로 구성되어야 한다.

통장(계좌) : 속성(필드) - 이름, 계좌번호, 패스워드, 금액
  동작(메소드) - 입금한다. 출금한다.

a - 통장
b - 통장
c - 통장 ...

필드 : 데이터, 상태, 속성, 필드
메소드 : 동작, 행동

클래스 : 속성과 메소드를 정의하는 일종의 틀 template 이다. 
   클래스는 객체를 만들기 위해 필요한 속성, 메소드로 구성 

클래스로부터 생성된 실체는 '객체'
객체가 일할수있도록 한 것이 '메소드'

추상화 ?
하나의 클래스를 만들 때 저장할 데이터와 실행해야하는 기능을 추출하는 것. 모델링

캡슐화 ?
객체의 속성과 행위를 하나로 묶고, 실제 구현 내용을 외부에 감추어(변경할 수 없게 함) 은닉한다.
데이터를 보호할 수 있다. 이용자가 데이터에 직접 접근하는 것을 차단하므로 객체 내 데이터 및 코드의 손상과 오용을 막고 안전하게 보호할 수 있다.
ex ; Tv를 시청하려면 Tv의 동작 원리를 알아야할까? no. 전원버튼만 누르면 tv를 시청할 수 있다.

하나의 클래스에는 한 가지 종류의 기능을 두어야 한다. (단일 책임의 원칙!) => 응집력을 높이기 위함이다.

인스턴스 생성 -> 메모리를 할당받는다.
생성자는 클래스와 이름이 동일함. 생성자는 메모리를 할당할 때만 씀! new 생성자

인스턴스 변수 
- 객체에 종속적이므로 객체에서 호출된다.

클래스 변수
- 클래스 변수는 모든 인스턴스들이 공통적인 값을 갖는다.
- 일반적으로 객체가 아닌 클래스 이름을 이용하여 외부에서 접근한다.

생성자
- 클래스와 동일한 이름을 가져야 한다.
- 객체를 생성하거나 생성된 객체의 초기화를 담당.
- 하나의 클래스에는 하나 이상의 생성자가 필요하다.★
(개발자가 만들지않으면 컴파일할때 자바가 알아서 넣어준다.)

클래스 이름은 대문자로 시작하고 자바 API가 제공하는 클래스의 이름과 중복으로 사용하면 안된다.

일반 독립 클래스에 붙이는 접근 제어자
- public 
- default : 동일한 패키지(동일 폴더) 에서만 사용가능하다.

내부 클래스 
- private
- protected
- 클래스 안에서만 사용 가능

필드의 접근제어자
- private < default(아무 것도 안 붙인 것) 동일한 패키지에서 사용가능 
< protected 동일한 패키지에서는 사용가능+ 자식은 패키지가 달라도 접근가능
< public 누구든지 사용가능

+ Recent posts