본문 바로가기

자바의 정석

06 객체지향 프로그래밍 1 요약

○ 객체지향언어의 주요특징

1. 코드의 재사용성이 높음

2. 코드의 관리가 용이함

3. 신뢰성이 높은 프로그래밍을 가능케함

 

○ 클래스의 정의

: 클래스는 객체를 정의해 놓은 것. 데이터와 함수의 결합.

○ 클래스의 용도

: 클래스를 사용하는 데 사용되는 설계도

 

○ 인스턴스화

: 클래스로부터 객체를 만드는 과정

 

○ 객체의 구성 요소

1. 속성(멤버변수)

2. 기능(메서드)

 

○ 인스턴스의 생성과 사용

클래스명 변수명;
변수명 = new 클래스명();

Tv t; // Tv 클래스의 객체의 주소를 저장할 참조변수 t 선언
t = new Tv(); // Tv클래스의 객체를 생성해 그 주소를 t에 저장

인스턴스는 참조변수를 통해서만 다룰 수 있고, 참조변수 타입은 인스턴스 타입과 일치해야 함

 

○ 객체의 배열 = 참조변수의 배열

각 참조변수마다 객체를 생성한 뒤 그 주소를 할당해줘야 함

Tv[] Tvarr = new Tv[3];
for(int i=0;i<Tvarr.length;i++){
	Tvarr[i] = new Tv();
   }

 


 

○ 변수의 종류

변수의 종류 선언위치 생성시기
클래스 변수 클래스 영역 클래스가 메모리에 로딩될 때
인스턴스 변수 클래스 영역 인스턴스가 생성될 때
지역 변수 클래스 영역 이외의 영역
(메서드, 생성자, 초기화 블럭)
변수 선언문이 수행됐을 때

○ 클래스 변수

- 한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야 하는 경우

- 인스턴스를 생성하지 않고 '클래스이름.클래스변수'로 사용 가능

 

○ 인스턴스 변수

- 인스턴스마다 다른 값을 가질 수 있음

 

○ 지역 변수

- 메서드 내에 선언돼 메서드 내에서만 사용될 수 있음

- 메서드가 종료되면 소멸됨

 


 

○ JVM의 메모리 구조

1. 메서드 영역(method area)

- 어떤 클래스가 사용되면 클래스 정보가 메서드 영역에 저장됨.

- cv들이 생성되는 공간

2. 호출 스택(Call stack)

- 메서드 작업에 필요한 메모리 공간을 제공함

3. 힙(Heap)

- 인스턴스가 생성되는 공간 = iv들이 생성되는 공간

 

- 메서드가 호출되면 스택에 필요한 만큼의 메모리를 스택에 할당받음

- 메서드가 수행을 마치면 메모리를 반환하고 스택에서 제거됨

- 호출스택의 맨 위에 있는 메서드가 현재 실행중인 메서드

 

 

○ 인스턴스 메서드

: 인스턴스 변수와 관련된 작업을 하는 메서드

  인스턴스 멤버와 클래스 멤버 모두 사용 가능

 

○ 클래스 메서드(static 메서드)

: 인스턴스 변수나 인스턴스 메서드를 사용하지 않는 메서드

  클래스 멤버만 사용 가능

 

- 클래스를 설계할 때 멤버변수 중 모든 인스턴스에 공통적으로 사용하는 것에 static을 붙임- 클래스 변수(static변수)는 인스턴스를 생성하지 않아도 사용할 수 있음- 클래스 메서드는 인스턴스 변수를 사용할 수 없음    -> 인스턴스 멤버가 존재하는 시점에 클래스 멤버는 항상 존재하지만,

         클래스 멤버가 존재하는 시점에 인스턴스 멤버가 존재하지 않을 수도 있기 때문

- 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려해봄

 


 

○ 오버로딩(overloading)

: 한 클래스 내에 이름이 같은 메서드를 여러 개 정의하는 것

 

○ 오버로딩의 조건

1. 메서드 이름이 같아야 함

2. 매개변수의 개수 또는 타입이 달라야 함

    (반환 타입은 아무런 관계 없음)

 

 


 

○ 생성자(constructor)

: 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'

 

- 클래스의 이름과 생성자의 이름이 같아야 함

- 반환 값이 없음

- 클래스 내에 생성자가 하나도 없을 때만 컴파일러가 자동으로 기본 생성자를 추가해줌

- 생성자 간에도 서로 호출이 가능함 ( 다음 조건을 만족할 때 )

   1. 생성자의 이름으로 클래스 대신 this를 사용해야 함

   2. 한 생성자에서 다른 생성자를 호출하는 것은 반드시 첫줄에서만 가능함

 

○ this

: 인스턴스 자기 자신을 가리키는 참조변수

- 인스턴스 멤버만 this를 사용할 수 있음

 

○ this(), this(매개변수)

: 생성자. 같은 클래스의 다른 생성자를 호출할 때 사용됨

 

Class Car{
	String color;
    String gearType;
    int door;
    
    Car(){
    	this("white", "auto", 4);
    }
    Car(String color){
    	this(color, "auto", 4);
    }
    Car(String color, String gearType, int door){
    	this.color = color;
        this.gearType = gearType;
        this.door = door;
    }
}

 

○ 인스턴스를 생성할 때 고려사항

1. 클래스 - 어떤 클래스의 인스턴스를 생성할 것인가?

2. 생성자 - 클래스의 어떤 생성자로 생성할 것인가?

 


○ 변수의 초기화

- 멤버변수(클래스 변수, 인스턴스변수)와 배열의 초기화는 선택적

- 지역변수의 초기화는 필수

 

○ 멤버변수의 초기화 방법

1. 명시적 초기화 (explicit initialization)

2. 생성자 (constructor)

3. 초기화 블럭 (initialization block)

    - 인스턴스 초기화 블럭

    - 클래스 초기화 블럭

 

○ 멤버변수의 초기화 시기

- 클래스 변수의 초기화 시점 : 클래스가 로딩될 때 단 한 번

- 인스턴스 변수의 초기화 시점 : 인스턴스가 생성될 때마다 각 인스턴스별로 이루어짐

 

○ 멤버변수의 초기화 순서

- 클래스 변수의 초기화 순서

: 기본값 → 명시적 초기화 → 클래스 초기화 블럭

- 인스턴스 변수의 초기화 순서

: 기본값 → 명시적 초기화 → 인스턴스 초기화 블럭 → 생성자

'자바의 정석' 카테고리의 다른 글

07 객체지향 프로그래밍 2 요약  (0) 2022.06.19
02 변수 variable  (0) 2022.05.05
01 자바를 시작하기 전에  (0) 2022.05.04