변수와 메서드?
1. 선언위치에 따른 변수의 종류

▶ 인스턴스 변수
-각 인스턴스의 개별적인 저장공간
-인스턴스 생성 후 '참조변수.인스턴스변수명'으로 접근
-인스턴스를 생성할 때 생성되고 참조변수가 없을 때 가비지컬렉터에 의해 자동 제거됨
▶ 클래스 변수
-같은 클래스의 모든 인스턴스들이 공유하는 저장공
-인스턴스 생성없이 '클래스이름.클래스변수명'으로 접근
-클래스가 로딩될 때 생성되고 프로그램이 종료될 때 소멸
▶ 지역변수
-메서드 내에 선언되며 메서드의 종료와 함께 소멸
-조건문, 반복문의 블럭{} 내에 선언된 지역변수는 블럭을 벗어나면 소멸
*클래스변수와 인스턴스변수 사용 기준?
모든 객체가 공통적으로 가져야하는 특성의 경우 static을 붙여 클래스 변수로 선언
2. 메서드
▶ 메서드란?
-작업을 수행하기 위한 명령문의 집합
-어떤 값을 입력받아서 처리하고 그 결과를 돌려준다.
(입력받는 값이 없을 수도 있고 결과를 돌려주지 않을 수도 있음)
▶ 메서드의 장점과 작성지침
-반복적인 코드를 줄이고 코드의 관리를 용이하게 한다
-반복적으로 수행되는 여러 문장을 메서드로 작성한다
-관련된 여러 문장을 메서드로 작성한
-하나의 메서드는 한가지 기능만 수행하도록 작성한다
3. return문
▶ 메서드가 정상적으로 종료되는 경우
-메서드의 블럭{}의 끝에 도달했을 때
-메서드의 블럭{}을 수행 도중 return문을 만났을 때
-return문을 만나면 현재 실행중인 메서드를 종료하고 호출한 메서드로 돌아감
(1) 반환값이 없는 경우: return문만 써주면 됨
(2) 반환값이 있는 경우: return문 뒤에 반환값을 지정해주어야 함
*반환값은 메서드에 정의된 반환 타입과 일치하거나 자동형변환이 가능해야 함
4. JVM의 메모리 구조

▶ 메서드 영역
-클래스 정보와 클래스 변수가 저장되는 곳
▶ 호출스택
-메서드의 작업공간. 메서드가 호출되면 메서드 수행에 필요한 메모리공간을
할당받고 메서드가 종료되면 사용하던 메모리를 반환한다.
메서드에 사용되는 지역변수들도 여기에 만들어진다.
▶ 힙
-인스턴스가 생성되는 공간.
new 연산자에 의해서 생성되는 배열과 객체는 모두 여기에 생성된다.
※호출스택
-메서드가 호출되면 수행에 필요한 메모리를 스택에 할당받는다
-메서드가 수행을 마치면 사용했던 메모리를 반환한다
-호출스택의 제일 위에 있는 메서드가 현재 실행중인 메서드다
-아래에 있는 메서드가 바로 위의 메서드를 호출한 메서드다
5. 기본형 매개변수와 참조형 매개변수
▶ 기본형 매개변수
-변수의 값을 읽기만 할 수 있다. (read only)
-단순히 저장된 값을 복사하는 것이기 때문
▶ 참조형 매개변수
-변수의 값을 읽고 변경할 수 있다 (read & write)
-값이 저장되어 있는 곳의 주소값을 복사하는 것이기 때문
6. 클래스메서드(static메서드)와 인스턴스메서드
▶ 인스턴스메서드
-인스턴스 생성 후, '참조변수.메서드이름()'으로 호출
-인스턴스변수나 인스턴스메서드와 관련된 작업을 하는 메서드
-메서드 내에서 인스턴스변수 사용가능
▶ 클래스메서드(static메서드)
-객체 생성없이 '클래스이름.메서드이름()'으로 호출
-인스턴스변수나 인스턴스메서드와 관련없는 작업을 하는 메서드
-메서드 내에서 인스턴스변수 사용 불가
(인스턴스 변수는 인스턴스를 생성해야만 존재하기 때문에
static 메서드가 호출되었을 때 인스턴스 변수가 존재한다는 보장이 없음)
-> 메서드 내에서 인스턴스 변수를 사용하지 않는다면 static을 붙이는 것을 고려한다
7. 멤버 간의 참조와 호출 - 메서드의 호출, 변수의 접근
-같은 클래스의 멤버 간에는 객체 생성이나 참조변수 없이 서로 참조 가능.
△ static 멤버들은 인스턴스 멤버들을 참조할 수 없음.
-인스턴스메서드에서는 iv와 cv를 모두 사용할 수 있지만, 클래스메서드에서는 iv를 사용할 수 없음
메서드 오버로딩?
1. 메서드 오버로딩이란?
: 하나의 클래스에 같은 이름의 메서드를 여러개 정의하는 것
e.g. println()
2. 오버로딩의 조건
-메서드의 이름이 같아야 한다
-매개변수의 개수 또는 타입이 달라야 한다
-리턴타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다
-아래와 같은 경우 오버로딩 성립
long add(int a, long b) { return a+b; }
long add(long a int b) { return a+b; }
->실제로 작업내용은 달라도 같은 의미의 기능을 수행하는 경우 오버로딩을 함
출처: 남궁성의 자바의 정석 강의자료
'Web Development > Java' 카테고리의 다른 글
[Java] 캡슐화, TDA 원칙 (2) | 2024.01.13 |
---|---|
[Java] 객체지향개념3 (1) | 2024.01.09 |
[Java] 객체지향개념1 (1) | 2024.01.09 |
[Java] 변수 타입간의 변환 방법 (1) | 2023.12.28 |
[Java] 기본형 변수의 종류와 크기 (1) | 2023.12.28 |