[Java] 클래스 내부 구성 요소 3가지 (필드, 생성자, 메서드 + This)

2022. 6. 27. 19:21·Java/자바 이론

클래스의 필드, 생성자, 메서드에 대해 알아보자.

또한 클래스 내부에서 자신의 객체를 가리키는 this키워드와 자신의 다른 생성자를 호출하는 this() 메서드도 학습한다.


필드 ( Field )

필드는 '클래스에 포함된 변수'로, 객체의 속성값을 지정할 수 있다.

지역 변수는 '메서드에 포함된 변수'다. 

즉, 필드와 지역 변수는 어떤 중괄호 안에 선언됐는지에 따라 구분할 수 있다. (선언 위치가 중요하다.)

 

가장 큰 차이점은 생성되는 메모리의 위치다. 

필드 = Heap 메모리의 객체 내부

지역 변수 = 스택 메모리

스택 메모리에 있는 변수는 JVM이 자동으로 삭제하지만, 힙 메모리의 객체 안에 저장되는 필드는 객체가

사라지지 않는 한 절대로 삭제되지 않는다.

1. 필드

- 외부에서 객체를 사용할 때 지속적으로 사용되어야 하는 데이터.

- 접근지정자 주로 private

- instance field / static field 가 존재한다.

- 필드 사용은 항상 메소드를 통해서 사용하게끔 해라. ( Get Set )

 

2. 지역 변수

- 해당 메서드 안에서만 사용이 가능한 변수다.

 


생성자

- Default 기능 : 

1. 객체등록 (생성자가 호출이 안 될경우 객체를 생성할 수 없다.)

2. 생성자를 명시적으로 만들지 않을 경우 Default 생성자를 제공해준다.

- 오버로딩이 가능하다. (객체를 다양하게 만들 수 있다.)

- 리턴타입이 없다.

- 반드시 클래스명과 동일한 이름으로 만들어야한다.

 

- 기능 :

1. 객체 생성 시 필드 초기화

2. 필드 시작 값을 정할 수 있다.

3. 접근지정자는 주로 public으로 사용한다.

(외부에서 사용이 용이하기 때문)

4. 생성자도 메서드처럼 오버로딩을 할 수 있다.

   즉, 메서드처럼 생성자의 입력매개변수 자료형이나 개수에 따라 여러개의 생성자를 정의할 수 있다.

 


메서드

클래스의 기능에 해당하는 요소다.

메서드도 클래스의 맴버이므로 외부에서 메서드를 사용하려면 먼저 객체를 생성해야 한다.

ex) MethodExam me = new MethodExam();

      me.메소드();

 

* 주요 기능

- public으로 주로 지정

- 외부에서 필드에 접근하는 목적

- 필드는 항상 메소드를 통해 접근해야 한다. Get / Set 을 사용한다.

- 클래스 내부에 있는 메서드 끼리는 객체를 생성하지 않고 서로를 호출할 수 있다. 같은 맴버이기 때문이다.

   필드 또한 멤버이므로 객체를 생성하지 않고 필드를 사용할 수 있다.

   다만, static 메서드는 static이 붙은 필드와 메서드만 호출할 수 있다. 

 

* 함수 호출 방식 3가지

1. call by name         // 함수 이름 호출

2. call by value         // 값에 의한 호출 (기본 자료형의 값이 메서드의 지역 변수에 복사된다.)    

3. call by reference  // 참조에 의한 호출  (객체의 참조값이 전달돼 복사된다. 호출한 &된 메서드에서 동일한 객체를

                                                            쳐다보고 있기 때문에 객체의 값을 변경하면 값이 바뀌게 된다. )

 

* Static 메서드와 Instance 메서드

가장 큰 차이점은 "객체 생성 여부"이다. 

1. Static (=Class) 메서드는 객체를 생성하지 않고 클래스명.메서드명 으로 호출이 가능하다.

- Instance Field 사용 불가

- Static Field 사용 가능

- 목적 : 모든 객체가 데이터를 공유하기 위해 사용한다.

 

2. Instance 메서드는 반드시 객체를 생성한 후에 호출 가능하다.

    즉, 인스턴스가 반드시 존재해야만 사용할 수 있다.

- Static Field 사용 가능

- Instance Field 사용 가능

- 사용률 90% 이상

- tihs가 존재한다.

 

* Static 메서드를 사용하면 좋은 경우

1. 모든 인스턴스에 공통으로 사용하는 것에 Static을 붙인다.

