본문 바로가기
CSE/CP1 이론

CP1_06.객체지향 프로그래밍_Basics_2

by 0/0 2024. 6. 5.
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 문 사용시 주의사항
    -반환 값이 있는 메서드는 모든 경우에 return문이 있어야 함.
      *없을 시 아래와 같은 오류 문구가 나옴

This method must return a result of type int

return 문 사용시 주의사항

3.6 JVM의 메모리 구조

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

JVM의 메모리 구조

호출 스택

메서드가 호출되면 수행에 필요한 메모리를 스택에 할당 받음 ->

메서드의 수행이 종료되면 사용했던 메모리를 반환, 스택에서 제거됨 ->

호출 스택에서 최상위 메서드가 현재 실행중인 메서드임

 

호출 스택

 

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()

-this

 인스턴스 자신을 가리키는 참조변수

 인스턴스의 주소가 저장되어 있음

 모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재함

this

4.5 생성자를 이용한 인스턴스의 복사

 

-복사(copy) 생성자

 현재 인스턴스와 같은 상태를 갖는 다른 인스턴스를 하나 더 만들고자 할 때

 인자가 자신의 클래스 인스턴스인 생성자를 이용