| 1. Basics | 클래스, 객체, 변수, 메서드 // 생성자, 초기화 |
| 2. Advanced | 상속, 오버라이딩 // package, import, modifiers, 다형성 // 추상클래스, interface, 내부클래스 |
| 3. 변수와 메서드 | 1. 선언위치에 따른 변수의 종류 2. 클래스 변수와 인스턴스 변수 3. 메서드 4. 메서드 호출 5. return 문 6. JVM의 메모리구조 7. 메서드 오버로딩 8. 생성자 |
3.1 선언위치에 따른 변수의 종류
| 변수의 종류 | 선언 위치 | 생성 시기 |
| 클래스 변수(static 변수) | 클래스 영역 | 클래스가 메모리에 로딩될 때 *A.java -컴파일-> A.class **로딩: 폴더에 있다가 메모리로 올라가는 시점 |
| 인스턴스 변수 | 인스턴스가 생성될 때 | |
| 지역 변수 | 메서드 영역 | 변수 선언문이 수행될 때 |
-인스턴스 변수: 필드, 객체가 가져야 하는 속성 값을 class 속에 마련
a)인스턴스마다 고유한 상태를 유지해야 하는 속성을 저장하기 위함
b)인스턴스 생성 후, '참조변수.인스턴스변수명'으로 접근
-클래스 변수(static 변수)
a)선언 방법: 인스턴스 변수 앞에 static 키워드 붙이기
b)같은 클래스의 모든 인스턴스들이 공유하는 변수
c)인스턴스 생성없이 사용할 수 있음 '클래스이름.클래스변수명'으로 접근
d)클래스가 메모리에 로딩될 때 생성되어 프로그램이 종료될 때까지 유지됨
-지역 변수
a)메서드 내에서 선언되며 메서드 내에서만 사용 가능
b)메서드가 종료되면 소멸됨
c)조건문, 반복문 블록{} 내에 선언된 지역변수는 블록을 벗어나면 소멸됨
3.2 클래스 변수와 인스턴스 변수
3.3 메서드
- 메서드란
-특정 작업을 수행하는 일련의 문장들의 묶음
-어떤 값을 입력으로 받아서 처리하고 그 결과를 돌려줌
*입력 받는 값이 없을 수도 있고 결과를 돌려주지 않을 수도 있음 - 메서드 작성지침
-반복적으로 수행되는 여러 문장을 묶어서 하나의 메서드로 작성
-하나의 메서드는 한 가지 기능만을 수행하도록 작성하는 것이 좋음 - 메서드의 구조

3.4 메서드 호출
- 호출 방법
참조변수.메서드 이름(); //메서드에 선언된 매개변수가 없는 경우
참조변수.메서드 이름(값1, 값2, ...); //메서드에 선언된 매개변수가 있는 경우
class MathTest{
public int multiply(int a, int b){
int result = a * b;
return result;
}
...
MathTest mt = new MathTest();
int value = mt.multiply(3, 7);
...
- 메서드 호출 예제

- 메서드 호출 과정

3.5 return 문
:현재 실행 중인 메서드를 종료하고 호출한 메서드로 되돌아가도록 지시하는 문장
:메서드의 반환타입이 void가 아닌 경우, 구현부{} 안에 반드시 return 반환값이 반드시 포함되어야 함
*반환값이 없는 경우 반환타입: void
- 반환 값이 없는 경우
-return; (return문만 써주면 됨) - 반환 값이 있는 경우
-return result; (return 문 뒤에 반환값을 지정)

- return 문 사용시 주의사항
-반환 값이 있는 메서드는 모든 경우에 return문이 있어야 함.
*없을 시 아래와 같은 오류 문구가 나옴
This method must return a result of type int

3.6 JVM의 메모리 구조
| 메서드 영역(Method Area) | 클래스 정보(클래스 데이터), 클래스 변수를 저장 |
| 호출 스택(Call Stack) | -메서드 작업에 필요한 메모리 공간 -메서드가 호출되면 메서드 수행에 필요한 메모리공간 할당 -메서드가 종료되면 사용하던 메모리 공간을 반환 |
| 힙(Heap) | -인스턴스(객체 또는 배열)가 생성되는 공간 -인스턴스 변수를 저장 |

호출 스택
메서드가 호출되면 수행에 필요한 메모리를 스택에 할당 받음 ->
메서드의 수행이 종료되면 사용했던 메모리를 반환, 스택에서 제거됨 ->
호출 스택에서 최상위 메서드가 현재 실행중인 메서드임


3.7 메서드 오버로딩
: 하나의 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것 / 메서드 호출 시 컴파일러가 매개변수의 개수, 타입, 순서 등을 고려하여 일치하는 메서드 호출됨
: 같은 기능을 수행하지만 매개변수를 달리해야 하는 경우에 적용
-오버로딩의 조건
메서드의 이름이 같아야 한다
매개변수의 개수 또는 타입이 달라야 한다
매개변수는 같고 반환 타입이 다른 경우는 오버로딩이 성립되지 않는다 (반환 타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다)

-오버로딩이 아닌 경우 사례
1) 매개변수의 이름만 다른 경우
2) 반환 타입이 다른 경우

