Java 프로그래밍기초 230221 #6 클래스/객체/변수의종류/메서드/호출스택

김춘복·2023년 2월 21일
0

Java 공부

목록 보기
9/20
post-custom-banner

객체지향 Part.1

클래스와 객체

  • 클래스 : 객체를 정의해 놓은 것. 객체를 생성하는데 사용하는 설계도.
    클래스 = 필드 + 생성자 + 메서드

  • 필드(Field) = 멤버변수 = 전역변수
    : 클래스 내부이면서 생성자와 메서드 밖에서 정의된다.

  • 지역변수 : 생성자와 메서드 내부블록({})에서 정의된다.

  • 객체 : 실제로 존재하는 것. 사물 또는 개념. 속성과 기능을 가지는 프로그램 단위
    모든 인스턴스를 대표하는 일반적인 용어.
    객체 = 속성(멤버변수) + 기능(메서드)

  • 인스턴스 : 특정 클래스로부터 생성된 객체
    인스턴스화 : 클래스 => 인스턴스(객체)

객체의 생성과 배열

  • 객체의 생성 : 클래스명 변수명 = new 클래스명;
    클래스의 객체를 참조하기위한 참조변수(변수명으로) 선언. 생성된 객체의 주소를 참조변수에 저장.

참조타입? 배열타입, 열거타입, 클래스(String도 클래스다), 인터페이스. 참조타입의 값은 모두 객체다. 모든 참조타입은 객체의 주소를 담기때문에 메모리는 8byte를 쓴다.
참조변수? 객체의 주소값을 갖고있는 변수(명).

  • 객체배열 : 객체배열 == 참조변수 배열 / 여러 개의 객체를 담을 수 있는 배열.
    Tv[] tvArr = new Tv[3]

클래스의 정의

  • 클래스 == 데이터 + 함수

  • 클래스의 탄생 과정
    변수 : 하나의 데이터를 저장할 수 있는 공간
    배열 : 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간
    구조체 : 서로 연관된 여러 데이터(종류 관계 X) 를 하나로 저장할 수 있는 공간
    클래스 : 데이터와 함수의 결합(구조체 + 함수)

  • 클래스는 원하는 타입을 직접 만들 수 있다.

변수의 종류

  • 선언 위치에 따른 변수의 종류

  • 클래스 변수 : =cv, static변수. 클래스가 메모리에 올라갈 때 생성. 객체생성 안해도 생성되고 언제든지 사용 가능. 객체의 속성들 중 공통적으로 유지되어야 하는 것은 cv로 한다.
    Static 변수(클래스영역에 선언시 인스턴스 변수 앞에 Static 붙이면 됨).
    공유 변수(모든 인스턴스가 공통된 저장공간을 공유하게 됨)
    프로그램이 종료될 때 소멸. 저장메모리는 메소드영역.
    접근방법 : 클래스.클래스변수명

  • 인스턴스 변수 : =iv, 클래스영역에 선언. 객체가 생성될 때 인스턴스 변수가 생성. 객체의 속성들 중 개별적으로 부여되어야 하는 것은 iv로 한다. 객체마다 따로 생성됨.
    인스턴스가 소멸할 때 소멸. 저장메모리는 힙 영역.
    접근방법 : 참조변수명.인스턴스변수명

  • 지역 변수 : 메서드가 호출되서 실행될 때 생성. 메서드 종료시 자동으로 제거.
    자동으로 초기화가 되지 않기 때문에 사용하려면 반드시 초기화 필요.
    for, while문 {}블럭 안의 지역변수는 그 안에서만 사용 가능.
    블록을 벗어나면 소멸. 저장메모리는 스택영역.
    ex. for문에서 i

  • 매개변수 : =파라미터. 함수를 정의할 때 함수에 사용되는 변수.
    int add(int x, int y)할때 int x와 int y가 매개변수
    매서드 호출시 '전달하는 값'을 가지고 있는 변수.
    지역변수처럼 선언된 곳부터 수행이 끝날 때 까지 유효

  • 클래스변수와 인스턴스변수는 클래스 영역에서 사용되므로 접근제어자 사용 가능.
    지역변수와 매개변수는 메서드영역에서 사용되므로 접근제어자 사용 x.


메서드

반환타입 메서드이름 (타입 변수명, 타입 변수명, ... ) { // (선언부)
       // 메서드가 호출되면 수행할 코드(구현부)
}
  • 장점 : 중복코드 제거, 관리 용이, 재사용 가능.

  • 반복적으로 수행되는 여러문장을 메서드로 작성. 하나의 메서드는 한가지 기능만 수행하는 것이 좋다.

  • 메서드 호출 : 메서드이름(값1, 값2,...);

함수

: 값을 입력받아서 처리하고 결과를 반환한다.

int add(int x, int y) {
	// int(반환타입) add(메서드 이름) (int x, int y(매개변수(입력)))
        int result = x + y; => 처리
        return result;  => 결과를 반환
}

void

: 반환타입중 하나. 메서드 수행시 아무것도 반환하지 않을 때 사용.
return; 안써도 컴파일러가 자동으로 추가.

return

: 반환타입이 void가 아닌경우, 반드시 return문이 필요!

호출스택(call stack)

: 메서드 수행에 필요한 메모리가 제공되는 공간.
메서드가 호출되면 호출 스택에 메모리가 할당, 종료되면 해제.
메서드가 메서드를 호출하면 스택처럼 최근에 호출된 메서드 먼저 실행. 나머지는 대기.

profile
Backend Dev / Data Engineer
post-custom-banner

0개의 댓글