ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [자바의 정석] 6장 : 객체지향 프로그래밍 I
    책/자바의 정석 3판 2024. 2. 18. 21:29
    반응형

    1. 객체지향언어

    • 역사
      • 기본 개념 : 실제 세계는 사물(객체)로 이루어져 있고, 사물간의 상호작용으로 모든 사건이 발생한다
    • 객체지향
      • 코드의 재사용성이 높고 유지보수 편함
      • 처음에는 기능 구현에 초점을 맞추고, 객체지향적으로 바꾸는 게 좋음

    2. 클래스와 객체

    1. 클래스와 객체의 정의와 용도
      • 클래스 : 설계도 (TV 설계도)
      • 객체 : 실제 사물 (TV)
    2. 객체와 인스턴스
      • 클래스 → 객체 과정을 인스턴스화(instantiate) 라고 함
      • 클래스로부터 만들어진 객체를 인스턴스(instance)라고 함
    3. 객체의 구성 요소 - 속성과 기능
      • 객체는 속성과 기능으로 구성
      • 객체가 가지고 있는 속성과 기능을 객체의 멤버라고 함
      • 속성 : 멤버변수(member variable), 특성(attribute), 상태(state)
      • 기능 : 메서드(method), 함수(function), 행위(behavior)
    4. 인스턴스의 생성과 사용
      • 클래스 타입의 참조 변수를 선언하고, 그 참조 변수에 new를 통해 인스턴스를 넣는다.
      • 참조 변수의 타입과 인스턴스의 타입이 일치해야 한다.
    5. 객체 배열
      • 객체 배열은 참조변수를 하나로 묶은 참조 변수 배열임
      • 반드시 개별적으로 인스턴스 생성해줘야함
    6. 클래스의 또 다른 정의
      • 변수 : 하나의 데이터를 저장할 수 있는 공간
      • 배열 - 같은 종류 여러 데이터를 하나의 집합으로 저장할 수 있는 공간
      • 구조체 - 다른 종류 여러 데이터를 하나의 집합으로 저장
      • 클래스 - 데이터 + 함수 (구조체 + 함수)

    3. 변수와 메서드

    1. 선언위치에 따른 변수의 종류
      • 클래스 변수 (class variable) : static이 붙은 멤버 변수 → 클래스가 메모리에 올라갈 때 생성 (공유 변수)
      • 인스턴스 변수 (instance variable) : 클래스 영역에 선언된 멤버 변수 → 인스턴스 생성시
      • 지역 변수 (local variable) : 메서드, 생성자, 초기화 블럭 내부 → 변수 선언문 실행 시
    2. 클래스변수와 인스턴스변수
      • 자신만의 특징이 드러나는 곳에는 인스턴스 변수를, 해당 클래스에 공통적으로 나타나는 곳에는 클래스 변수를 사용
      • 클래스 변수는 객체 생성 없이 클래스이름.클래스변수 로 직접 사용 가능
    3. 메서드
      • 블랙박스 → 내부 동작을 알 필요 없이 사용 가능함
      • 높은 재사용성
      • 중복 코드 제거
      • 프로그램의 구조화 → 내용 없는 메서드를 선언하고 하나씩 설계 가능함
    4. 메서드의 선언과 구현
      • 메서드 선언부 (method declaration)
        • 매개변수 선언(parameter declaration) : 매개변수를 받는 것(입력)
        • 메서드 이름
        • 반환 타입 : 반환 값이 없는 경우 void
      • 메서드의 구현부
        • void 리턴이 아닌 경우, return문이 반드시 포함되어야 함
        • 반환 타입이 일치하거나 자동 형변환이 가능한 것이어야 함
    5. 메서드의 호출
      • 인자(argument) : 메서드 호출 시 () 안에 지정해준 값들
      • static 메서드는 같은 클래스 내의 인스턴스 메서드 호출 불가능
    6. return 문
      • 생략
    7. JVM의 메모리 구조
      • 메소드 영역 : 클래스 데이터(클래스 변수) → 해당 클래스의 .class 파일을 읽어 저장하는 곳
      • 힙 : 인스턴스가 저장되는 공간
      • 호출 스택(call stack) : 메서드 작업에 필요한 메모리 공간 제공, 지역 변수가 있는 공간
    8. 기본형 매개변수와 참조형 매개변수
      • 매개변수 타입이 기본형(primitive) 면 값이 복사되지만, 참조형(reference)이면 인스턴스의 주소 복사
      • 따라서 참조형 매개변수는 변수의 값을 읽고 변경까지 가능
    9. 참조형 반환타입
      • 객체의 주소 리턴
    10. 재귀 호출
      • 생략
    11. 클래스 메서드(static 메서드)와 인스턴스 메서드
      • 클래스 설계 시 멤버 변수 중 모든 인스턴스에 공통 사용되는 것에 static 붙임
      • 클래스 변수는 인스턴스 생성 없이도 사용 가능 → 클래스가 메모리에 올라갈 때 이미 자동 생성되기 때문
      • 클래스 메서드는 인스턴스 변수 사용 불가
      • 메서드 내에서 인스턴스 변수 사용 안하면, static 고려 → 메서드 호출 시간이 짧아짐
    12. 클래스 멤버와 인스턴스 멤버간의 참조와 호출
      • static 메서드 내에서는 인스턴스 멤버 변수, 메서드 모두 호출 불가능

    4. 오버로딩(overloading)

    1. 오버로딩이란?
      • 같은 이름을 가진 메서드지만 매개변수의 개수 또는 타입이 다른 경우
    2. 오버로딩의 조건
      • 메서드 이름 같아야함
      • 매개변수의 개수 또는 타입 달라야함
      • 리턴 타입은 영향 못줌
    3. 오버로딩의 예
      • println
    4. 오버로딩의 장점
      • 메서드 이름을 절약할 수 있고, 같은 기능을 하도록 확실하게 만들 수 있음
    5. 가변인자(varargs)와 오버로딩
      • Object… args 와 같이 사용
      • 무조건 매개변수 리스트 중 마지막에 넣어야 함
      • 내부적으로 배열을 만들어 사용하는 것 → 약간 비효율
      • void a(String a, String… args), void a(String… args) 와 같이 오버로딩 시 컴파일 에러 → 가변 인자 메서드는 오버로딩하지 않는게 좋음

    5. 생성자 (constructor)

    1. 생성자란?
      • 인스턴스 초기화 메서드
      • 이름이 클래스 이름과 같아야 하고, 리턴 값이 없음
      • 오버로딩 가능
      • 연산자 new가 인스턴스 생성하는 것 ← 생성자가 인스턴스를 생성하는 게 아님
    2. 기본 생성자 (default constructor)
      • 클래스에 생성자 하나도 없으면 자바 컴파일러가 자동 추가
      • 하나라도 있으면 자동 추가 안됨
    3. 매개변수가 있는 생성자
    4. 생성자에서 다른 생성자 호출하기 - this(), this
      • this()
        • 반드시 생성자 내 첫줄에서만 사용 가능
        • 생성자 내에서 다른 생성자 호출할 때 사용
      • this
        • 인스턴스 자신을 가치키는 참조변수
    5. 생성자를 이용한 인스턴스의 복사
      • 현재 사용하는 인스턴스와 같은 상태의 인스턴스 하나 더 만들 때 생성자 사용 가능
      • Car(Car c) {} 와 같이 사용
      • Object 클래스의 clone() 으로도 가능
      • 상태는 같지만, 독립적인 메모리 공간을 갖고 있음

    6. 변수의 초기화

    1. 변수의 초기화
      • 클래스 변수 및 인스턴스 변수는 자동적으로 초기화해줌
      • 지역 변수는 직접 해야함
      • 초기화 방법
        • 명시적 초기화
        • 생성자
        • 초기화 블럭
    2. 명시적 초기화 (explicit initialization)
      • 선언과 동시에 초기화하는 것
    3. 초기화 블럭
      • 클래스 초기화 블럭 - static {}
      • 인스턴스 초기화 블럭 - {}
      • 클래스 초기화 블럭은 클래스가 메모리에 처음 로딩될 때 한번만 수행
      • 인스턴스 초기화 블럭은 인스턴스 생성 시 수행 ← 생성자보다 인스턴스 초기화 블럭 먼저 수행
    4. 멤버변수의 초기화 시기와 순서
      • 클래스 변수 : 기본값 → 명시적 초기화 → 클래스 초기화 블럭
      • 인스턴스 변수 : 기본값 → 명시적 초기화 → 인스턴스 초기화 블럭 → 생성자

     

    https://product.kyobobook.co.kr/detail/S000001550352

    반응형
Designed by Tistory.