본문 바로가기

reviews/이것이 자바다

6. 클래스 (1)

6.1 객체 지향 프로그래밍

객체

자신의 속성을 가지고 있고 다른 것과 식별 가능한 것

객체의 구성요소

  • 속성
  • 동작

객체 지향 프로그래밍의 특징

캡슐화 Encapsulation

객체의 필드, 메소드를 하나로 묶고, 실제 구현 내용을 감추는 것

외부 객체는 객체 내부의 구조를 알지 못하며 객체가 노출해서 제공하는 필드와 메소드만 이용할 수 있음

  • 외부의 잘못된 사용으로 인해 객체가 손상되는 것을 막기 위함

상속 Inheritance

부모 역할의 상위 객체와 자식 역할의 하위 객체가 있음

상위 객체는 자기가 가지고 있는 필드와 메소드를 하위 객체에게 물려주어 하위 객체가 사용할 수 있도록 해줌

  • 상속은 상위 객체를 재사용해서 하위 객체를 쉽고 빨리 설계할 수 있도록 도와줌
  • 이미 잘 개발된 객체를 재사용해서 새로운 객체를 만들기 때문에 반복된 코드의 중복을 줄여줌

다형성 Polymorphism

같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질

자바는 다형성을 위해 부모 클래스 또는 인터페이스의 타입 변환을 허용함

부모 타입에는 모든 자식 객체가 대입될 수 있고, 인터페이스 타입에는 모든 구현 객체가 대입될 수 있음

6.2 객체와 클래스

클래스

설계도. 객체를 생성하기 위한 필드와 메소드가 정의되어 있음

인스턴스

클래스로부터 만들어진 객체

인스턴스화

클래스로부터 객체를 만드는 과정

6.4 객체 생성과 클래스 변수

객체의 생성

클래스 변수 = new 생성자();

new 연산자는 힙(heap) 영역에 객체를 생성시킨 후, 객체의 주소를 리턴함

6.5 클래스의 구성 멤버

필드

선언 형태는 변수와 비슷하지만 필드를 변수라고 부르지는 않음

차이점

  • 필드 : 생성자와 메소드 전체에서 사용되며 객체가 소멸되지 않는 한 객체와 함께 존재함
  • 변수 : 생성자와 메소드 내에서만 사용되고 생성자와 메소드가 실행 종료되면 자동 소멸함

생성자

객체 생성 시 초기화를 담당함

메소드

객체의 동작에 해당하는 중괄호 블록

6.6 필드

필드 타입 별 기본 초기값

기본 타입 정수 타입 byte 0

    char \u0000 (빈 공백)
    short 0
    int 0
    long 0L
  실수 타입 float 0.0F
    double 0.0
  논리 타입 boolean false
참조 타입   배열 null
    클래스(String 포함) null
    인터페이스 null

6.7 생성자

객체 초기화

필드를 초기화하거나, 메소드를 호출해서 객체를 사용할 준비를 하는 것

생성자

new 연산자와 같이 사용되어 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당함

생성자를 실행시키지 않고는 클래스로부터 객체를 만들 수 없음

클래스 내부에 생성자 선언을 생략할 수 있으며 생략 시 컴파일러는 기본 생성자를 바이트 코드에 자동으로 추가함

모든 클래스는 생성자가 반드시 존재하며, 하나 이상을 가질 수 있음 (생성자 오버로딩)

  • 생성자는 클래스 명과 동일해야 함

기본 생성자

[public] 클래스() {}

생성자 오버로딩 Overloading

매개 변수를 달리하는 생성자를 여러개 선언하는 것

public class Car {
    Car() {}
    Car(String model) {}
    Car(String model, String color) {}
}

다른 생성자 호출

this()는 자신의 다른 생성자를 호출하는 코드로 반드시 생성자의 첫줄에서만 허용됨

public class Car {
    Car() {}
    Car(String model) {
        this(model, "red");
    }
    Car(String model, String color) {}
}

6.8 메소드

리턴

리턴 타입

메소드가 실행 후 리턴하는 값의 타입

return 문이 실행되면 메소드는 즉시 종료됨

return 값이 없는 경우 컴파일 오류가 발생함

return 문 이후에 실행문이 오면 컴파일 오류 발생 Unreachable code

  • 메소드 선언에 리턴 타입이 있는 메소드는 반드시 return문을 사용해서 리턴값을 지정해야 함
  • return 문의 리턴 값은 리턴 타입이거나 리턴 값으로 변환될 수 있어야 함
    ex) return 타입이 int인 경우 byte, short, int 타입이 리턴되어도 상관 없음 (자동 변환 타입)
    참고 : http://www.tcpschool.com/java/java_datatype_typeConversion

리턴값이 없는 메소드

void로 선언된 리턴 값이 없는 메소드에서도 return을 사용할 수 있으며 사용 시 메소드 실행을 즉시 종료함

매개 변수

매개 변수의 수를 모를 경우

매개 변수를 배열 타입으로 선언함

int sum1(int[] values) {}

# 호출 예제
int[] numbers = [1, 2, 3];
sum(numbers);

메소드를 호출하기 전에 배열을 생성하는 불편함이 있어 배열을 생성하지 않고 값의 리스트만 넘겨줄 수도 있음 (가변 인자)

int sum2(int ... values) {}

# 호출 예제
sum2(1, 2, 3);

가변 인자 varargs (variable arguments) ...

arguments를 몇 개 받을 지 지정하지 않고, 호출 하는 쪽에서 정할 수 있게 함

매개 변수를 받는 쪽에서 자바 컴파일러가 ... 를 보고 array로 바꿔서 받음

# 원본
public void method(String ... args) {}
method("hello", "world");

# 컴파일 이후
public void method(String[] args) {}
method(new String[]{"hello", "world"});
반응형

'reviews > 이것이 자바다' 카테고리의 다른 글

6. 클래스 (2)  (0) 2022.02.13