[Java] Class

정재현·2024년 1월 3일

Java

목록 보기
25/43
post-thumbnail

클래스란?

  • 객체를 생성하기 위한 설계도
  • 클래스의 구성 멤버에는 필드, 생성자, 메서드

생성과정

  • 클래스 선언
  • 클래스의 필드 정의
  • 클래스의 생성자 정의
  • 클래스의 메서드 정의

예시

public class 이름 {	// 클래스 선언
 	type 변수명;	// 필드
        
    public 이름() {}	// 기본 생성자
    
    반환type 메서드명(type 매개변수명) { }	// 메서드
}

객체 생성과 참조형 변수

객체 생성

	new Class이름();

참조형 변수

	Class이름 c1 = new Class이름(); // Class이름의 객체인 c1 인스턴스 생성
	Class이름 c2 = new Class이름(); // Class이름의 객체인 c2 인스턴스 생성

객체 배열

	Class이름[] 변수이름 = new Class이름[크기]

객체의 속성 : 필드

필드란?

  • 객체의 데이터를 저장하는 역할
  • 고유한 데이터, 상태 데이터, 객체 데이터로 분류

필드의 초기값과 초기화

  • 기본적으로 초기값을 제공하지 않을 경우 객체가 생성될 때 자동으로 기본값으로 초기화
  • 필드 타입별 기본값

필드 사용 방법

  • 외부접근 사용 방법
    • 도트(.) 연산자 사용
	Class이름[] 변수이름 = new Class이름[크기]
    
    변수이름.필드이름
  • 내부접근 사용 방법
    • 일반 변수 사용하듯 사용하면 됨

객체의 메서드

메서드 선언 방법

	리턴타입 메서드명(매개변수, ...) {
		실행할 코드 작성
	}

메서드 호출 방법

  • Class 외부 접근
	Class변수이름.Class메서드이름(매개변수);
  • Class 내부 접근
	리턴타입 메서드명(매개변수, ...) {
		Class메서드이름(매개변수)
	}

메서드 오버로딩

오버로딩

  • 함수가 하나의 기능만을 구현하는것이 아니라 하나의 메서드 이름으로 여러 기능을 구현하도록 하는 기능
  • 즉, 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도, 매개변수의 개수 또는 타입, 순서가 다르면 동일한 이름을 사용해서 메서드를 정의할 수 있다.
    오버로딩의 조건
  • 메서드의 이름이 같고, 매개변수의 개수, 타입, 순서가 달라야 합니다.
  • '응답 값만' 다른 것은 오버로딩을 할 수 없습니다.
  • 접근 제어자만 다른 것도 오버로딩을 할 수 없습니다.
    결론, 오버로딩은 매개변수의 차이로만 구현 가능

오버로딩의 장점

    1. 메서드 이름 하나로 상황에 따른 동작을 개별로 정의할 수 있습니다.
      ex.메세지 출력할때 쓰는 println() 의 매개변수로는 int, double, String, boolean 등 다양하게 넣을수 있음
    1. 메서드의 이름을 절약 가능
    • 만약 오버로딩이 안된다면 println() 는 printlnInt(), printlnDouble() 처럼 메서드명이 길어지고 낭비 되었을 것

기본형 & 참조형 매개변수

  • 기본형 매개변수

    • 메서드를 호출할 때 전달할 매개값으로 지정한 값을 메서드의 매개변수에 복사해서 전달
    • 매개변수의 타입이 기본형일 때는 값 자체가 복사되어 넘어가기 때문에 매개값으로 지정된 변수의 원본 값이 변경되지 않음.
  • 참조형 매개변수

    • 메서드를 호출할 때 전달할 매개값으로 지정한 값의 주소를 매개변수에 복사해서 전달
    • 매개변수를 참조형으로 선언하면 값이 저장된 곳의 원본 주소를 알 수 있기 때문에 값을 읽어 오는 것은 물론 값을 변경하는 것도 가능
    • 메서드의 매개변수 뿐만 아니라 반환타입도 참조형이 될 수 있음.
      • 반환타입이 참조형이라는 것은 반환하는 값의 타입이 “실제값의 주소”라는 의미

생성자

생성자 선언화 호출

  • 생성자는 반환 타입이 없고, 이름은 클래스 이름과 동일해야 함
  • new연산자에 의해 객체가 생성될 때 생성자가 호출됨

기본 생성자

  • 선언할 때 괄호( ) 안에 아무것도 넣지않는 생성자를 의미
  • 모든 클래스는 반드시 생성자가 하나 이상 존재
  • 만약 클래스에 생성자를 하나도 선언하지 않았다면 컴파일러는 기본 생성자를 바이트코드 파일에 자동으로 추가해줌
    • 반대로 단 하나라도 생성자가 선언되어있다면 컴파일러는 기본 생성자를 추가하지 않습니다.
    • 컴파일러에 의해 생성되는 기본 생성자는 해당 클래스의 접근 제어자(public, …)를 따름
    • 한개 이상의 생성자가 존재할 때 기본 생성자를 호출할 경우 오류가 생기게 된다.

필드 초기화

  • 생성자는 객체를 초기화하는 역할을 수행
    • 객체를 만들때 인스턴스마다 다른 값을 가져야 한다면 생성자를 통해서 필드를 초기화
  • 반대로 인스턴스 마다 동일한 데이터를 가지는 필드는 초기값을 대입하는 것이 좋음

생성자 오버로딩

  • 생성자를 통해 필드를 초기화 할 때 오버로딩을 적용 가능
  • 오버로딩을 할 때 개수, 타입, 순서가 동일한데 매개변수명만 다르게 하는 경우는 오버로딩 규칙에 위배되기 때문에 오류가 발생
  • 매개변수의 종류가 다를 때만 생성자 오버로딩 사용 가능

TIP

IntelliJ에서 클래스 필드의 get과 set을 자동으로 만드는 방법

  • window : alt + insert
  • mac : command + N 혹은 alt + N
  • 수동 : 코드 부분 바탕 우클릭 → Generate → Getter and Setter → 원하는 필드 선택 → OK

profile
공부 기록 보관소

0개의 댓글