본문 바로가기

프로그래밍/자바

[자바 / 기본] Class란?

728x90
반응형
SMALL

클래스 (Class)의 정의 + 생성자

클래스 : 사용자가 만들고자 하는 대상의 "상태" 와 "기능" 을 함께 가지고 있는 "데이터  타입

  • "상태" 는 클래스의 멤버 변수(member variable), 속성(attribute) 혹은 필드(field) 로도 표현
  • "기능" 은 클래스의 멤버 메소드(member method)로 정의 하고 행동(behavior) 로도 표현
  • 일반적으로 멤버 변수는 private 멤버 메소드는 public 으로 설정

 

 - 클래스를 사용하기 위해서는 해당 클래스의 "인스턴스" 또는 "객체" 를 생성해야함

 - [구문] 클래스이름 변수이름 = new 생성자();

 - 생성자클래스의 이름과 동일하고 클래스의 멤버변수들을 초기화하는 역할

  • 생성자의 목적은 인스턴스 생성 시 멤버 변수들을 초기화 해주는 것
  • new 로 생성하는 인스턴스들은 인스턴스가 생성이 될 때, 자동으로 초기화가 되며 초기화 할 값이 지정되어있지 않으면 각 변수들의 타입의 기본값 (디폴트값) 으로 초기화가 됨
  • return type이 없으며 매개변수 (argument)를 가질 수 있고 오버로딩(overloading)이 가능함
  • [주의] 클래스에서 하나 이상의 생성자를 만들어주게 되면 디폴트 생성자를 만들어주지 않음. 따라서 아무일을 하지 않더라고 디폴트 생성자를 반드시 만들어주는 것을 추천
public class Hi{ // 클래스 예시
	private int num;

	public Hi(){} // 디폴트 생성자
    public Hi(int n){this.num = n} // 매개변수 있는 생성자 + 오버로딩

}

 

Getter & Setter

  - 앞서 이야기 했듯이 클래스의 멤버 변수는 private으로 선언하는 것.

 - 그 이유는 클래스 안에 필요한 속성 과 행동을 외부에서의 직접적인 접근을 제어하기 위함이다. (캡슡화 encapsulation)

 - 이때 클래스의 멤버변수를 접근하기 위한 기능을 제공하는 메소드를 Getter & Setter 라고 부른다.

자바 빈 (Java Bean)

  • 자바 빈이란 자바 빈즈(Java Beans)의 규약에 따라 작성된 자바 클래스
  • 필자가 자세한 내용을 보기위해 참고한 블로그 [https://soft.plusblog.co.kr/58]
  • 자바빈 클래스 외부에서 필드에 접근 할 경우 반드시 규약대로 정의된 getter, setter 메소드를 통해 접근 해야 하며 이렇게 제공되는 것을 property(속성) 이라고 부른다.

Property (속성)

  • getter, setter 네이밍 
         - 프로퍼티 값을 '읽는' 메소드는 get으로 시작한다.  (읽기 속성)
          - 프로퍼티 값을 '변경'하는 메소드는 set으로 시작한다.  (쓰기 속성)
          - get과 set 뒤에는 프로퍼티의 이름 첫 글자를 대문자로 바꾼다.
          - set 메소드는 1개의 파라미터를 갖는다.
  • property 는 필드가 아니며, 객제의 속성(attribute)을 표현하는 값을 다루는 것이면 무엇이든 가능하다.
//예시
getter & setter 작명
age => getAge
    => setAge

 

this

  • 클래스 안에서의 "this"는 객체 내에서 자기 자신(인스턴스)를 가리킴
  • 이를 통해 메소드 체이닝 (method chaining) 을 사용할 수도 있다.
  • 메소드 체이닝이란 -> 자기자신을 리턴하여 연이어 메소드 호출을 연상케 하는 메소드를 설계하는 것
  • 메소드 체이닝 참고 관련 블로그 [https://dreamcoding.tistory.com/60] (그냥 본인이 읽고 이해한 블로그)
//예시 클래스
public class Number {
    private int num = 100;  // 필드 초깃값 명시 가능

    public Number() {
    }

    public Number(int num) {
        this.num = num;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public Number add(Number x){
        this.num += x.num;
        return this;        //자기 자신을 리턴, return 값이 Number 클래스 인걸 확인
    }

}

 


Lambok 라이브러리

  • 개발 과정에서 발생하는 잦은 클래스 설계 변경등에 대해 자동적으로 생성자, getter, setter, toString(). builder 를 제공해준다.
  • 사이트 : [https://projectlombok.org/]
  • rumtime이 아닌 compile time에 동작하는 라이브러리 이다.
  • 본인이 보고 따라했던 Lombok 사이트 [https://goddaehee.tistory.com/208]

 

//예시
import lombok.*;  //lombok을 import해줘야함
//@Setter
//@Getter
@Data //
@AllArgsConstructor
@NoArgsConstructor
@RequiredArgsConstructor
@Builder //BUilder pattern

public class Model {
    @NonNull
    private String title;
    @NonNull
    private int old;
    private boolean isAdult;
    private char gender;
    private short size;
    private String author;
}

 

 

 

 

 

 

728x90
반응형
LIST