Java

[ java ] 변수, 클래스, 객체, 메모리 외 기초 설명

JooKit 주킷 2020. 12. 14. 16:45
목차 접기
728x90
반응형

패키지란?

  • 패키지는 간단히 말하면 클래스 파일의 묶음이다.
  • 조금 더 깊이 들어가면 패키지가 단순히 클래스 묶음이 아닌 프로젝트 전체 코드를 구성하는 계층 구조가 되고
  • 이 계층 구조를 잘 구성해야 소스 코드 관리와 유지 보수가 편리하다.

클래스 이름이 같더라도 패키지 이름이 다르다면 다른 클래스로 구분된다.

메서드(method)

  • 함수(function)의 한 종류이다.
  • 함수는 어떤 기능을 수행하도록 미리 구현해 놓고 필요할 때마다 호출하여 사용할 수 있다.
  • 함수란 하나의 기능을 수행하는 일련의 코드를 말한다.
  • 함수는 이름이 있고 입력 값과 결과 값을 갖는다.

return : 반환값 (예약어)

스택(stack)

  • 함수를 호출하면 그 함수만을 위한 메모리 공간이 할당되는데 그 공간을 스택(stack)이라고 한다.
  • 스택은 자료가 상자처럼 쌓이는 자료 구조를 말한다.
  • 스택은 마지막에 추가된 자료부터 순서대로 꺼내서 사용할 수 있으며 LIFO(Last In First Out) 구조라고 부른다.

스택(stack) 메모리 소멸 순서

  • 호출한 함수 순서대로 스택에 해당 함수를 위한 메모리가 할당 된다.
  • 할당한 메모리의 소멸은 제일 마지막에 호출 당한 함수의 순서대로 소멸이 된다.
  • 제일 처음 호출한 함수의 메모리가 제일 마지막에 소멸 당한다는 것이다.

지역변수

  • 함수 내부에서만 사용하는 변수를 지역 변수라고 한다.
  • 지역 변수는 스택 메모리에 생성 된다.

함수의 장점

  • 첫째 : 함수를 사용하면 기능을 나누어 코드를 효율적으로 구현할 수 있다.
  • 둘째 : 기능별로 함수를 구현해 놓으면 같은 기능을 매번 코드로 만들지 않고 그 기능의 함수를 호출하면 되니까 편리하다.
  • 중복되는 코드를 막을 수 있다.
  • 프로그램을 실행할 때 생긴 오류를 수정하는 디버깅 작업을 할 때도 편리하다.
  • 하나의 기능이 하나의 함수로 구현되어 있기 때문에 오류가 난 기능만 찾아서 수정하면 되기 때문이다.

함수 결론

  • 무조건 소스 코드를 나누어 호출한다고 해서 함수를 구현하는 것이 아니며
  • 함수 코드의 행 수가 길고 짧고를 의미하는 것도 아니다.
  • 필요한 기능 함수를 만들고
  • 그 이름에 맞는 하나의 기능을 구현하는 것이 중요하다.

프로그램을 시작하는 main() 함수

  • main() 함수는 자바 가상 머신(Java Virtual Machine; JVM)이 프로그램을 시작하기 위해 호출하는 함수이다.
  • 클래스 내부에 만들지만, 클래스의 메서드는 아니다.

클래스 전체 이름(class full name)

  • 패키지가 다르면 클래스 이름이 같아도 다른 클래스이다.
  • 클래스 자료형 변수를 선언하고 new 예약어로 생성자를 호출하여 대입하면 새로운 클래스가 생성된다.
  • 클래스가 생성된다는 것은 클래스를 실제 사용할 수 있도록 메모리 공간(힙 메모리)을 할당 받는다는 뜻이다.

인스턴스

  • 실제로 사용할 수 있도록 생성된 클래스를 인스턴스라고 한다.

참조 변수

  • 인스턴스를 가리키는 클래스형 변수를 참조 변수라고 한다.
  • 예시) Student st = new Student();
    • st 가 참조 변수이다.
  • 참조 변수를 사용하면 인스턴스의 멤버 변수와 메서드를 참조하여 사용할 수 있다.
    • 이때 도트(.) 연산자를 사용한다.
  • 참조 변수는 힙 메모리에 생성된 인스턴스를 가리킨다.

객체, 클래스, 인스턴스

  • 객체란 '의사나 행위가 미치는 대상'이며 이를 코드로 구현한 것이 클래스이다.
  • 클래스가 메모리 공간에 생성(할당)된 상태를 인스턴스라고 한다.
  • 또한 생성된 클래스의 인스턴스를 객체라고 한다.
  • 클래스의 생성자를 호출하면 인스턴스가 만들어진다.

인스턴스와 힙 메모리

  • Student studentAhn = new Student();를 선언하면 Student 하나가 생성되는데 각 Student가 가지고 있는 멤버 변수를 저장할 공간이 있어야 한다.
  • 클래스가 생성되면 멤버 변수를 인스턴스 변수라고도 칭한다.
  • 이때 사용하는 메모리가 힙 메모리(heap memory)이다.
  • 클래스 생성자를 하나 호출하면 인스턴스가 힙 메모리에 생성되는 것이다.

참조변수 대입 의미

  • 지역 변수 studentAhn에 생성된 인스턴스를 대입하는 것은 studnetAhn에 인스턴스가 생성된 힙 메모리의 주소를 대입한다는 것과 같은 의미이다.

힙 메모리란?

  • 힙(heap)은 프로그램에서 사용하는 동적 메모리(dynamic memory) 공간을 말한다.
  • 일반적으로 프로그램은 스택, 힙, 데이터 이렇게 세 영역을 사용하는데, 객체가 생성될 때 사용하는 공간이 힙이다.
  • 힙은 동적으로 할당되며 사용이 끝나면 메모리를 해제해 주어야 한다.
  • C나 C++ 언어에서는 프로그래머가 직접 메모리를 해제해야 하지만,
  • 자바에서는 가비지 컬렉터(garbage collector)가 자동으로 메모리를 해제해 준다.
728x90
반응형
LIST