day08 - [객체지향,class,객체,변수의종류[클래스변수,인스턴스변수,지역변수]]
1. 객체 지향
· 객체 : 실세계에 있는 우리 주변에 모든 것이 객체이다.
객체들은 자신만의 고유한 특성과 행동을 가지며, 다른 객체들과 상호작용을한다.
· 객체 지향 : 실세계의 객체를 프로그램 내에 표현하기 위해 클래스와 객체 개념을 도입한것
1980년대 탄생
본격적으로 사용된건 2000년도
개념이 도입된건 예전인데 이때는 절차지향보다 더 무거웠음
컴퓨터 성능이 좋아져서 돌리는데 큰 무리가 없어지면서 많이 사용됨
· 특징
(1) 기존언어와 크게 다르지않다. 몇가지 추가됨
(2) 코드의 재사용성이 높다 : API 사용
(3) 코드 관리가 쉽다 : 상속, 다형성, 추상화, 캡슐화...
(4) 신뢰성이 높은 프로그램이 개발 가능 : 오류 발생 적고, 오류 잡기 쉽다
· 캡슐화 (encapsulation) : 자바가 지향하는 코드 스타일
객체를 캡슐로 싸서 내부를 보호하고 볼수 없게 하는것
· 상속 (ingeritance) : 물려받기
자식 클래스가 부모클래스의 "속성, 기능을 물려받고" 기능을 더 추가하여 "확장"하는 개념
· 다형성 (polymorphism)
상속광계에서 성립
같은 이름의 메서드가 클래스나 객체에 따라 다르게 동작하도록 구현되는 것을 말함
· 목적
(1) 소프트웨어의 생산성 향상
(2) 실세계에 대한 쉬운 모델링
· 절차지향 : 순서대로
· 객체지향 : 객체에 따라 유동적으로
2. 클래스와 객체
1) 클래스 (설계도)
객체를 정의해 놓은것, 용도는 객체를 만들기 위한것
2) 객체
· 실제로 존재하는것, 사물....
· 클래스 모양 그대로 생성된 실체
· 객체는 속성과 기능에 따라 다름
· 붕어빵틀 = 클래스 붕어빵=객체
3) 객체와 인스턴스
객체 ==인스턴스
4) 객체(속성+기능)
· 속성과 기능을 멤버라 부른다.
· 속성 : 멤버변수, 필드 field -- 명사형(값을 들고 있는것)
· 기능 : 메서드 -- 동사형(기능을 수행하는것)
· 클래스는 메모리를 차지하지 않는다.
· 객체가 생성되어야지만 메모리를 차지한다.
5) 인스턴스의 생성과 사용
순서 : 클래스(설계도 만들기) > 객체 생성 > 사용
1. 클래스 구조
class 클래스명{
변수
메서드
}
* 클래스명 첫글자 대문자, 띄어쓰기x, 특수문자 _ & 허용, 패키지내 클래스 이름이 중복될수 없음
2. 인스턴스(객체) 생성 instance
· 선언
클래스명 레퍼런스변수명; 레퍼런스변수 ==참조변수 > 주소값 저장하는 변수
Scanner sc;
· 생성
레퍼런스변수명 = new 클래스명();
sc = new Scanner();
· 줄여서..
클래스명 레퍼런스변수명 = new 클래스명();
레퍼런스변수(참조변수) : 객체를 가르키는, 객체의 주소를 담고있을 변수
>객체 생성전, 참조변수만 먼저 선언.
참조변수 선언시에는 아직 내용물이 메모리에 올라간것이 아니고 그냥 주소를 담을 수 있는 변수만 만들어놓은것 뿐
3. new : 새로운 모양의 메모리를 새로 만드는 문법적으로 아주 중요한 키워드
"제품을 생산한다"
> new를 하는 순간 메모리에 로딩됨.
jvm : Java Virtual Machine
메모리를 관리하는 등 모든것을 관리하는 가상 기계(내부에 존재)
4. 객체 멤버에 접근 : 점(.) 연산자 사용 : 가지고 있는~~
배열의 new : 배열도 객체, 인덱스번호가 자동으로 만들어짐
배열 : 같은 타입의 여러개의 값을 저장하는 형태
구조체(다른언어에 있음, 자바엔 없음) : 서로 다른 타입의 여러개의 값을 저장하는 형태
ex. 구조체 이름 Test {int a, double b} .a .b
이걸 업그레이드해서 나온게 클래스 기능도 같이 넣자
클래스 : 점(.)연산자를 이용하여 가지고 있는 변수와 메서드에 접근
[변천사 임돠]
6) 정리
1. 클래스 == 사용자 정의 데이터 타입
기본형 : 메모리양이 정해진것
참조형(클래스) : 프로그래머가 필요한 만큼 메모리를 직접 지정해서 만든것
2. 클래스 : 유사한 특징을 지닌 객체들의 "속성"을 묶어 놓은 집합
객체 : 현실세계에 존재하는 object를 말함
3. 변수의 종류
선언 위치(어디에서 변수가 만들어졌느냐)에 따라 변수의 종류와 성질이 달라짐
1) 클래스 변수
- 클래스안에 생성
- 이름앞에 static 키워드가 붙는다
· 종류 : 클래스 기본형 변수 / 클래스 참조형 변수
· 특징 : 모든 인스턴스들이 공유하는 변수
가장먼저 생성됨. new로 객체 생성하지 않아도 바로 사용가능
· 접근법 :
클래스명.클래스변수명
참조변수명.클래스변수명
2) 인스턴스 변수
- 클래스 안에 생성
· 종류 : 인스턴스 기본형 변수 / 인스턴스 참조형 변수
· 특징 : 각 인스턴스(객체)의 개별적인 저장 공간
new를 한후(객체생성후) 메모리에 올라가면 사용 가능
가르키는 참조변수가 없을 경우 가비지 컬렉터가 수거해감 또는 프로그램 종료시 소멸
· 접근법 :
참조변수명.인스턴스변수명 t1.ch
3) 지역 변수
- 메서드 안에 생성
· 종류 : 지역 기본형 변수 / 지역 참조형 변수(String, 배열)
· 특징 : 메서드에서 선언된 변수를 가르키며, 메서드 종료시 소멸
power : 클래스 변수
vol,ch : 인스턴스 변수
a : 지역변수 (메인 메서드 안에 있으니까)
# 트럼프 카드
클래스변수 : 공통점 : 가로,세로 사이즈
인스턴스변수 : 차이점 : 숫자, 모양
> 구별이 잘안간다면 : 인스턴스로 만들어 쓰다 공통적으로 쓰이는게 보이면 static 붙혀서 클래스로 변경