객체지향 특징
코드의 재사용성, 코드의 관리 용이, 신뢰성이 높은 프로그래밍 가능
클래스 : 객체를 정의해놓은 것이고, 객체를 생성하는데 사용
클래스 —(인스턴스화)—> 인스턴스(객체)
객체는 속성과 기능의 집합, 속성과 기능을 객체의 멤버(구성요소)라고 한다.
객체의 속성 : 멤버변수, 특성, 필드, 상태
객체의 기능 : 메서드, 함수, 행위
인스턴스 생성
클래스명 변수명; //클래스의 객체를 참조하기 위한 참조변수 선언
변수명 = 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;
}
인스턴스변수와 클래스 변수는 각 타입의 기본타입으로 자동 초기화 된다.
지역변수는 초기화 되지 않으므로 직접 초기화해야됨
'Back-end' 카테고리의 다른 글
11 컬렉션 프레임웍(1) (0) | 2021.07.06 |
---|---|
02 관계형 데이터베이스와 오라클 데이터 베이스 (0) | 2021.07.05 |
10 날짜와 시간 & 형식화 (4) (0) | 2021.07.05 |
01 데이터 베이스 (0) | 2021.07.04 |
10 날짜와 시간 & 형식화 (3) (0) | 2021.07.03 |