본문 바로가기
Backend boot camp/Session1

[JAVA] 객체 지향 프로그래밍 기초

by orioncsy 2022. 9. 6.

0. Class & Object

개요

  • 객체 이해
  • 클래스 개념 및 구성 요소, 문법 이해
  • 객체의 두 가지 구성 요소, 속성과 기능 이해
  • new 키워드를 통해 객체 생성
  • 클래스와 객체의 차이 설명, 둘의 관계

클래스

  • 클래스와 객체
    • class : 객체를 정의한 설계, 틀
      • class는 객체가 아니라 객체 생성을 위한 틀
      • 설계도와 제품의 관계
    • instance : 클래스를 통해 생성된 객체
      • instance화 : 객체를 생성하는 과정
    • instance와 object 차이
      • 모든 instance를 포괄하는 것이 object
      • 해당 class에서 만들어진 객체를 instance
      • 기본적으로 같은 의미
  • 클래스의 구성요소와 기본 문법
    • 클래스 명은 주로 대문자로 시작
    public class ExampleClass {
    	int x = 50; // (1)field
    	void sumOut() {...} // (2)method
    	ExampleClass {...} // (3)constructor
    	class ExampleClass2 {...} // (4)Inner class
    }
    • 필드/메서드/생성자/이너 클래스
    • 생성자를 제외한 3가지는 클래스의 맴버
    • 필드와 메서드는 속성과 기능을 대표

객체

  • 속성과 기능으로 정의하여 실제 사물을 보는 방식으로 설계
  • new 키워드를 사용해서 생성 가능

객체의 생성과 활용

  • 객체의 생성
    • 클래스명 참조 변수명 = new 생성자(); 
    • 참조 변수는 힙 메모리의 주소 값을 의미
    • new 키워드를 통해 힙 메모리에 생성된 객체 할당
  • Person p = new Person();
    • 클래스는 클래스 영역에, 참조 변수는 스택 영역에, 생성자로 만든 객체는 힙에 저장
    • 참조 변수는 실제 값이 아니라 주소값을 저장
    • 메서드는 클래스에 저장되고, 객체에서는 위치를 가리킨다
      • 같은 클래스의 객체는 동일한 메서드 값을 공유하기 때문에 한번 저장하고 각 객체의 힙에서 위치만 가리킨다
  • 객체의 활용
    • .(포인트 연산자)를 활용
    • 참조 변수명.필드 / 참조 변수명.메서드()

1. Field & Method

개요

  • 학습 목표
    • 객체 필드 및 세 가지 종류 변수 구분
    • 변수가 저장되는 위치 설명
    • static 키워드
    • 메서드 이해, 구성요소와 호출
    • 메서드 오버로딩 이해

필드

  • Field
    • field : class에 포함된 변수
    • class variable, instance variable, local variable
    • static이 포함되면 CV, 없으면 IV, 그 외 메서드 내 모든 변수 LV
    class Example { // => 클래스 영역
    	int instanceVariable; // 인스턴스 변수
    	static int classVariable; // 클래스 변수(static 변수, 공유변수)
    
    	void method() { // => 메서드 영역
    		int localVariable = 0; // 지역 변수. {}블록 안에서만 유효
    	}
    }
    
    • 인스턴스 변수(iv)는 인스턴스 고유의 속성 저장, new 생성자()로 생성, 힙에 저장
    • 클래스 변수(cv)는 static 키워드로 선언, 공통된 저장공간을 공유, 인스턴스 생성하지 않아도 이용 가능
    • 지역변수(lv)는 스택에 저장되어 메서드 종료 시 소멸
    • 힙은 빈 공간을 저장할 수 없어 필드 변수는 강제로 초기화되지만 지역 변수는 스택에 저장하기 때문에 직접 초기화를 해야 한다

Static 키워드

  • static은 클래스 멤버(필드, 메서드, 이너 클래스)에 사용
    • static 멤버와 인스턴스 멤버로 구분
  • static 멤버는 인스턴스 생성 없이도 접근 가능
    • 구분하기 위해 일반적으로 클래스명. 멤버명으로 접근
  • 인스턴스 변수는 힙에 저장하지만 클래스 변수는 클래스 내부에 저장
  • static field는 객체 간 공유 성질을 갖는다
  • static method는 instance field나 instance method를 사용할 수 없다 (인스턴스 생성 없이 호출 가능하기 때문)

Method

  • 메서드(method)
    • 특정 기능을 수행하는 명령문 집합
    • method signature : [접근제어자] [static] [반환형] 메서드 이름 (매개변수)
    • method body : {내용}
    • 메서드 명은 관례적으로 소문자로 표시
  • method 호출
    • 객체명.method이름()

Method overloading

  • 메서드 오버 로딩 : 하나의 클래스 안에 같은 이름의 메서드를 여러 개 정의
    • 클래스 이름이 같고 매개 변수의 개수나 type이 달라야 한다
    • 반환형이 다르다고 오버 로딩되지 않는다

2. 생성자(Constructor)

개요

  • 학습 목표
    • 생성자의 개념과 문법 이해
    • 생성자가 매더스와 구분되는 차이
    • 메서드 오버 로딩이 생성자에서 구현되는 방식
    • 기본 생성자와 매개변수가 있는 생성자 차이
    • this와 this()의 차이

생성자

  • 객체를 생성하는 역할을 하는 구성요소
  • 인스턴스 초기화를 하는 데 사용하는 특수 메서드
  • 사용 조건
    • 생성자의 이름은 클래스 이름과 같다
    • 리턴 타입이 없다
  • 생성자도 오버 로딩이 가능하다

기본 생성자 vs 매개 변수가 있는 생성자

  • 기본 생성자(default constructor)
    • DefaultConst(){}
    • 매개변수, 바디에 아무것도 없다
    • 생성자가 없는 경우 기본 생성자를 자동 생성
  • 매개변수가 있는 생성자
    • 매개변수를 입력받아 인스턴스 초기화

this vs this()

  • this()
    • 생성자 내에서 사용
    • 생성자의 첫 줄에 사용
  • this
    • instance 자신을 가리킨다
    • 인스턴스 변수와 생성자 매개변수를 구분하기 위해 사용
    • 인스턴스 변수는 this.OOO라고 작성 가능

3. 내부 클래스(inner class)

개요

  • 학습 목표
    • 내부 클래스의 기본 개념과 장점
    • 선언 위치에 따른 종류
    • 종류에 따른 유효 범위와 접근성

내부 클래스

  • 내부 클래스
    • 클래스 내에 선언된 클래스
    • 외부 클래스 멤버와 쉽게 접근 가능하고 캡슐화 용이

맴버 내부 클래스(member inner class)

  • 인스턴스 내부 클래스와 정적 내부 클래스를 포함
  • 인스턴스 내부 클래스
    • 외부 클래스의 인스턴스 변수와 정적 변수 접근 가능
    • 내부 클래스에서는 정적 변수/메서드 선언 불가(외부가 선언되어야만 내부 클래스 접근 가능하기 때문)
  • 정적 내부 클래스
    • 외부 클래스와 무관하게 내부 클래스 정적 변수를 사용하려고 할 때 사용 가능

지역 내부 클래스

  • 클래스 멤버가 아닌 메서드 안에서 정의된 클래스
  • 일반적으로 선언 후 바로 객체 생성해서 사용