선언위치에 따른 변수의 종류
-인스턴스 변수
=각 인스턴스의 개별적인 저장공간.인스턴스마다 다른 값 저장가능
=인스턴스 생성 후, '참조변수.인스턴스변수명'으로 접근
=인스턴스를 생성할 때 생성, 참조변수가 없을 때 가비지컬렉터에 의해 자동제거됨
클래스 변수
-같은 클래스의 모든 인스턴스들이 공유하는
-인스턴스 생성없이 '클래스이름.클래스변수명'으로 접근
-클래스가 로딩될 때 생성되고 프로그램이 종료될 때 소멸
지역변수 : 메서드 내에 선언되며, 메서드의 종료와 함께 소멸
조건문, 반복문의 블럭{}내에 선언된 지역변수는 블럭을 벗어나면 소멸
클래스변수와 인스턴스 변수
"인스턴스변수는 인스턴스가 생성될 때마다 생성, 인스턴스마다 각기 다른 값을 유지, 클래스 변수는 모든 인스턴스가
하나의 저장공간을 공유하므로 항상 공통된 값을 갖는다"
메서드란?
-작업을 수행하기 위한 명령문의 집합
-입력받아서 처리하고 그 결과를 돌려줌
메서드의 장점과 작성지침
-반복적인 코드를 줄이고 코드의 관리가 용이
-여러 문장을 메서드로 작성
-하나의 메서드는 한 가지 기능만 수행하도록 작성
-관련된 여러 문장을 메서드로 작성
return문
int max(int a, int b){
int result = 0;
if ( a > b)
result = a;
else
result = b;
return result;
}
int max(int a, int b) {
int result = 0;
if(a>b)
result = a;
else
result = b;
}
int max(int a, int b) {
if(a > b)
return a;
return b;
메서드 호출
참조변수.메서드 이름(); //메서드에 선언된 매개변수가 없는 경우
참조변수.메서드이름(값1,값2 ....)// 메서드에 선언된 매개변수가 있는 경우
메서드 영역
- 클래스 정보와 클래스변수가 저장
호출스택
-메서드의 작업공간. 메서드가 호출되면 메서드 수행에 필요한 메모리 공간 할당
힙
-인스턴스가 생성되는 공간, new연산자에 의해서 생성되는 배열과 객체는 모두 여기에 생성
기본형 매개 변수와 참조형 매개변수
기본형 매개변수 - 변수의 값을 읽기만 할 수 있다 (read only)
참조형 매개변수 - 변수의 값을 읽고 변경할 수 있다(read & write)
재귀호출
- 반복문보다 성능이 나쁨
클래스메서드 (static메서드)와 인스턴스메서드
-인스턴스 메서드
참조변수. 메서드이름
클래스메서드(static메서드)
객체생성없이 클래스이름.메서드이름()
인스턴스 변수나 인스턴스메서드와 관련없는 작업을 하는 메서드
메서드 내에서 인스턴스변수 사용불가
메서드 내에서 인스턴스변수를 사용하지 않는다면 static을 붙이는 것을 고려한다
class MyMath
long a,b;
long add() { // 인스턴스 메서드
return a + b;
}
static long add (long a, long b) { // 클래스메서드 (static 메서드)
return a+b;
}
}
4. 메서드 오버로딩
"하나의 클래스에 같은 이름의 메서드를 여러 개 정의하는 것을 메서드 오버로딩, 간단히 오버로딩이라고 한다"
4.2 오버로딩의 조건
-메서드의 이름이 같아야 한다.
-매개변수의 개수 또는 타입이 달라야 한다
-매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않음
예
System.out.println 메서드
-다양하게 오버로딩된 메서드를 제공함으로써 모든 타입의 변수를 출력
4.3 오버로딩의 예
-매개변수의 이름이 다른 것은 오버로딩이 아니다
-리턴타입은 오버로딩의 성립조건이 아니다
long add(int a, long b) { return a+b};
long add(long a, long b) {return a+b}
-> 매개변수의 타입이 다르므로 오버로딩이 성립
int add(int[] a) {
int result = 0;
for(int i=0; i<a.length; i++){
result + = a[i];
}
return result;
}
생성자
-인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드'
-인스턴스 변수의 초기화 또는 인스턴스 생성시 수행할 작업에 사용
-몇가지 조건을 제외하고는 메서드와 같다
-모든 클래스에는 반드시 하나 이상의 생성자가 있어야한다
*인스턴스 초기화 -인스턴스 변수에 적절한 값을 저장하는 것
1. 연산자 new에 의해서 메모리 heap에 Card클래스 인스턴스 생성된다.
2.생성자 Card()가 호출되어 수행된다.
3.연산자 new의 결과로, 생성된 Card인스턴스의 주소가 반환되어 참조 c에 저장된다
생성자의 조건
-생성자의 이름은 클래스의 이름과 같아야한다
-생성자는 리턴값이 없다(하지만 void를 쓰지 않는다)
기본 생성자
-매개변수가 없는 생성자
-클래스에 생성자가 하나도 없으면 컴파일러가 기본 생성자를 추가한다
클래스이름(){}
card(){}//컴파일러에 의해 추가된 Card 클래스의 기본생성자
매개변수가 있는 생성자
생성자에서 다른 생성자 호출하기 -this
this()-생성자, 같은 클래스의 다른 생성자를 호출할 때 사용 다른 생성자 호출은 생성자의 첫 문장에서 가능
참조변수 this
-인스턴스 자신을 가리키는 참조변수. 인스턴스의 주소가 저장되어있음 모든 인스턴스 메서드에 지역변수로 숨겨진채로 존재
'취준 note 2023 > 자바의정석' 카테고리의 다른 글
자바의정석 기초편 - 변수의 초기화 ~객체지향 개념 2-2 (0) | 2023.01.11 |
---|---|
자바의 정석 기초편 -요약파일 한꺼번에 정리하기 변수~객체1 (0) | 2023.01.09 |
자바의 정석- 객체지향의 원리2 (2) | 2022.12.27 |
자바의 정석 -상속 (3) | 2022.12.21 |
자바의정석-객체지향 -클래스와 객체, 인스턴스 (1) | 2022.11.20 |