1. 객체지향 : Object Oriented Programming (OOP)
-
객체 : 우리 주변의 모든 것. 고유한 특성과 기능을 가지고 있다.
-
객체지향 : 실세계의 객체를 프로그램내에 표현하기 위해 클래스와 객체 개념을 도입한 것.
- 특징
1) 코드의 재사용성이 높다 : API 사용
2) 코드관리가 쉽다 : 상속, 다형성, 추상화, 캡슐화 등등
3) 신뢰성이 높은 프로그램 개발 가능
-
캡슐화 : encapsulation : 자바가 지향하는 코드 스타일
-
상속 : inheritance, 부모가 자식에게 가진 것들을 물려주는것.
-
다형성 : polymorphism
- 상속관계에서 성립
- 같은 이름의 메서드가 클래스나 객체에 따라
- 기능이 다르게 동작하도록 구현되는 것을 말함.
-
절차지향 : 순서대로 진행되는 코드방식(급식실?)
-
객체지향 : 부품처럼 서로 상호작용하며 진행되는 방식
2. 클래스와 객체
1) 클래스 (설계도)
- 객체를 정의해 놓은 것.
- 용도 : 객체를 만들기 위한 것.
2) 객체
- 실제로 존재 하는 것. (사물,개체 등)
- 클래스 모양 그대로 생성된 실체
- 붕어빵 (빵틀로 만든...)
3) 객체와 인스턴스
4) 객체 (속성 + 기능)
- 속성과 기능을 멤버라 부른다.
- 속성 : 멤버변수, 필드
- 기능 : 메서드
5) 인스턴스(객체) 생성과 사용
- 순서 : 클래스(설계도 만들기) -> 객체 생성 -> 사용
# 클래스 구조
class 클래스명 {
변수 (속성, 필드)
메서드
}
- 클래스명은 대문자로 시작, 숫자로 시작 안됨, 띄어쓰기 안됨.
- 특수문자 _ $ 가능
- 패기지 안에 이름은 한개만 존재하게
6) 인스턴스(객체) 생성
#선언
클래스명 참조변수명;
scanner sc;
#생성
참조변수 = new 클래스명();
sc = new Scanner(System.in);
#줄여서
클래스명 참조변수명 = new 클래스명();
Scanner sc = new Scanner(System.in);
- 참조변수 (레퍼런스 변수) : 객체를 가르키는, 객체의 주소(레패런스)를 담고 있을 변수
- 객체 생성전, 참조변수 먼저 선언만 하면 모리에 아직 객체가 생성되어 올라간것이 아니다.
- 주소 담을 수 있는 변수만 만들어 놓은 것.
* new : 새로운 클래스 모양의 메모리를 새로 점유시키는 중요한 키워드
7) 객체 멤버(변수 or 메서드)에 접근 : 점(.) 연산자를 사용
sc.nextLine();
-
정리
-
클래스 == 사용자 정의 데이터 타입 (내맘대로 정의 가능함)
-
기본형 : 메모리 양이 정해진 것
-
참조형(클래스) : 개발자가 필요한 만큼 메모리를 직접 지정해서 만든 것.
-
클래스 : 유사한 특성을 지난 객체들의 "속성"과 가능을 묶어놓은 집합
-
객체 : 실제 존재하는 object 들을 말함.
3. 변수의 종류
- 선언 위치(어디서 변수가 만들어 졌느냐)에 따라 변수의 종류와 성질이 달라짐.
(데이터 타입에 따라 기본형, 참조형으로 구분)
1) 클래스 변수
- 클래스 안에서 생성
- 이름 앞에 static 붙는다.
- 종류 : 클래스 기본형 변수, 클래스 참조형 변수
- 특징
- 모든 객체들이 공유하는 변수
- 가장 먼저 생성됨. new로 객체생성 하지 않아도 바로 사용 가능.
- 접근법
- 클래스명.클래스변수명 (이 형태로 사용하는것이 안헷갈리고 좋다)
- 참조변수명.클래스변수명 (객체 생성한 경우)
- 유효기간
2) 인스턴스 변수
- 클래스 안에 생성
- 종류 : 인스턴스 기본형, 인스턴스 참조형 변수
- 특징
- 각 객체(인스턴스)마다 개별적인 저장 공간을 갖는다.
- new를 한 후(객체생성 후) 메모리에 올라가면 사용 가능.
- 가르키는 참조변수가 없을 경우 가비지컬렉터가 수거함(메모리해제)
- 또는 프로그램 종료시 소멸
- 접근법
- 유효기간
new를 선언한 시점
~ 링크가 끊겨서 쓰레기값이 되거나(가비지컬렉터 수거), 프로그램이 종료가 될 때
3) 지역변수
- 메서드 안에서 생성
- 종류 : 지역 기본형 변수, 지역 참조형 변수
- 특징
- 메서드(조건문, 반복문내)에서 선언된 변수를 가르키며,
- 메서드 종료시 소멸
- 유효기간
메서드안에서 선언시~ 메서드가 종료 될 때
** 메모리 로딩순서
클래스 영역 생성 -> static 실행 -> main 실행 -> new~ instance
| 클래스 범위 만들고
| 메인메서드 포함.메모리에 로딩
| main이 있으면 실행
| new 객체 생성할 때마다 각각 메모리에 로딩