[Java] Chap6 클래스

Seunghee Lee·2022년 12월 8일
0

Java

목록 보기
2/12
post-thumbnail

1. 클래스 선언

※ 파일 이름과 동일한 이름의 클래스 선언에만 public 접근 제한자를 붙일 수 있다 !

ex) Car.java
public class Car { ~ }	// 파일 이름과 동일한 class에만 public 붙일 수 있음
class Tire { ~ }

☞ 가급적 소스 파일 하나당, 동일한 이름의 클래스 하나를 선언하는 것이 좋다


2. 객체 생성과 클래스 변수

- 클래스로부터 객체를 생성하는 방법 : new 연산자 사용

🤔 new 연산자 ? 클래스로부터 객체를 생성시키는 연산자

  • new연산자 뒤에는 생성자가 온다. 이때 생성자는 클래스() 형태를 갖는다.
new 클래스( );
  • new 연산자로 생성된 객체는 힙(heap) 영역에 생성된다.
    ≫ 따라서, new 연산자는 힙 영역에 객체를 생성시킨 후, 객체의 주소를 리턴한다.
    이 주소를 참조타입인 클래스 변수에 저장해 두면, 변수를 통해 객체를 사용할 수 있다.
1. 방법1
클래스 변수;
변수 = new 클래스( );

2. 방법2
클래스 변수 = new 클래스( );

3. 클래스의 구성 멤버

⭐ 구성멤버 : 필드, 생성자, 메소드

  • 필드; Field
    = 객체의 데이터가 저장되는 곳

  • 생성자; Constructor
    = 객체 생성 시 초기화 역할 담당

  • 메소드; Method
    = 객체의 동작에 해당하는 실행 블록


(1) 필드 선언

  • 생성자와 메소드 줄괄호 블록 내부 외 모든 곳에 필드 선언이 가능하다.
    그래서 일부 사람들은 '클래스 멤버 변수' 라고 부르기도 하는데, 될 수 있으면 필드라는 용어를 지향하도록 한다.

ex)

String company = "Hyundai";

(2) 생성자 선언

  • 생성자의 매개변수를 사용하는 것보다 this 참조 변수로 필드를 사용하는 것이 좋다.
    ex) this.필드 ≫ this.name = name;

🤔 생성자 오버라이딩 ? 매개변수의 타입, 개수, 순서가 다르게 선언
- new 연산자로 생성자를 호출할 때 제공되는 매개값의 타입과 수에 의해 호출될 생성자가 결정된다.

※ 주의할 점 !
= 매개변수의 타입과 개수, 순서가 똑같을 경우 매개변수 이름만 바꾸는 것은 오버라이딩이라고 볼 수 없다 !!

- 생성자 오버라이딩이 많아질 경우, 생성자 간의 중복된 코드가 발생할 수 있다.
≫ 해결방법 : 필드 초기화 내용은 한 생성자에만 작성하고, 나머지 생성자는 초기화 내용을 가지고 있는 생성자를 호출하는 방법을 사용한다 ! ... 이때 this() 코드를 사용 !!

ex) 중복 코드 발생

    Car(String model){
        this.model = model;this.color = "sliver";			│ 중복코드
        this.maxSpeed = 350;}
    Car(String model, String color){
        this.model = model;this.color = color;				│ 중복코드
        this.maxSpeed = 350;}
    Car(String model, String color, int maxSpeed){
        this.model = model;this.color = color;				│ 중복코드
        this.maxSpeed = maxSpeed;}

🤔 this 코드 ? 자신이 다른 생성자를 호출하는 코드
※ 반드시 생성자의 첫줄에서만 허용된다.

  • 형태
클래스명([매개변수 선언, ...] ) {
	this(매개변수, ... ,, ...);
    실행문;
}

ex) this( ) 코드 호출하여 중복 코드 줄이기

	Car(String model){
        this(model, "은색", 250);
    }
    Car(String model, String color){
        this(model, color, 250);
    }
    Car(String model, String color, int maxSpeed){
        this.model = model;this.color = color;				│ 공통 실행 코드
        this.maxSpeed = maxSpeed;}

(3) 메소드 선언

  • 매개변수의 수를 모를 경우
    : 리스트를 생성해 넘겨주거나, ... 을 선언하면 된다.
    ... 메소드 호출 시 넘겨준 값의 수에 따라 자동으로 배열이 생성되고 매개값으로 사용된다.

ex)

1. 메소드 선언
	- 리스트 생성해서 넘겨주기
    int sum2(int[] values) { ~ }
    
    - ... 사용해서 넘겨주기
	int sum2(int ... values) { ~ ] 

2. 메소드 호출 시; 리스트로 나열해 주기
방1) int result = sum2(1,2,3);2) int[] values = {1,2,3};
	 int result = sum2(values);3) int result = sum2(new int[] {1,2,3});

4. 어노테이션

🤔 어노테이션(Annotation) ?
= 메타데이터, 즉 애플리케이션이 처리해야 할 데이터가 아니라, 컴파일 과정과 실행 과정에서 코드를 어떻게 컴파일하고 처리할 것인지를 알려주는 정보이다.

  • 형태 : @AnnotationName

어노테이션의 3가지 용도
1. 컴파일러에게 코드 문법 에러를 체크하도록 정보 제공
2. SW 개발 툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보 제공
3. 실행 시 (런타임 시) 특정 기능을 실행하도록 정보 제공

⭐ 대표적인 예) @Override
= 메소드가 오버라이드(재정의) 된 것을 컴파일러에게 알려주어 컴파일러가 오버라이드 검사를 하도록 한다.

profile
자라나라 개발개발 ~..₩

0개의 댓글