☕Java: 클래스(필드, 메소드, 생성자) 개념 정리

yoondgu·2022년 3월 17일
0

Java 

목록 보기
3/18

강의 수강 중 작성한 노트에서 내용을 발췌, 이응수 강사님 강의 의 노트와 이미지를 참조하고 있습니다.
스스로 이해를 위해 직접 쓴 문장들의 경우 다소 부정확할 수 있습니다.

객체와 클래스


📌 클래스

  • 객체를 생성하기 위한 설계도
  • 클래스는’사용자정의 자료형’이라고 생각할 수 있다.
  • 클래스는 객체를 생성하기 위한 필드와 메소드의 집합이다.
  • Object.class 는 모든 객체의 부모객체이다.
  • 클래스와 클래스의 관계는 has a 관계, is a 관계 로 설명 가능하다.
    has a 관계 : 포함 관계 / car has a Tire, car has a Engine
    is a 관계: 상속관계, 구현관계 / Galaxy is a smartphone, Iphone is a smarthone

💡 .java 확장자 파일은 개발자용 설계도, 컴파일해서 저장되는 .class 파일은 JVM용 설계도 라고 생각하면 된다.
class 파일로부터 만들어진, 메모리 안에 생성된 객체는 해당 객체의 인스턴스라고 한다.

💡 클래스의 분류
프로그램 대상이 되는 정보를 저장하는 객체를 VO(ValueObject: 값 객체)라고 한다.
⇒ 이처럼 클래스의 각 역할에 따라서 부르는 명칭들이 있다. (VO, DAO, Repository .. )

  • 자바 도큐먼트 주석을 통해 해당 클래스에 대한 설명을 기재한다.

클래스의 구성요소


  • 필드
  • 메소드
  • 생성자

📌 필드 Field

  • 고유 데이터, 현재 상태정보(속성), 다른 객체를 저장
  • 변수와 비슷한 형태로 정의한다.
  • 변수는 ‘선언 위치’에 따라 필드 / 지역변수, 매개변수 로 나뉜다.
    - 지역변수(Local variable): **메소드 안에서 선언한 변수**
    -선언한 메소드 안에서만 사용 가능하다.
    -메소드의 실행이 종료되면 즉시 사라진다.
    -변수가 자동으로 초기화되지 않기 때문에 반드시 초기화한 후에 사용해야 한다.
    - 필드(Field) : **메소드 밖, 클래스에서 선언한 변수**
    프로퍼티, 멤버변수, 인스턴스변수 모두 필드를 의미하는, 같은 말이다.
    **멤버변수 객체 생성에 참여하는 변수. 생성된 객체에 포함되는 변수. 라는 의미
    인스턴스변수 객체 생성하면 사용할 수 있는 변수. 라는 의미
    -객체를 먼저 생성한 다음 사용할 수 있다.
    -참조변수를 사용해서 필드에 값을 저장하거나 값을 사용할 수 있다.
    -객체가 생성되면 각각의 필드는 해당 데이터타입의 기본값으로
    자동으로 초기화**된다.
    (0, 0.0 null ..)

💡 초기화
선언만 한 필드를 가진 클래스가 new 연산자를 통해 인스턴스를 생성했을 때,
필드의 값에 대한 자동 초기화가 “인스턴스에서” 이루어진다.


📌 메소드 Method

  • 객체의 기능에 해당하는, 수행문의 코드블록
  • 선언부와 구현부로 구성된다.
    선언부 : 접근제한자 반환타입 메소드이름(타입 매개변수명, 타입 매개변수명..)
    구현부: {해당 메소드가 수행하는 작업에 대한 수행문이 포함됨}
    - 매개변수 : 메소드 실행에 필요한 값을 전달 받아서(=인자값) 저장하는 변수
    - 반환타입 : 메소드를 실행하면 획득하게 되는 값(변수)의 타입. 반환값이 없을 경우 void
    * 반환 타입이 객체인 경우 반환값은 객체의 참조값이다. (변수자체를 반환하는게 아님!)
    - 메소드이름 은 동사형으로 붙여준다.
    - 입출력은 각각 있을 수도, 없을 수도 있으며 선언부, 구현부를 보고 알 수 있다.


