Language/Java

자바 클래스의 이해와 객체지향 프로그래밍 강의노트1

SambaLim 2019. 10. 20. 21:10
0_클래스의_이해_기초

인프런에서 자바: 클래스의 이해와 객체지향 프로그래밍을 수강하며 적은 강의노트입니다.

강의내의 예시와 자세한내용은 강의를 통해 확인하실 수 있습니다.

 

01. 클래스의 개념

객체의 정의

  • 개념적인 객체: 눈에 보이고 만져짐

    • ex. 동물, 자동차
  • 물리적인 객체: 눈에 보이지않고 만져지지 않음 개념적

    • ex. 개, 고양이, K5

클래스

객체와 관련된 데이터와 처리동작을 한곳에 모은 것

클래스를 기술하는 것을 클래스를 정의한다라고 함

객체와 클래스

클래스는 객체의 설계도와 같은 것으로 그 자체로는 이용할 수가 없습니다.

이용하기 위해서는 설계도를 기초로 실체를 만들어야 합니다.

클래스가 실체화된 것을 오브젝트(객체)라고 하며, 실체화 하는 작업을 '오브젝트를 생성한다' 혹은 '인스턴스화 한다'등으로 말합니다.

클래스 정의

메서드만 있는 클래스

필드만 있는 클래스

 

02. 패키지의 개념

패키지 선언이 필요한 상황

  • 공간에서의 충돌: 동일 이름의 클래스 파일은 같은 위치에 둘 수 없다.
  • 접근 방법에서의 충돌: 인스턴스 생성 방법에서 두 클래스에 차이가 없다.

패키지 선언

공간적, 접근적 충돌 해결을 위한 패키지 선언

  • 클래스 접근 방법의 구분: 서로 다른 패키지의 두 클래스는 인스턴스 생성시 사용하는 이름(클래스 변수명)이 다르다.
  • 클래스와 공간적인 구분: 서로 다른 패키지의 두 클래스 파일은 저장되는 위치가 다르다.

패키지 선언에 따른 문제 해결

  • 클래스의 공간적인 구분이 이루어진다. (디렉토리가 다름)
  • 인스턴스 생성 시 사용하는 이름(클래스명)이 다르다.

 

03. 오버로딩

하나의 클래스 내에 인수의 개수나 형이 다른 동일한 이름의 메서드를 여러 개 정의하는 것

 

04. 생성자

오브젝트 생성과 함께 자동적으로 호출되는 특수한 메서드

개발자가 생성자를 기술하지 않는 경우, 인수가 없는 생성자가 자동으로 생성됨.(Default 생성자)

생성자 오버로딩

개발자가 매개 변수가 있는 생성자를 만든 경우, 디폴트 생성자를 호출하면 에러가 발생

매개 변수가 있는 생성자를 생성하는 경우에는 디폴트 생성자도 같이 구현해주어야 함.

복제 생성자

동일한 클래스의 오브젝트를 인수로 받아서, 대응하는 필드에 값을 대입하는 생성자

 

05. 메모리 모델

JVM은 운영체제 위에서 동작한다.

  • JVM은 운영체제로부터 할당받은 메모리 공간을 기반으로 자바 프로그램을 실행해야 한다.
  • JVM은 운영체제로부터 할당받은 메모리 공간을 이용해서 자기 자신도 실행하고, 자바 프로그램도 실행을 한다.

JVM의 메모리 모델

  • 메서드 영역: 메서드의 바이트 코드, static변수
  • 스택 영역: 지역변수, 매개변수
  • 힙 영역: 인스턴스(객체)

바이트코드

소스 코드를 가상머신이 이해할 수 있는 중간 코드로 컴파일 한 것을 이야기함.

가상머신은 이 바이트코드를 각각의 하드웨어 아키텍쳐에 맞는 기계어로 다시 컴파일함.

어셈블리어에 가까운 형태를 띄고 있음

메서드 영역

메서드의 자바 바이트코드는 JVM의 메모리 공간중 메서드 영역에 저장됨 (static으로 선언된 클래스 변수도 메서드 영역에 저장됨)

이 영역에 저장된 내용은 프로그램 시작 전에 로드되고 프로그램 종료 시 소멸됨

스택 영역

매개변수, 지역변수가 할당되는 메모리 공간

프로그램이 실행되는 도중에 임시로 할당되었다가 바로 이어서 소멸되는 특징이 있는 변수가 할당됨

이 영역에 저장된 변수는 해당 변수가 선언된 메서드 종료 시 소멸됨

스택의 흐름

  1. 지역변수는 스택에 할당된다.
  2. 스택에 할당된 지역변수는 해당 메서드를 빠져 나가면 소멸된다.

힙 영역

  • 인스턴스(객체)가 생성되는 메모리 공간
  • JVM에 의한 GC가 이루어지는 공간
  • 할당은 프로그래머가 소멸은 JVM이 처리한다.
  • 참조변수에 의한 참조가 전혀 이뤄지지 않는 인스턴스가 소멸의 대상이 된다.
  • JVM은 인스턴스의 참조관계를 확인하고 소멸할 대상을 선정한다.

인스턴스의 소멸 시기

참조관계가 끊어진 인스턴스는 접근이 불가하므로 가비지 컬렉션의 대상이 된다.

GC 추가설명

GC가 발생하면, 소멸의 대상이 되는 인스턴스는 결정되지만 이것이 실제 소멸로 바로 이어지지는 않음

인스턴스의 실제 소멸로 이어지지 않은 상태에서 프로그램이 종료될 수 있음

(어차피 종료되면 OS 차원에서 소멸시킴)

 

06. 접근제한자

클래스 정의 대상의 public과 default

  • public: 어디서든 인스턴스 생성이 가능하다.
  • default: 동일 패키지로 묶인 클래스 내에서만 인스턴스 생성을 허용한다.

인스턴스 멤버 대상의 접근 수준 지시자

  • public: 어디서든 접근 가능
  • default: 동일 패키지로 묶인 클래스 내에서만 접근 가능
지시자클래스 내부동일 패키지상속받은 클래스이외의 영역
privateoxxx
defaultooxx
protectedooox
publicoooo