= 모든 인스턴스에서 같은 값이 유지되어야 하는 변수는 Static을 붙여서 클래스 변수로 정의한다.

 

2. 메서드 내에서 인스턴스 변수를 사용하지 않을 경우 Static을 붙이는 것을 고려하자.

= 메서드의 호출시간이 짧아져 성능이 향상된다.

(인스턴스 메서드는 실행 시 호출 메서드를 찾는 과정이 추가적으로 필요하기 때문에 시간이 더 걸린다.


this 키워드와 this() 메서드

모든 메서드는 자신이 포함된 클래스의 객체를 가리키는 this라는 참조 변수가 있다.

this.를 생략하면 컴파일러가 자동으로 this.를 추가해주기 때문에 지금까지 클래스 내부에서 필드와 메서드를 그대로 사용할 수 있던 것이다. (지역변수는 맴버가 아니므로 this.가 자동으로 붙지 않는다.)

 

* this란?

- 객체를 구별해준다. -> 메모리 절약효과

-인스턴스 메서드의 첫번째 맴버변수로 항상 존재한다.

-사용만 가능하고 만들 수는 없다.

-효율적으로 insance를 관리할 수 있다.

 

* 자동이면 몰라도 되는거 아니냐?

꼭 사용해야 하는 경우가 있다.

 

1. 필드와 지역변수가 이름이 똑같을 경우

필드에 this.을 붙여줌으로서 지역변수와 필드를 구분할 수 있다.

 

2. 내 자신의 객체를 보내줘야 할 경우 다음과 같이 사용할 수 있다.

public MethodExam getObject(){
       ruturn this;
}

 

 

3. 생성자에서 오버로딩된 또 다른 생성자를 호출할 때 사용

this() 메서드를 통해 각 생성자마다 중복되는 코드를 최소화 할 수 있다.

*조건1. 생성자의 내부에서만 사용할  수 있다.

*조건2. 생성자의 첫 줄에 위치해야 한다.

둘 중 하나라도 지켜지지 않으면 이클립스는 바로 오류를 발생시킨다.

 


참고문헌 : Do it 자바 완전 정복

'Java > 자바 이론' 카테고리의 다른 글

[Java] 자바 super 키워드 & super() 메서드  (0) 2022.06.30
[Java] 자바 클래스 상속의 장점과 특징  (2) 2022.06.30
[Java] 클래스 관계 HAS-A (포함) / IS-A (상속) 정리  (2) 2022.06.29
[Java] String 객체 특징 ( ==와 equals의 차이점 )  (1) 2022.06.23
[Java] 자바 메모리 영역 Static, Stack, Heap  (4) 2022.06.23
'Java/자바 이론' 카테고리의 다른 글
  • [Java] 자바 클래스 상속의 장점과 특징
  • [Java] 클래스 관계 HAS-A (포함) / IS-A (상속) 정리
  • [Java] String 객체 특징 ( ==와 equals의 차이점 )
  • [Java] 자바 메모리 영역 Static, Stack, Heap
현기
현기
  • 현기
    현기의 개발블로그
    현기
  • 전체
    오늘
    어제
    • 분류 전체보기 (120)
      • Front-End (39)
        • Next (5)
        • React (8)
        • React Native (11)
        • Flutter (0)
        • Vue (1)
        • JSP (9)
        • HTML, CSS, JS (5)
      • Back-End (16)
        • Node.js (3)
        • Spring (8)
        • Flask (1)
        • AWS (4)
      • DB (5)
        • Oracle (4)
        • MySQL (1)
      • Python (7)
      • Java (27)
        • 자바 이론 (17)
        • 코딩테스트 연습 & 실습 (10)
      • 자료구조 & 알고리즘 (7)
        • 코딩테스트 (6)
        • 알고리즘 (1)
      • 블록체인 (0)
      • 프롬프트 엔지니어링 (0)
      • CS 지식 (5)
      • IT뉴스 (0)
      • 일상 (3)
      • etc (11)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    IS-A
    오블완
    티스토리챌린지
    Python
    node.js
    그리디
    큐
    서블릿
    Express
    자바
    자바스크립트
    React Native Chart
    Java
    react
    리액트 네이티브
    포스트맨
    DI
    쓰레드
    REST API
    상속
    자바 스프링
    스택
    JSP
    오라클
    JDBC
    react-native-chart-kit
    Spring
    React Native
    next-intl
    파이썬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
현기
[Java] 클래스 내부 구성 요소 3가지 (필드, 생성자, 메서드 + This)
상단으로

티스토리툴바