[자바의 정석] Ch 6 객체지향 프로그래밍 1

Seri·2024년 6월 24일
1

* 이 글은 책 <자바의 정석 3판 - 남궁성>을 공부한 내용을 바탕으로 작성한 글입니다.

클래스와 객체

클래스(Class)
클래스는 객체를 정의하는 설계도 또는 청사진이다. 클래스에는 속성(Attribute)과 메서드(Method)가 정의된다. 속성은 객체의 데이터를 나타내며, 메서드는 객체의 행동을 정의한다. 클래스를 통해 동일한 특성을 가진 객체들을 생성할 수 있다.

객체(Object)
객체는 클래스의 인스턴스(Instance)이다. 객체는 클래스에 정의된 속성과 메서드를 가지고 있다. 객체는 실제 세계의 사물이나 개념을 프로그래밍 환경에서 표현한 것이다. 객체는 고유한 데이터 값(속성)과 행동(메서드)을 가지고 있다.

예를 들어, "자동차" 클래스에는 "모델", "색상", "속도" 등의 속성과 "시동 걸기", "가속하기", "브레이크 밟기" 등의 메서드가 정의될 수 있다. 그리고 이 클래스를 통해 생성된 "현대 소나타", "기아 K5", "BMW 320i" 등의 객체는 각각 고유한 속성 값과 메서드를 가지게 된다.

메서드

특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것
1. 높은 재사용성
한 번 만들어 놓은 메서드는 몇 번이고 호출할 수 있으며, 다른 프로그램에서도 사용이 가능하다.
2. 중복된 코드의 제거
3. 프로그램의 구조화

🌟JVM의 메모리 구조

응용프로그램이 실행되면, JVM은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당받고 JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.
메서드 영역(method area)
프로그램 실행 중 어떤 클래스가 사용되면 JVM은 해당 클래스의 클래스파일(*.class)을 읽어서 분석하여 클래스에 대한 정보(클래스 데이터)를 이곳에 저장한다. 이 때, 그 클래스의 클래스변수도 이 영역에 함께 생성된다.
힙(heap)
인스턴스가 생성되는 공간. 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다. 즉, 인스턴스변수(instance variable)들이 생성되는 공간이다.
호출스택(call stack 또는 execution stack)
호출스택은 메서드의 작업에 필요한 메모리 공간을 제공한다. 메서드가 호출되면 호출스택에 호출된 메서드를 위한 메모리가 할당되며, 이 메모리는 메서드가 작업을 수행하는 동안 지역변수(매개변수 포함)들과 연산의 중간결과 등을 저장하는데 사용된다. 그리고 메서드가 작업을 마치면 할당되었던 메모리공간은 반환되어 비워진다.

  • 메서드가 호출되면 수행에 필요한 만큼의 메모리를 스택에 할당받는다.
  • 메서드가 수행을 마치고나면 사용했던 메모리를 반환하고 스택에서 제거된다.
  • 호출스택의 제일 위에 있는 메서드가 현재 실행 중인 메서드이다.
  • 아래에 있는 메서드가 바로 위의 메서드를 호출한 메서드이다.
    반환타입(return type)이 있는 메서드는 종료되면서 결과값을 자신을 호출한 메서드(caller)에게 반환한다. 대기상태에 있던 호출한 메서드(caller)는 넘겨받은 반환값으로 수행을 계속 진행하게 된다.

클래스 메서드 (static 메서드)와 인스턴스 메서드

  • 클래스를 설계할 때, 멤버 변ㅅ 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙인다.
  • 클래스 변수(static 변수)는 인스턴스를 생성하지 않아도 사용할 수 있다.
  • 클래스 메서드(static메서드)는 인스턴스 변수를 사용할 수 없다.
  • 메서드 내에서 인스턴스 변수를 사용하지 않는다면 static을 붙이는 것을 고려한다.

🌟오버로딩

한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 '메서드 오버로딩(method overloading)' 또는 간단히 '오버로딩(overloading)'이라 한다.

  • 메서드 이름이 같아야 한다.
  • 매개변수의 개수 또는 타입이 달라야 한다.

생성자

인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'이다.

  • 생성자의 이름은 클래스의 이름과 같아야 한다.
  • 생성자는 리턴 값이 없다.
profile
🎤 📷 ❄️ 🌊

0개의 댓글