basic/java 이론

day08 - [객체지향,class,객체,변수의종류[클래스변수,인스턴스변수,지역변수]]

못지(Motji) 2021. 4. 30. 16:33

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 붙혀서 클래스로 변경