4.1 생성자(constructor)
인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'
A a = new A(); // 이 때 생성자가 자동 호출 됨
-생성자가 하는 일
인스턴스 변수의 초기화 작업 또는 인스턴스 생성시 실행해야 할 작업 등
-생성자의 조건
생성자의 이름은 클래스의 이름과 같아야 함
생성자는 리턴 값이 없다 (그러나 void를 사용하지 않음)
-생성자의 구조

-생성자와 메소드
| 비슷한 점 | -인자가 있고 오버로딩도 가능: |
| 다른 점 | -이름이 클래스와 같다 -생성시 자동으로 호출된다 -모든 클래스에는 반드시 하나 이상의 생성자가 있어야 함 (->4.2) -리턴이 없다 |
*생성자는 인스턴스를 생성하지 않음, 생성자는 인스턴스 변수들의 초기화만 함
(연산자 new가 인스턴스를 생성함 ex. A a = new A(); // new로 생성하고 A()로 초기화)
4.2 기본 생성자
-매개변수가 없는 생성자
클래스에 생성자가 하나도 정의되어 있지 않으면 기본 생성자가 자동으로 생성
(모든 클래스에는 반드시 하나 이상의 생성자가 있어야 하므로)
*매개변수도 없고, 아무런 내용도 없음(컴파일러가 추가)
*생성자가 하나라도 존재하면 생성되지 않음

4.3 매개변수가 있는 생성자
인스턴스마다 각기 다른 값으로 초기화 해야 할 경우에 유용함

4.4 this
-this()
생성자가 여러 개일 때 사용
한 생성자에서 같은 클래스의 다른 생성자를 명시적으로 호출할 때 사용
다른 생성자를 호출할 때, 반드시 생성자의 첫 문장에서만 가능

-this
인스턴스 자신을 가리키는 참조변수
인스턴스의 주소가 저장되어 있음
모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재함

4.5 생성자를 이용한 인스턴스의 복사
-복사(copy) 생성자
현재 인스턴스와 같은 상태를 갖는 다른 인스턴스를 하나 더 만들고자 할 때
인자가 자신의 클래스 인스턴스인 생성자를 이용

'CSE > CP1 이론' 카테고리의 다른 글
| CP1_08. 객체지향프로그래밍_Advanced_인터페이스 (0) | 2024.06.10 |
|---|---|
| CP1_07. 객체지향프로그래밍_Advanced_추상클래스 (0) | 2024.06.10 |
| CP1_07.객체지향 프로그래밍_Advanced_4. Modifier(제어자) (0) | 2024.05.29 |
| 12주차_객체지향프로그래밍 II. Advanced 3. Package와 import~ (0) | 2024.05.27 |
| CP1_06.객체지향 프로그래밍_Basics_1 (0) | 2024.05.02 |