6장
1. 객체와 클래스
1.1. 기본 개념
객체 지향 프로그래밍(OOP, Object Oriented Programming): 객체를 기본 단위로 삼고 객체들이 서로 상호 작용하는 프로그램을 개발하는 개발 방법론
객체(Object): 실존하는 사물(개념)의 추상화로 상태(변수, variable)와 기능(메서드, method)을 가지는 대상
인스턴스화(instantiate): 클래스로부터 객체를 만드는 과정
인스턴스(Instance): 클래스에서 만들어진 객체
클래스(Class): 서로 관련이 있는 변수와 메서드를 한 곳에 모아 정의한 코드 묶음
1.2. 객체의 예시


2. 변수(variable)
2.1. 변수의 종류
정의되는 영역에 따라 분류
클래스 영역 (멤버변수)
클래스 변수 (cv, class variable)
특징
모든 인스턴스가 값을 공유
생성
클래스가 메모리에 올라갈 때 생성
사용
선언
static 타입이름 변수이름;
호출
클래스이름.클래스변수이름
인스턴스 변수 (iv, instance variable)
특징
인스턴스마다 별도의 저장공간을 가지므로 서로 다른 값을 가짐
생성
인스턴스가 메모리에 올라갈 때 생성
사용
선언
타입이름 변수이름;
호출
참조변수.인스턴스변수이름
클래스 외의 영역 - 메서드(생성자) - 초기화블럭 내부
지역 변수 (lv, local variable)
this
특징
- 인스턴스 자신을 가리키는 참조변수 - 인스턴스 주소가 저장되어 있음 - 모든 인스턴스 메서드에 숨겨진 채로 존재
생성
JVM 컴파일러가 자동으로 추가
사용
this.변수이름
사용자 정의
특징
선언된 블럭{ } 내에서만 사용 가능(벗어나면 소멸)
생성
변수 선언문이 수행되었을 때 생성
사용
선언
타입이름 변수이름;
호출
메서드 내부에서 호출(외부 호출 불가)
2.2. 변수의 종류 예시

2.3. 초기화
멤버 변수 - 클래스 변수 - 인스턴스 변수
특징
각 타입의 기본값으로 자동 초기화
순서
클래스 변수 초기화 → 인스턴스 변수 초기화 자동 초기화 → 간단 초기화(명시적 초기화) → 복잡 초기화(초기화블럭, 생성자)
종류
자동 초기화
JVM이 자동으로 변수의 자료형에 맞는 기본값으로 초기화
명시적 초기화 (explicit initialization)
변수를 선언과 동시에 초기화
초기화 블럭 (initialization block)
클래스 초기화 블럭
클래스 변수의 복잡한 초기화에 사용
인스턴스 초기화 블럭
인스턴스 변수의 복잡한 초기화에 사용
지역변수
특징
사용하기 전에 수동으로 초기화
2.4. 초기화 예시

3. 메서드(Method)
메서드(Method): 특정 작업 단위로 분리한 코드 묶음
3.1. 메서드의 구조
인수(argument): 메서드를 호출할 때 괄호( ) 안에 지정하는 값
매개변수(parameter, 복사본): 메서드에 선언된 값
선언부 (header)
반환 타입 (return value)
정의
메서드의 작업수행 결과인 반환값의 타입 선언
특징
반환값이 없는 경우 'void' 사용
메서드이름
정의
수행하는 기능에 대한 이름 선언
매개변수 선언 (parameter declaration)
정의
메서드가 작업을 수행하는데 필요한 값을 선언
특징
- 매개변수 선언 시 변수 타입 생략 불가 - 입력값이 없는 경우 생략
구현부 (body)
-
정의
메서드를 호출 시 실행할 작업
반환값
정의
메서드가 반환하는 값
특징
void
생략 가능(JVM 컴파일러가 자동으로 추가)
void 외의 값
선언부의 반환 타입과 반환값은 일치하거나 자동 형변환 가능해야 함 if-else 문의 경우 항상 반환값을 반환하도록 주의 필요
3.2. 메서드의 예시

3.3. 메서드의 종류
클래스 메서드 (class method)
특징
모든 인스턴스가 메서드를 공유
생성
클래스가 메모리에 올라갈 때 생성
사용
선언
static 선언부 구현부;
호출
클래스이름.클래스메서드이름
인스턴스 메서드 (instance method)
생성자 (Constructor)
this
특징
생성자에서 다른 생성자를 호출할 때 사용하는 메서드 - 생성자의 이름으로 this 사용 - 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서 가능
생성
JVM 컴파일러가 자동으로 추가
사용
this(타입 변수명);
사용자 정의
특징
인스턴스 변수를 초기화하는 메서드 - 오버로딩 가능 - 생략 가능(JVM 컴파일러가 자동으로 추가) - 인스턴스를 생성하지 않음(연산자 new가 인스턴스 생성)
생성
인스턴스가 메모리에 올라갈 때 생성
사용
선언
기본생성자(자동): 클래스이름( ) { } 생성자(수동): 클래스이름(타입 변수명) { // 하는 일 }
호출
인스턴스 생성 시 호출
사용자 정의
특징
인스턴스마다 별도의 저장공간을 가지므로 개별 메서드로 취급
생성
인스턴스가 메모리에 올라갈 때 생성
사용
선언
선언부 구현부;
호출
참조변수.인스턴스메서드이름;
3.4. 호출 스택
호출 스택 (Call Stack)
정의
서드의 작업에 필요한 메모리 공간을 제공하는 스택
조건
- 메서드가 호출되면 수행에 필요한 만큼의 메모리를 스택에 할당받음 - 수행을 마치고 나면 사용했던 메모리를 반환하고 스택에서 제거 - 호출 스택 가장 위에 있는 메서드는 현재 실행중인 메서드 - 아래에 있는 메서드는 위의 메서드를 호출한 메서드
3.5. 호출 스택 예시




3.6. 오버로딩
메서드 오버로딩 (method overloading, overloading)
정의
한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것
조건
- 중복되는 메서드 이름이 같아야 한다. - 매개변수의 개수 또는 타입이 달라야 한다. - 반환 타입은 관계 없다.
예시
println( ) 함수
참고 자료
자바의 정석 - 도우출판
Last updated