본문 바로가기
Back-end

객체 지향 정리

by 신재권 2021. 7. 5.

객체지향 특징

코드의 재사용성, 코드의 관리 용이, 신뢰성이 높은 프로그래밍 가능

클래스 : 객체를 정의해놓은 것이고, 객체를 생성하는데 사용

클래스 —(인스턴스화)—> 인스턴스(객체)

객체는 속성과 기능의 집합, 속성과 기능을 객체의 멤버(구성요소)라고 한다.

객체의 속성 : 멤버변수, 특성, 필드, 상태

객체의 기능 : 메서드, 함수, 행위

인스턴스 생성

클래스명 변수명; //클래스의 객체를 참조하기 위한 참조변수 선언
변수명 = new 클래스명(); //클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장

하나의 인스턴스를 여러 개의 참조변수가 가리키는 경우는 가능하지만,

여러개의 인스턴스를 하나의 참조변수가 가리키는 것은 불가능하다.

클래스- 사용자 정의 타입

직접 새로운 타입 정의 가능, 관련된 값을 묶어서 하나의 타입으로 정의

선언 위치에 따른 변수의 종류

클래스 변수 : 클래스 영역 : 클래스가 메모리에 올라갈때 생성

인스턴스변수 : 클래스 영역 : 인스턴스 생성시

지역변수 : 메서드 영역 : 변수 선언문 수행시

인스턴스 변수 : 각 인스턴스의 개별적인 저장공간, 인스턴스마다 다른 값 저장 가능

접근 방법 : 참조변수.인스턴스변수명 으로 접근

클래스 변수 : 같은 클래스의 모든 인스턴스들이 공유하는 변수

인스턴스 생성없이 클래스이름.클래스변수명 으로 접근

지역변수 : 메서드 내에 선언되며, 메서드의 종료와 소멸 , { } 안에 선언된 지역변수는 블럭 벗어나면 소멸

인스턴스 변수는 인스턴스가 생성될 떄마다 생성되므로 인스턴스마다 각기 다른 값을 유지할 수 있지만, 클래스변수는 모든 인스턴스가 하나의 저장공간을 공유하므로 항상 공통된 값을 갖는다.

메서드 : 작업을 수행하기 위한 명령문의 집합 , 값을 입력받아 처리해 결과를 돌려준다

return문 : 메서드를 종료하고 호출한 메서드로 되돌아감

메서드의 호출 : 참조변수.메서드 이름(값1,값2,...);

JVM의 메모리 구조

메서드 영역 : 클래스 정보와 클래스변수가 저장됨

호출 스택 : 메서드의 작업 공간

힙 : 인스턴스 , new 연산자에 의해 생성되는 것들

기본형 매개변수 : 변수의 값을 읽기만 가능 (read only) 참조형 매개변수 : 변수의 값을 읽고 변경 가능 (read & write)

재귀호출(recursive call) : 메드서드 내에서 자기 자신을 반복적으로 호출

인스턴스 메서드 : 인스턴스 생성 후, 참조변수.메서드이름()으로 호출

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

메서드 내에서 인스턴스 변수 사용 가능

클래스 메서드(static 메서드) : 객체 생성없이, 클래스이름.메서드이름()으로 호출

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

메서드 내에서 인스턴스 변수 사용 불가 static 변수만 사용 가능

같은 클래스의 멤버간에는 객체 생성이나 참조 변수 없이 참조할 수 있지만, static멤버들은 인스턴스 멤버들을 참조 불가능 (변수, 메서드)

오버로딩(overloading)

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

조건 : 메서드의 이름이 같아야 하고, 매개변수의 개수 또는 타입이 달라야 하고, 리턴타입만 다른경우는 오버로딩이 성립하지 않음

가변인자

메서드이름 (type...매개변수이름)

생성자(constructor)

인스턴스가 생성될 떄 마다 호출되는 인스턴스 초기화 메서드

모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다.

조건 : 생성자의 이름은 클래스와 같아야 하고, 리턴값이 없음

클래스에 생성자가 없으면 컴파일러가 기본 생성자를 추가함(있으면 추가 안함) 클래스이름() {}

this() - 생성자와 같은 클래스의 다른 생성자를 호출할 때 사용 , 다른 생성자 호출한 생성자의 첫 문장에서만 가능하다.

//아래의 생성자를 불러온다
Car (){
	this("white", "auto", 4);
}

참조변수 this -인스턴스 자신을 가리키는 참조변수

Car (String color, String geraType, int door){
	this.color =color;
	this.gearType = gearType;
	this.door = door;
}

인스턴스변수와 클래스 변수는 각 타입의 기본타입으로 자동 초기화 된다.

지역변수는 초기화 되지 않으므로 직접 초기화해야됨