[Java] 객체지향개념 - 자바의 정석 기초편 6강 정리

이준영·2023년 10월 19일

Java

목록 보기
1/3
post-thumbnail

1. 배경

  • 80년대 초 소프트웨어 기술이 빠른 시대의 변화를 못 따라감
  • 당시 c언어, 포트란, 코볼 등 언어가 주로 사용되었다.
  • 해결책으로 객체지향 개념이 등장(절차적 언어에서 객체지향 언어로)
  • 객체지향 언어란 기존 프로그래밍 언어에 객체지향 개념(규칙)을 추가한 것이다.

2. OOP 핵심 개념

  • 캡슐화
  • 상속
  • 추상화
  • 다형성

3. 클래스, 객체, 인스턴스

  • 클래스
    • 정의 : 객체를 정의 해놓은 것
    • 용도 : 객체를 생성하는데 사용
  • 객체
    • 정의 : 실제로 존재하는 것
    • 용도 : 객체가 가지고 있는 기능과 속성에 따라 다르다
    • 구성요소 : 속성, 기능
  • 클래스와 객체 = 설계도와 제품
    • 클래스가 왜 필요한가? 객체를 생성하기 위해
    • 객체가 왜 필요한가? 객체를 사용하기 위해
    • 객체를 사용한다는 것은? 객체가 가진 속성과 기능을 사용한다는 것
  • 객체와 인스턴스
    • 객체 : 모든 인스턴스를 대표하는 일반적인 용어
    • 인스턴스 : 특정 클래스로부터 생성된 객체
    • 클래스를 인스턴스화 하여 인스턴스(객체)가 생성

4. 변수

선언 위치에 따른 변수의 종류

  • 클래스 영역 = 클래스 변수, 인스턴스 변수
  • 메서드 영역 = 로컬 변수

클래스 변수와 인스턴스 변수

  • 클래스 변수(static) : 공통 속성, 변경 시 모든 인스턴스에서 변경 값 적용
  • 인스턴스 변수 : 개별 속성
Class Card {
	static int width = 100; // 폭
	static int height = 250; // 높이
	String kind; // 무늬
	int number; // 숫자
}

변수의 초기화

  • 로컬변수는 수동 초기화 해야함.
  • 멤버변수(클래스, 인스턴스) 변수는 자동 초기화 된다.
  • 멤버변수의 초기화
    • 종류
      • 명시적 초기화(=) : 간단 초기화
      • 초기화 블럭 : 복잡 초기화
        • 클래스 초기화 블럭 : static {}
        • 인스턴스 초기화 블럭 : {}
      • 생성자 : 복잡 초기화
        • 복잡 초기화는 생성자를 사용
    • 클래스 변수 초기화 시점 : 클래스가 처음 로딩 될 때 단 한번(객체를 여러번 생성해도 한번만)
    • 인스턴스 변수 초기화 시점 : 인스턴스가 생성 될 때마다(객체를 만들 때 마다)
    • 초기화 순서 : 클래스 변수 -> 인스턴스 변수 -> 자동 초기화 -> 간단 초기화 -> 복잡 초기화

5. 메서드

  • 작업단위로 문장들을 묶어서 이름을 붙인 것
  • 장점
    • 코드의 중복을 줄일 수 있다.
    • 코드의 관리가 쉽다.
    • 코드를 재사용할 수 있다.
    • 코드가 간결해서 이해하기 쉬워진다.
  • 작성 방법
    • 반복적으로 수행되는 여러 문장을 메서드로 작성
    • 하나의 메서드는 한 가지 기능만 수행하도록 작성
  • 구성
    • 선언부 + 구현부
    • 선업부 또는 구현부에 선언된 변수를 로컬 변수라 한다.
  • 실행 흐름
    • main메서드에서 다른 메서드를 호출한다.
    • 인사가 메서드의 매개변수에 각각 복사(대입) 된다.
    • 메서드 안에 있는 문장들이 순서대로 수행 된다.
    • 메서드의 모든 문장이 실행되거나 return문을 만나면 호출한 main메서드로 돌아와서 이후의 문장을 실행한다.
  • return문
    • 실행 중인 메서드를 종료하고 호출한 곳으로 되돌아간다.
    • 반환타입이 void가 아닌 경우, 반드시 return문 필요
  • call stack(호출 스택)
    • 메서드 수행에 필요한 메모리가 제공되는 공간
    • 메서드가 호출되면 호출스택에 메모리 할당, 종료되면 해제

매개변수

  • 기본형 매개변수 : 변수의 값을 읽기만 할 수 있다.
  • 참조형 매개변수 : 변수의 값을 읽고 변경할 수 있다.
  • 왜? 기본형은 값만 넘겨주고 참조형은 해당 값의 주소값을 넘겨주기 때문에 주소값에 있는 데이터가 변경이 된다.

static 메서드와 인스턴스 메서드

  • static 메서드 (=클래스 메서드)
    • 인스턴스 생성 없이 호출 가능
    • 인스턴스 멤버(인스턴스 변수, 인스턴스 메서드)와 관련 없는 작업을 하는 메서드
    • 메서드 내에서 인스턴스 멤버 사용 불가
  • 인스턴스 메서드
    • 인스턴스 생성 후 호출 가능
    • 인스턴스 멤버(인스턴스 변수, 인스턴스 메서드)와 관련 된 작업을 하는 메서드
    • 메서드 내에서 인스턴스 멤버 사용 가능
  • static
    • 속성 중에서 공통 속성에 static을 붙인다.
    • 인스턴스 멤버를 사용하지 않는 메서드에 static을 붙인다.

오버로딩

  • 한 클래스 안에 같은 이름의 메서드를 여러 개 정의 하는 것
  • 오버로딩 성립 조건
    • 메서드 이름이 같아야 한다.
    • 매개변수의 개수 또는 타입이 달라야 한다.
    • 반환 타입은 영향 없다.

6. 생성자(constructor)

  • 인스턴스가 생성 될 때마다 호출되는 인스턴스 초기화 메서드
  • 인스턴스 생성 시 수행할 작업
  • 이름이 클래스 이름과 같아야 한다.
  • 리턴 값이 없다.(but, void는 안 붙여도 됨)
  • 모든 클래스는 반드시 생성자를 가져야 한다.
    • 생성자가 하나도 없을 때, 컴파일러가 자동으로 기본 생성자 추가
    • 기본 생성자 : 매개변수가 없는 생성자

생성자 this()

  • 같은 클래스의 다른 생성자를 호출 할 때 사용
  • this()로 다른 생성자 호출 시 첫 줄에서만 사용 가능

참조변수 this

  • 인스턴스 자신을 가리키는 참조변수
  • 인스턴스의 주소가 저장되어 있다.
  • 모든 인스턴스 메서드에 지역변수로 순겨진 채로 존재한다.
  • 인스턴스 메서드(생성자 포함)에서 사용가능
  • 지역변수와 인스턴스 변수를 구별할 때 사용
profile
환영합니다!

0개의 댓글