본문 바로가기

Web Development/Java

[Java] 객체지향개념2

변수와 메서드?

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