[TIL-Java] 클래스와 객체, 생성자

이용준·2022년 11월 6일
0

TIL

목록 보기
1/21

1.클래스와 객체

1-1.클래스

  • 클래스란 객체를 정의한 설계도
  • 객체 생성시 사용

    객체와 인스턴스

    • 클래스로 생성한 객체 -> 인스턴스
      a. 객체, 모든 인스턴스 포괄(넓은 의미)
      b. 인스턴스, 객체와 생성된 클래스 강조(좁은 의미)


      집의 예시에서 집은 일반적인 의미에서 객체이고, 더 구체적인 표현으로 집의 설계도로부터 만들어진 집이라는 의미에서 집 클래스의 인스턴스라 한다.

    클래스의 구성요소

    public class Component{
      String x = "field";   // (1) 필드
      void methodX(){...};  // (2) 메서드
      Constructor{...};     // (3) 생성자
      class InnerClass{...};// (4) 이너 클래스
    }

1-2.객체

  • 객체는 크게 속성기능으로 구성
    - 속성 = 필드 / 기능 = 메서드 => 멤버

  • new 키워드 통해 생성

    클래스명 참조변수명 = new 생성자();
    Car Audi = new Car();
  • 포인트 연산자 .를 통해 객체의 멤버에 접근

  • 참조 벼수명.필드/메서드()를 통해 활용

    1) 클래스 타입의 참조 변수 선언
    2) new 키워드와 생성자 통해 인스턴스 생성
    3) 생성된 인스턴스 참조변수 선언
    ☛ 참조변수 - 실제 데이터가 저장된 힙 메모리의 주솟값

2.필드와 메서드

2-1.필드

  • 필드, 클래스에 포함된 변수
  • 자바의 변수
변수static비고
클래스O멤버 변수
인스턴스X멤버 변수
지역X그 외
class Sample{ // -> 클래스 영역
  int instance; // 인스턴스 변수
  static classValue; // 클래스 변수(static, 공유변수)
  
  void method(){ // -> 메서드 영역
    int localValue=0; // 지역 변수, {}블록 안에서만 유효
  }
}  

인스턴스 변수

a. 인스턴스 고유 속성(예-사람의 성격)
b. new 생성자()를 통해 인스턴스 생성시 만들어진다.

클래스 변수

a. 모든 인스턴스에 동일값 부여
b. static 키워드 사용
c. 인스턴스 별도 생성 없이 클래스명.클래스변수명 통해 사용가능

지역 변수

a. 메서드 내에 선언
b. 메서드 내 {} 블록에서만 사용 가능
c. 스택 메모리에 저장되어 메소드 종료와 동시에 삭제
d. 직접 초기화 실행

2-2.static 키워드

  • static
    - 클래스의 멤버(필드/메서드/이너클래스)에 사용하는 키워드
    • 정적 멤버
    • 인스턴스 생성 없이도 클래스명.클래스 사용가능
      (인스턴스는 객체 생성 후 접근 가능)
    • 힙 메모리에 생성 및 독립적 저장공간 보유

      특징)
      1) 정적 필드는 객체간 공유하는 성질
      2) 정적 메서드는 인스턴스 변수와 메서드 사용불가

2-3. 메서드

  • 메서드
    • 클래스의 기능 담당
    • 시그니처/바디로 구분
    접근제어자 반환타입 메서드명(매개변수){  // 메서드 시그니처
      메서드 내용  // 메서드 바디
    }
  • 메서드 호출
    • 클래스 외부에서 메서드 사용위해 인스턴스 생성 필요
    • 포인트 연산자 . 통해 메서드 호출
    • 클래스 내부 메서드간 별고 객체 생성 없이 호출 가능
    • 인자 갯수와 순서는 메서드 정의시 선언된 매개 변수와 일치해야 함

2-4.메서드 오버로딩

  • 메서드 오버로딩
    • 메서드 하나에 여러 개의 메서드를 정의하는 것.
  • 오버로딩 성립 조건
    1) 같은 이름의 메서드명
    2) 매개 변수의 갯수 or 타입 다르게 정의

3.생성자

3-1.생성자

  • 객체를 생성하는 역할을 하는 클래스의 구성 요소
  • 인스턴스 초기화 메서드
  • 생성자도 오버로딩 가능
    (한 클래스 내 여러 개 생성 가능)
  • 생성자와 메서드 차이
    1) 생성자명과 클래스명은 같아야 한다.
    2) 생성자는 리턴 타입은 없음
    3) 생성자 기본 구조
    클래스명(매개변수){
      ...
    }  

3-2.기본 생성자와 매개변수 생성자

  • 매개변수 있는 생성자
    • 매개변수를 통해 호출 시 해당 값을 받아 인스턴스 초기화
    • 인스턴스 생성과 동시에 필드값 입력 가능
      예)
    class Chair{
      private String modelName;
      
      public Chair(String modelName){// 생성자
        this.modelName;
      }  

3-3. this와 this()

  • this()
    • 자신이 속한 클래스에서 다른 생성자 호출 시 사용
    • 문법 요소
      • 생성자 내부에서만 사용 가능
      • 생성자 첫 줄에 위치
  • this
    • 인스턴스/매개변수 구분 용도
    • 인스턴스 자신을 지칭

4.내부 클래스

4-1. 내부 클래스

  • 클래스 내에 선언된 클래스
  • 코드 복잡성 감소
  • 외부 클래스 멤버들에 쉽게 접근 가능
  • 구성
    class OuterClass{ // 외부클래스
      class InnerClass{
        // 인스턴스 내부 클래스
      }
      static class StaticInnerClass{
        // 정적 내부 클래스
      }
      void run(){
        // 지역 내부 클래스
      }
     }
    } 
    • 기본적으로 내부 클래스는 외부 클래스 내에 선언된다는 점을 제외하면 일반 클래스와 차이 없음

4-2.멤버 내부 클래스

멤버 내부 클래스 = [인스턴스 내부 클래스/정적 내부 클래스]

  • 인스턴스 내부 클래스
    • 외부클래스의 모든 접근 지정자의 멤버에 접근 가능
    • 반드시 외부 클래스 생성 후 사용.
      (정적 변수/메서드는 인스턴스 내부 클래스에서 선언 불가)
  • 정적 내부 클래스
    • 내부 클래스가 외부 클래으세 의존 없이 사용
    • static 키워드 사용

4-3.지역 내부 클래스

  • 메서드 내에서 정의되는 클래스
  • 메서드 내부에서만 사용 가능
  • 메서드 안에서 선언 후 바로 객체 생성해 사용
profile
뚝딱뚝딱

0개의 댓글