package objectexam01;
/*
<메모리구조>
method 영역 | stack 영역 | heap 영역
(=class영역, 데이터영역,...)
1) method 영역
클래스와 메서드가 위치
static 멤버
2) stack 영역
기본 자료형(byte, short, int, long, float, double, boolean, char)이든
참조 자료형이든 상관없이 ☆지역변수☆가 위치하는 영역
지역변수는 반드시 초기화 시켜야 한다.
3) heap 영역
객체가 위치하는 공간
참조 자료형 변수가 가리키는 실제 데이터가 있는 공간
변수를 강제(자동으로 기본타입의 자료형으로) 초기화 시킴
int - 0 , long -0L, float - 0.0f, double-0.0, 참조자료형 - null
* 객체의 위치를 참조 변수에 저장하는 이유
new 키워드를 이용해 객체를 생성하면, 자바 가상 머신(jvm)은 힙 메모리 내에
비어 있는 공간을 찾아 그 공간에 객체를 생성
힙 메모리의 빈 공간은 그때 그때 다르므로 객체가 생성될 때마다 다른 위치에 저장됨
따라서 자바 기상 머신(jvm) 이 생성한 객체의 위치를 반드시 알아야 개발자가 해당 객체를
사용할 수 있음
(heap 이라는 옆 강의실 사물함에 물건을 넣어 놓고, 스택이라는 내 강의실에서 찾아갈 수 있게 하기 위해)
* new 키워드
- heap 메모리에 넣어라 라는 의미
- jvm 이 비어 있는 공간에 객체를 생성
- 어느 공간에 넣었는지 알 수 없기 때문에 jvm은 객체의 위치 정보를 리턴해 주어야 하고
그 리턴된 값을 참조변수에 저장
* 스택메모리와 힙메모리 초기화
- 스택 메모리에 위치하고 있는 참조 자료형 변수의 빈 공간을 초기화할 때는 null 값을 사용할 수 있다.
- null 값은 힙 메모리의 위치(주소,번지)를 가리키고 있지 않다는 의미
즉, 연결된 실제 데이터가 없다는 것을 의미
- 스택 메모리 공간은 값을 초기화 하지 않으면 빈 공간으로 존재, 따라서 해당 변수를 출력하면 오류
- 힙 메모리는 어떤 상황에서도 빈 공간이 존재하지 않음
값을 주지 않으면 컴파일러가 값을 강제로 초기화
힙 메모리 영역은 미완성된 것은 올릴수 가 없다.
//========================================================================================================
□ 객체 지향 프로그래밍 ( OOP , Object-Oriented Programming) 의 특징
1. 캡슐화 (Encapsulation) : 객체의 필드(=멤버변수), 메소드를 하나로 묶고
실제 구현하는 내용을 감추는 것
접근 제한자 - 객체의 필드와 메소드의 사용 범위를 제한함으로써
외부로부터 보호하는 역할(public, protected, defalut)
2. 상속 (Inheritance) : 재사용성
상위 객체를 재사용해서 하위 객체를 쉽고 빠르게 설계할 수 있도록 도와줌
이미 잘 개발된 객체를 재사용해서 새로운 객체를 만들기 때문에 반복된
코드의 중복을 줄여줌
3. 다형성 (Polymorphism) : 같은 타입이지만 실행 결과가 다향한 객체를 이용할 수 있는 성질
자바 다형성을 위해 부모 클래스 또는 인터페이스의 타입 변환을 허용
다형성의 효과는 객츠의 부품화가 가능
□ 클래스(Class)
- 설계도, 틀 (붕어빵 틀)
- 클래스의 용도 : 라이브러리(API : Application Program Interface)
다른 클래스에서 이용할 목적
1. 객체 : class 의 인스턴스
2. class 의 구성요소 및 멤버 : 필드(=멤버변수), 메소드, 생성자
3. 클래스의 구조
접근제한자 class 클래스명 {
필드(field, 멤버변수) : 클래스의 특징(=속성)을 나타내는 변수
메소드(=method) : 클래스의 기능
접근제한자 리턴타입 메소등(매개변수,...){ 실행문 }
생성자 : 객체 생성 기능
생성자의 이름은 클래스의 이름과 동일해야 함
반환타입이 없음
}
4. 객체 만들기
클래스 만들기(설계도, 틀) -> 객체 만들기(아파트 , 붕어빵, 자동차,..) -> 객체 사용
클래스명 참조변수 = new 생성자();
*/
//자동차 설계도
public class Car {
//멤버변수(=필드) : 객체 안에 위치, 생략가능
String color="red";
String model;
String company;
int maxSpeed;
//#2. 생성자 - 객체를 생성할 때 초기화, 생성자가 없으면 객체 생성을 못함
// 생성자가 생략이 되면 컴파일러가 컴파일시 기본 생성자를 삽입
// 생성자의 이름은 반드시 클래스의 이름과 같아야 함
// 리턴타입이 없다.
public Car() { } // 기본 생성자
public Car(String color, String model, String company, int maxSpeed) {
this.color = color;
this.model = model;
this.company = company;
this.maxSpeed = maxSpeed;
//컴퓨터는 특정한 말이 없으면 자신과 가장 가까이 있는 변수를 사용
// color 앞에 this 를 붙이지 않으면 모두 지역변수로 처리
// 지역변수와 필드를 구분하기 위해서 필드명 앞에 this 를 붙인다.
// this : 객체 자신
// this.color => 필드
// color => 지역변수
}
// #3. 메소드
public void drive() {
System.out.println(this.model + " 주행중이다.");
System.out.println(model + "의 최대 속도는 " + maxSpeed);
// 같은 이름의 지역변수가 없으면 this 를 생략 가능
// this 를 붙이지 않아도 필드임을 알 수 있을 때는 this 를 생략
}
public void stop() {
System.out.println("자동차가 멈춘다.");
}
}// end of class
'코딩 > Java' 카테고리의 다른 글
자바 final (0) | 2024.10.17 |
---|---|
자바 싱글톤(Singleton) (0) | 2024.10.16 |
JAVA 이클립스 05 Scanner (2) | 2024.10.01 |
JAVA 이클립스 04 변수,연산자 (0) | 2024.10.01 |
JAVA 이클립스 03 변수 (0) | 2024.09.30 |