자바의 정석 chapter 6

inho ha·2022년 2월 28일
0

자바의 정석

목록 보기
6/18

객체지향언어 특징

  1. 코드의 재사용성이 높다.
  2. 코드의 관리가 용이하다.
  3. 신뢰성이 높은 프로그래밍을 가능하게 한다.
    제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하고, 코드의 중복을 제거하여 코드 불일치로 인한 오동작을 방지할 수 있음

클래스

객체를 정의해 놓은 것
객체를 생성하는데에 사용됨

객체

실제로 존재하는 것, 사물 또는 개념

인스턴스

인스턴스화 : 클래스로부터 객체를 만드는 과정
인스턴스 : 클래스로부터 만들어진 객체

객체의 속성과 기능

속성(property) : 멤버변수, 특성, 필드, 상태
기능(function) : 메서드, 함수, 행위

클래스 변수

static을 붙여 사용
인스턴스를 생성하지 않고도 '클래스이름.클래스변수' 로 사용가능

메서드

같은 클래스 내의 메서드 끼리는 참조변수를 사용하지 않고도 서로 호출이 가능하지만 static 메서드는 같은 클래스 내의 인스턴스 메서드를 호출할 수 없다.
static은 인스턴스를 생성하지 않아도 사용가능하지만 클래스 내의 일반 메서드는 인스턴스를 생성해야 사용 가능하기 때문이다.

유효성 검사

메서드 구현부{}를 작성할 때, 제일 먼저 매개변수의 값이 적절한 것인지 확인하는 것이 중요하다.

JVM의 메모리 구조

  1. Method Area
    프로그램 실행 중 어떤 클래스가 사용되면 JVM은 해당 클래스를 읽어 분석하여 클래스에 대한 정보를 여기 저장한다.
  2. heap
    인스턴스가 생성되는 공간
  3. call stack (execution stack)
    메서드의 작업에 필요한 메모리 공간을 제공
    메서드가 호출되면 여기에 호출된 메서드를 위한 메모리가 할당된다.
    메서드가 작업을 마치면 할당되었던 메모리 공간은 반환된다.
    제일 아래부터 공간이 할당되기 때문에 call stack의 최상위에 위치하는 메서드가 현재 실행중인 메서드이고 나머지는 대기상태에 있게된다.

클래스 메서드 (static 메서드)

인스턴스 변수나 인스턴스 메서드를 사용하지 않는 메서드는 클래스 메서드로 정의한다.
인스턴스 메서드는 실행시 메서드를 찾는 과정이 추가적으로 필요하기 때문에 시간이 더 걸린다.

오버로딩

한 클래스 내에 같은 이름의 메서드를 여러개 정의하는 것
매개변수의 개수 또는 타입이 달라야한다.
이를 각기 구현하려면 각 메서드들의 이름이 달라야하는데 이 경우 사용하기도 어렵고 이름 짓기도 어렵다.
오버로딩을 이용하면 이를 해결할 수 있다.

가변인자

JDK 1.5부터 메서드의 매개변수 개수를 동적으로 지정해 줄 수 있다.
"타입... 변수명" 과 같은 형식으로 선언
가변인자를 매개변수중 가장 마지막에 선언해야한다.

생성자

기본 생성자 : 컴파일 할 때 소스파일의 클래스에 생성자가 하나도 정의되지 않은 경우 컴파일러는 자동적으로 기본 생성자를 추가하여 컴파일한다.
특별히 인스턴스 초기화 작업이 요구되지 않는다면 기본 생성자를 사용하는 것도 좋다.

생성자에서 다른 생성자 호출하기

생성자 이름 대신 this 를 사용해야한다.
첫줄에서 호출 가능하다.

변수의 초기화

멤버 변수는 초기화를 하지 않아도 자동적으로 변수의 자료형에 맞는 기본값으로 초기화가 이루어진다.
지역변수는 그렇지 않기 때문에 사용전에 반드시 초기화해야 한다.

변수의 초기화 방법

  1. 명시적 초기화
    클래스 내에서 변수를 선언과 동시에 초기화 하는 것
  2. 생성자
    생성자에서 초기화 하는 것
  3. 초기화 블럭
    초기화 블럭 내에서 초기화 하는 것
class Car {
	// 클래스 초기화 블럭
    // 클래스가 메모리에 처음 로딩된 떄 한번만 수행됨
    // 클래스 변수 초기화시 사용
	static { }
    // 인스턴스 초기화 블럭
    // 모든 생성자에서 공통적으로 수행되어야 하는 문장들이 있을때 사용하면 간결해짐
    { }
}

인스턴스 초기화 블럭이 수행된 뒤 생성자가 수행된다.

profile
inho ha / ian(swatchon) / iha(42seoul)

0개의 댓글