[TIL] Java - 클래스

KwonSC·2021년 11월 14일
0

TIL - Java

목록 보기
1/5
post-thumbnail

클래스

  • 클래스는 객체를 만들기 위한 설계도이다.

클래스 작성 방법

  • Java 크래스의 내부는 아래와 같은 구조로 되어 있다.
public class 클래스명 { // 클래스 선언
   Data_Type 변수명; // 클래스 변수 선언
   public 클래스명 (파라미터1, 파라미터2, ...) {   
      // 생성자 구현
   }
      public Return_Type 메소드명 (파라미터1, 파라미터2, ...) {
      // 메소드 구현
   }
}

객체 생성과 메소드 호출

  • 객체란 실제로 존재하는 것

  • Java 프로그래밍에서 객체란 클래스 설계서대로 작성한 클래스의 속성에 특정한 ㄱ밧드을 대입하여 의미를 가지게 하는 것

  • Java 프로그래밍은 객체를 생성하고, 그 객체를 사용하는 것이다.

  • Java 프로그래밍 방법

    1. 구현하고자 하는 시스템에서 클래스를 도출한다.
    2. 클래스의 속성과 행동을 추출하여 클래스 설계서를 작성한다.
    3. 클래스 설계서를 기반으로 Java 언어를 이용하여 클래스를 작성한다.
    4. 클래스의 속성에 특정한 값을 대입하여 객체를 생성한다.
    5. 객체를 이용하여 메소드르 호출한다.
  • 키워드 new를 사용하여 객체 생성하기

클래스명 변수명 = new 클래스명();
  • 이미 만들어진 객체를 이용하여 필드와 메소드 호출하기
변수명.필드명;
변수명.메소드명(, ...);

메소드 오버로딩(Overloading)

  • 메소드 오버로딩이란?
    • 한 클래스 내에 비슷한 기능의 메소드를 같은 이름으로 여러 개 정의하는 것
  • 메소드 오버로딩의 조건
    • 메소드 이름이 같아야 한다.
    • 메소드 파라미터의 개수, 데이터 타입, 순서가 달라야 한다.
    • 메소드 리턴 타입과는 아무런 상관이 없다.

생성자

  • 생성자는 클래스를 이용하여 객체를 만들어 주는 작업자다.

  • 자동으로 만들어주는 기본 생성자

    • 모든 클래스는 객체를 생성할 수 있도록 최소한 하나의 생성자를 갖는다.
    • 클래스에 생성자가 하나도 없다면, 자동으로 기본 생성자가 추가된다.
    • 기본 생성자란, 매개변수가 없고 내용이 없는 생성자이다.
  • 파라미터 있는 생성자의 역할

    • 객체를 만들 때, 필드의 초기값을 세팅
  • this

    • 내 클래스에 있는 필드나 멤버 메소드에 접근하고 싶을 때 사용하는 키워드
  • 생성자 추가 시 주의점

    • 파라미터가 있는 생성자가 하나라도 있다면, 자동으로 기본 생성자를 만들지 않는다.
    • 추후에 클래스를 확장하게 될 수도 있으므로, 기본 생성자는 만들어 두는 것이 좋다.
  • 생성자 오버로딩

    • 초기값을 세팅해야 하는 데이터가 각각 다르다면, 생성자를 오버로딩한다.
  • this로 클래스 내의 다른 생성자 호출

    • 생성자가 여러 개 선언되어 있을 때, this 키워드르 이용하여 자기 클래스 내의 다른 생성자를 호출할 수 있다.
public Book(String author) {
   this.author = author;
}
public Book(String title, String author) {
   this(author);
   this.title = title;
}

package와 import

  • package관련 있는 클래스들의 집합이다.

  • 패키지 선언은 클래스 파일의 맨 위에 한 번만 작성

  • 패키지가 선언된 클래스는 패키지 이름으로 폴더가 만들어지고, 그 위치에 저장

    • .(dot)을 기준으로 하위 폴더가 생성
package 패키지명;
  • import 선언 방법

    • 사용하고 싶은 클래스의 경로를 적어준다.

    • package 선언문 다음, class 선언문 앞에 작성

    • import 선언은 여러 번할 수 있다.

      • 같은 패키지에 있는 여러 개의 클래스를 사용해야 하는 경우, *를 이용하여 한 번에 import 할수있다.
import 사용하고자_하는_패키지명.클래스명;
  • import 사용하기

    • 같은 패키지에 있는 여러 개의 클래스를 import 하는 경우

      • 여러 번 import 를 하는 방법
      • 묶어서 import 하는 방법
import com.Building;
import com.Student;
import com.*;

접근 제어자

  • public
    • 누구나 접근 가능한 필드와 멤버 메소드 선언
  • default
    • 같은 package 내의 클래스에서는 접근 가능한 필드와 멤버 메소드 선언
  • private
    • 다른 클래스에서는 절대 접근할 수 없는 필드와 멤버 메소드 선언
  • gettersetter
    • private 으로 선언된 필드를 접근하기 위한 public 메소드
    • setter 정의 시 리턴 타입은 void, 메소드명은 set + 변수명으로 사용
    • getter 정의 시 리턴 타입은 변수의 데이터 타입, 메소드 명은 get + 변수명으로 사용
    • 객체 지향 언어의 특징 중 하나인 Encapsulation(캡슐화)을 구현하기 위한 방법

참조 데이터형 변수

  • 기본 데이터형 변수는 변수가 만들어지는 공간에 바로 값이 저장된다.
  • 참조 데이터형 변수는 변수가 만들어지는 공간과 객체가 만들어지는 공간이 다르다.
    • 기본 데이터형 변수와 똑같은 공간에 변수가 만들어진다. -> Stack
    • 객체가 만들어지는 공간은 다른곳에 있다. -> Heap
    • 변수와 객체가 다른 공간에 만들어지기 때문에 객체는 참조주소값을 가지고 있고, 변수는 참조 주소값을 이용하여 객체를 찾아간다.

static

  • 객체를 생성하지 않고 클래스의 필드와 멤버 메소드를 호출하는 방법

  • static 키워드가 붙은 필드나 메소드는 클래스 이름을 구분자로 사용

    • 프로그램 내에서 사용하는 상수는 final static 으로 선언하여 사용
    • 프로그램 내에서 자주 사용되는 메소드는 static으로 선언하여 사용하는 것을 권장
  • static 키워드를 통해 생성된 정적 멤버들은 Heap 영역이 아닌 Static 영역에 할당되어 모든 객체가 공유하여 하나의 멤버를 어디서든지 참조할 수 있는 장점을 가짐

  • 하지만 Garbage Collector의 관리 영역 밖에 존재하기에 static영역에 있는 멤버들은 프로그램의 종료시까지 메모리가 할당된 채로 존재하게 됨

  • mainstatic을 사용하는 이유도 main함수가 메모리에 미리 올라가있어야 시작점인 main() 메소드를 호출할수있기때문에 static을 붙임

0개의 댓글