객체지향 이론의 기본 개념
: 실제 세계는 사물(객체)로 이루어져 있고, 발생하는 모든 사건들은 사물간의 상호작용이다.
객체 지향의 장점
: 1. 코드의 재사용성
2. 코드 관리 용이
3. 신뢰성 높은 프로그래밍 가능
: 코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지
너무 객체지향개념에 얽매여서 고민하기보다 기능적으로 프로그램을 일단 만들고 객체지향적 방향으로 코드를 개선해 나가는 것이 좋다.
클래스 정의
: 객체를 정의해 놓은 것.
클래스 용도
: 객체를 생성하는데 사용 됨.
클래스는 단지 객체를 생성하는데 사용될 뿐, 객체 그 자체는 아님.
ex)
클래스: tv설계도, 객체: tv
인스턴스
: 클래스로부터 만들어진 객체를 뜻함.
ex)
‘책상은 인스턴스’ 보다 ‘책상은 객체’라는 쪽이,
‘책상은 책상 클래스의 객체이다.’ 보다 ‘책상은 책상 클래스의 인스턴스다.’라고 하는 것이 자연스럽다.
객체의 구성요소
- 속성 :
멤버변수, 특성, 필드, 상태
- 기능 :
메서드, 함수, 행위
ex)
속성 - 채널, 기능 - 채널 높이기
인스턴스의 생성과 사용
Tv t;
t = new Tv();
1. Tv 클래스 타입의 참조변수 t를 선언함.
2. 참조변수 t에 연산자 new에 의한 Tv클래스의 인스턴스가 메모리의 빈 공간에 생성됨.
인스턴스와 참조변수의 관계는 마치 우리가 일상생활에서 사용하는 TV와 TV리모컨의 관계와 같다.
<인스턴스는 참조변수를 통해서만 다룰 수 있으며, 참조변수의 타입은 인스턴스의 타입과 일치해야한다.>
객체의 생성과 사용
1. 클래스 작성(설계도)
2. 객체 생성(제품)
3. 객체 사용(제품):
변수, 메서드 사용하는 것
Tv t;
t = new Tv();
t는 리모컨임, 리모컨으로 객체에 연결 해야( = 대입 연산자) 사용 가능
Tv t1;
Tv t2;
t1 = new Tv();
t2 = new Tv();
t2 = t1;
t2 = t1; 은
t2의 리모컨이 t1객체를 가리키는 것임
객체의 배열 == 참조변수 배열
Tv t1 = new Tv();
Tv t2 = new Tv();
Tv t3 = new Tv();
Tv[] tvArr = new Tv[3];
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();
주의 해야 할 점
: 객체 배열 만들 때 tvArr[0],[1],[2]를 하나씩 다 참조해야 함
클래스 정의(1)
- 설계도
- 데이터 + 함수
- 사용자 정의 타입
클래스 == 데이터 + 함수
1. 변수
: 하나의 데이터를 저장할 수 있는 공간
2. 배열
: 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간
3. 구조체
: 서로 관련된 여러 데이터(종류 관계x)를 하나로 저장할 수 있는 공간
4. 클래스(데이터 + 함수)
: 데이터와 함수의 결합(구조체 + 함수)
변수 종류
- 지역변수(lv)
- 클래스변수(cv)
- 인스턴스변수(iv):
객체는 iv를 묶어 놓은 것 (중요!!)
※ SSD,HDD 보조기억장치에 파일이 저장 돼있음, 이를 CPU에서 바로 못 가져옴, RAM을 거쳐서 가져와야 됨
보조기억장치 -> RAM 을 로딩이라 함
cv는 객체 이름을 쓰는 것을 권장
메서드
: 문장들을 묶어 놓은 것
장점
- 코드 중복 제거
- 코드 관리 용이
하나의 메서드는 한 가지 기능만 수행 되도록 작성
메서드의 호출
: 메서드이름(값1, 값2, ...)
반환값
만약 반환 타입이 return 타입과 불일치 할 때
: char,byte,short와 같은 int로 바꿀 수 있는 타입은 자동형변환 됨.
호출스택
:메서드 수행에 필요한 메모리가 제공되는 공간
메서드가 호출되면 호출스택에 메모리 할당, 종료되면 해제
기본형 매개변수
: 기본형(int, float, char, String, byte, boolean, double, long) 매개변수는 값을 읽기만 할 수 있고(read only), 변경 불가
public class Ex6_6 {
public static void main(String[] args) {
Data d = new Data();
d.x = 10;
System.out.println("main() : x = " + d.x);
change(d.x);
System.out.println("After change(d.x)");
System.out.println("main() : x = " + d.x);
}
static void change(int x){
x = 1000;
System.out.println("change() : x = " + x);
}
}
class Data {
int x;
}
그림으로 많이 그려서 이해 하기!!
'자바 스터디' 카테고리의 다른 글
[자바의 정석] CH8 (0) | 2023.06.24 |
---|---|
[자바의 정석] CH7 (0) | 2023.06.15 |
[자바의 정석] CH-6 (0) | 2023.05.04 |
[자바의 정석] CH3 ~ CH4 (0) | 2023.03.30 |
[자바의 정석] CH1 ~ CH2 정리 (0) | 2023.03.24 |