[Java] 객체지향개념 2
요약 : 변수, 메서드
변수의 종류
인스턴스변수
- 인스턴스변수는 해당클래스의 인스턴스의 개별적인 공간에 존재하며, 인스턴스마다 다른 값을 저장가능하다.
- 인스턴스 생성 후 참조변수.인스턴스변수명 으로 접근이 가능하다.
- 인스턴스 생성 시 생성되며, 참조하는 변수가 없을 때 가비지컬렉터에 의해 자동 제거된다.
클래스변수
- 같은 클래스의 모든 인스턴스들이 공유하는 변수.
- 인스턴스 생성 없이 클래스이름.클래스변수명으로 접근 가능.
- 클래스가 로딩될 때 생성되가 프로그램 종료시 소멸
지역변수 ( 클래스, 인스턴스변수를 제외한 모든변수 *static 붙일 수 없음 )
- 메서드 내부에 선언되며, 메서드의 종료와 함께 소멸된다.
- 조건문, 반복문의 블럭{} 내에 선언된 지역변수는 블럭을 벗어나면 소멸
메서드
- 클래스 영역에만 정의할 수 있다.
- 리턴값이 없을경우 데이터 타입을 void로 한다.
- 메서드는 {}의 끝에 도달하거나 return문을 만났을 때 종료된다.
- 하나의 메서드는 하나의 기능만 하는게 좋음, 물론 경우에 따라 다르겠지만
( * 조건에따라 반환값이 있는경우 조건문과 상관없이 값은 무조건 반환되어야한다. )
인스턴스메서드
- 인스턴스 생성 후 참조변수.메서드이름 으로 호출가능
- 메서드 내에서 인스턴스변수 사용가능
클래스메서드 ( static )
- 객체생성없이 클래스명.메서드이름 으로 호출가능.
- 인스턴스 변수, 인스턴스 메서드와 관련없는 작업을 하는 메서드
- 메서드 내에서 인스턴스 변수, 메서드 호출불가
- 메서드 내에서 인스턴스변수를 사용하지 않는다면 static을 붙이는게 좋음?
JVM 메모리 구조
메서드영역
- 클래스 정보와 클래스 변수가 저장되는 곳
호출스택 ( call stack )
- 메서드의 작업공간.
- 메서드 호출되면 수행에 메서드는 필요한 메모리 공간을 할당받고 메서드가 종료되면 사용하던 메모리를 반환한다.
호출스택의 특징
- 메서드가 호출되면 필요한 메모리를 스택에 할당받는다.
- 메서드가 종료되면 사용했던 메모리를 반환한다.
- 호출스택은 스택이라는 자료구조로 되어있는데 스택은 가장 마지막에 넣은 데이터가 가장 먼저 나온다는 자료구조이다.
힙 ( heap )
- 인스턴스가 생성되는 공간.
- new 연산자에 의해 생성되는 배열과 객체는 모두 여기에 생성
재귀호출
- 반복문으로 바꿀 수 있으며 반복문보다는 성능이 좋지않다.
메서드 오버로딩
- 메서드의 이름이 같아야한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
- 매개변수는 같고 리턴타입이 다른경우는 오버로딩이 성립되지 않는다.
( * 매개변수가 타입만다르고 갯수같을경우 어떤메서드가 호출됬는지 판별하기위해 메서드의 매개변수에 데이터타입을 확실히 구분시켜준다. 아니면 컴파일 에러가발생한다. ex) add( 3, 5L ) -> add ( int a, long b ) 호출 )