메소드의 사용방식 네가지. println은 표준출력장치로 찍어내는 것이고, 여기서 말하는 입출력은 자바에 값을 넣고 반환하는 것을 말함.

💡 메소드의 호출

  • 객체 내부에서의 메소드 호출:
    클래스 내부에서 해당 클래스의 다른 메소드를 호출할 경우 메소드 그 자체로 호출한다. 메소드(매개값..)
  • 객체 외부에서의 메소드 호출:
    클래스에서 정의된 메소드를 해당 클래스 외부에서 사용하려면 무조건 클래스의 ‘객체’를 만들어야 한다.
    1) 객체 생성 클래스 참조변수 = new 클래스(매개값..)
    2) 메소드 호출 참조변수.메소드(매개값); 타입 변수 = 참조변수.메소드(매개값)

💡 메소드와 객체의 참조
호출하는 메소드에 객체의 참조값을 전달하면 그 메소드도 같은 객체를 참조하게 되고, 그 메소드 안에서 객체의 정보를 변경하면 메소드가 종료된 후에도 유지된다.

💡 메소드 중복정의

  • 하나의 클래스에 매개변수의 개수나 타입이 서로 다른 같은 이름의 메소드를 여러 개 정의하는 것. (매개변수의 이름만 바꿔서는 중복정의 x)
  • 하나의 메소드에 대하여(유사한 기능에 대하여) 매개변수의 경우의 수가 다양할 때 사용 ex) println()
    ⇒ 같은 작업을 수행하는 메소드를 일관된 방식으로 사용하기 위함이다.

📌 생성자 Constructor

  • 클래스의 이름과 동일한 이름을 가진 메소드
  • 반환 타입이 없다. (void도 아님, 반환타입 자체가 없는 것. 반환타입이 있을 경우 생성자메소드가 아니다.)
  • 기능
    • 객체 생성 시 초기화 작업을 수월하게 해준다.
    • 객체가 생성된 후 자동으로 실행된다 ⇒ 객체 생성 후 처음으로 실행할 작업을 생성자 메소드로 구현한다.
    • 첫 작업은 대부분
      • 멤버변수를 초기화하는 작업
      • 외부자원(네트워크, 데이터베이스 등)과 연결하는 작업이다.
  • 사용
    • 객체를 생성할 때 new 키워드 다음에 적는다. Person p1 = new Person();
    • 참조변수를 통해 실행할 수 없다. 참조변수.생성자메소드(); ⇒ 실행불가.
      객체를 생성할 때 = 객체와 참조변수를 연결할 때 생성자메소드를 이미 실행하니까 말이 안됨.
    • 클래스에 생성자메소드가 없으면 컴파일러가 ‘기본 생성자 메소드’를 자동으로 추가한다. public Person() { } 형식으로 생성된다.
      • 기본 생성자 메소드: 매개변수가 없는 생성자 메소드
    • 생성자도 중복정의가 가능하다
    • this 키워드가 함께 활용된다.

💡 기본 생성자 메소드가 아닌 다른 어떤 생성자 메소드라도 이미 만들어져 있다면,
기본 생성자 메소드는 ‘자동으로 추가’되지 않는다.

따라서 생성자 메소드의 중복정의를 사용한다면 기본 생성자 메소드는 직접 만들어두는 것이 좋다.

💡 생성자메소드 정의 시 코드의 낭비를 줄이기

  • 필드를 매개변수로 하는 생성자 메소드 만들기
    기본 생성자메소드 작성 후 우클릭 - source -generate Constructor using Field
  • Lombok 라이브러리를 이용하면 굳이 코드 작성으로 정의하지 않아도 @태그 만으로도 생성자가 만들어진다. ⇒ 소스코드 길이가 줄어든다.

0개의 댓글