클래스 : 객체를 정의해 놓은 것. 객체를 생성하는데 사용하는 설계도.
클래스 = 필드 + 생성자 + 메서드
필드(Field) = 멤버변수 = 전역변수
: 클래스 내부이면서 생성자와 메서드 밖에서 정의된다.
지역변수 : 생성자와 메서드 내부블록({})에서 정의된다.
객체 : 실제로 존재하는 것. 사물 또는 개념. 속성과 기능을 가지는 프로그램 단위
모든 인스턴스를 대표하는 일반적인 용어.
객체 = 속성(멤버변수) + 기능(메서드)
인스턴스 : 특정 클래스로부터 생성된 객체
인스턴스화 : 클래스 => 인스턴스(객체)
클래스명 변수명 = new 클래스명;
참조타입? 배열타입, 열거타입, 클래스(String도 클래스다), 인터페이스. 참조타입의 값은 모두 객체다. 모든 참조타입은 객체의 주소를 담기때문에 메모리는 8byte를 쓴다.
참조변수? 객체의 주소값을 갖고있는 변수(명).
Tv[] tvArr = new Tv[3]
클래스 == 데이터 + 함수
클래스의 탄생 과정
변수 : 하나의 데이터를 저장할 수 있는 공간
배열 : 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간
구조체 : 서로 연관된 여러 데이터(종류 관계 X) 를 하나로 저장할 수 있는 공간
클래스 : 데이터와 함수의 결합(구조체 + 함수)
클래스는 원하는 타입을 직접 만들 수 있다.
선언 위치에 따른 변수의 종류
클래스 변수 : =cv, static변수. 클래스가 메모리에 올라갈 때 생성. 객체생성 안해도 생성되고 언제든지 사용 가능. 객체의 속성들 중 공통적으로 유지되어야 하는 것은 cv로 한다.
Static 변수(클래스영역에 선언시 인스턴스 변수 앞에 Static 붙이면 됨).
공유 변수(모든 인스턴스가 공통된 저장공간을 공유하게 됨)
프로그램이 종료될 때 소멸. 저장메모리는 메소드영역.
접근방법 : 클래스.클래스변수명
인스턴스 변수 : =iv, 클래스영역에 선언. 객체가 생성될 때 인스턴스 변수가 생성. 객체의 속성들 중 개별적으로 부여되어야 하는 것은 iv로 한다. 객체마다 따로 생성됨.
인스턴스가 소멸할 때 소멸. 저장메모리는 힙 영역.
접근방법 : 참조변수명.인스턴스변수명
지역 변수 : 메서드가 호출되서 실행될 때 생성. 메서드 종료시 자동으로 제거.
자동으로 초기화가 되지 않기 때문에 사용하려면 반드시 초기화 필요.
for, while문 {}블럭 안의 지역변수는 그 안에서만 사용 가능.
블록을 벗어나면 소멸. 저장메모리는 스택영역.
ex. for문에서 i
매개변수 : =파라미터. 함수를 정의할 때 함수에 사용되는 변수.
int add(int x, int y)할때 int x와 int y가 매개변수
매서드 호출시 '전달하는 값'을 가지고 있는 변수.
지역변수처럼 선언된 곳부터 수행이 끝날 때 까지 유효
클래스변수와 인스턴스변수는 클래스 영역에서 사용되므로 접근제어자 사용 가능.
지역변수와 매개변수는 메서드영역에서 사용되므로 접근제어자 사용 x.
반환타입 메서드이름 (타입 변수명, 타입 변수명, ... ) { // (선언부)
// 메서드가 호출되면 수행할 코드(구현부)
}
장점 : 중복코드 제거, 관리 용이, 재사용 가능.
반복적으로 수행되는 여러문장을 메서드로 작성. 하나의 메서드는 한가지 기능만 수행하는 것이 좋다.
메서드 호출 : 메서드이름(값1, 값2,...);
: 값을 입력받아서 처리하고 결과를 반환한다.
int add(int x, int y) {
// int(반환타입) add(메서드 이름) (int x, int y(매개변수(입력)))
int result = x + y; => 처리
return result; => 결과를 반환
}
: 반환타입중 하나. 메서드 수행시 아무것도 반환하지 않을 때 사용.
return;
안써도 컴파일러가 자동으로 추가.
: 반환타입이 void가 아닌경우, 반드시 return문이 필요!
: 메서드 수행에 필요한 메모리가 제공되는 공간.
메서드가 호출되면 호출 스택에 메모리가 할당, 종료되면 해제.
메서드가 메서드를 호출하면 스택처럼 최근에 호출된 메서드 먼저 실행. 나머지는 대기.