[JAVA] 클래스 작성 방법, 객체 생성, 메소드 호출, 오버로딩(Overloading), 생성자

HYEOB KIM·2022년 8월 8일
1

JAVA

목록 보기
5/9

클래스

  • 클래스는 객체를 만들기 위한 설계도입니다.
  • 흔히 클래스를 붕어빵 틀, 객체를 붕어빵이라고 비유합니다.

예를 들어, 건물이 있습니다.
이 건물을 표현하는 속성에는 건물명, 주소, 층수 등이 있습니다.
그리고 이 건물이 수행하는 행동에는 엘리베이터 운행 등이 있습니다.

위와 같이 속성행동을 설계하는 것이 클래스입니다.
그리고 이 클래스라는 설계도를 통해 여러 건물이라는 객체를 만들어낼 수 있습니다.

다른 비유를 들어볼까요?

영화 예매 사이트에는 회원이 존재합니다.
회원을 클래스로 만든다고 하면 필요한 속성행동은 무엇일까요?

  • 속성 : 이름, 전화번호, ID, PW, 마일리지, ...
  • 행동 : 영화 예매하기, 이벤트 참가하기, ...

이와 같이 클래스를 설계할 수 있고, 이 클래스를 통해 객체를 만들 수 있습니다.

클래스 작성 방법

public class <클래스명> {
	Data_Type <변수명>;
    
    public <클래스명>(파라미터1, 파라미터2, ...) {
    	// 생성자 내부 구현
    }
    
    public Return_Type <메소드명>(파라미터1, 파라미터2, ...) {
    	// 메소드 내부 구현
    }
}

메소드: Return Type

일을 수행한 결과값을 일을 시킨 곳에 알려주는 역할을 합니다.

  • 되돌려줄 값이 있다면 그 값에 해당하는 데이터 타입(int, double, String, ...)을 입력합니다.
public int withdraw() {
	return 10000;
}
  • 되돌려줄 값이 없다면 void를 입력합니다.
public void sparkle() {

}

메소드: 파라미터

메소드를 호출한 쪽에서 실제 기능을 수행할 메소드에게 알려주어야 하는 부가 정보가 있는 경우에 사용합니다.

아래의 코드에서 int money를 파라미터라고 합니다.

public void deposit(int money) {
	balance += money;
}

public void calculateSum(double num1, double num2){
	result = num1 + num2;
}

계좌 클래스 작성(예제)

public class Account {
	
	// 필드 작성
	String accountHolder;			// 예금주
	String accountNumber;			// 계좌번호
	int balance;					// 잔액
	
	// 생성자
	
	// 메소드
	public void deposit(int money) {	// 입금
		System.out.println(money + "원을 입금합니다.");
		balance += money;
	}
	
	public void withdraw(int money) {	// 출금
		System.out.println(money + "원을 출금합니다.");
		balance -= money;
	}
	
	public int showBalance() {	// 잔액 조회
		System.out.println("잔액 : " + balance + "원");
		return balance;
	}
}

객체 생성 및 메소드 호출

  • 객체란 현실 세계에 실제로 존재하는 것을 의미합니다.
  • 클래스 설계대로 작성한 클래스의 속성에 특정한 값들을 대입하여 의미를 가지게 하는 것입니다.

객체 생성 및 메소드 호출 방법

  • 키워드 new를 사용하여 객체를 생성할 수 있습니다.
<클래스명> <변수명> = new <클래스명>();

Student student = new Student();
Book book = new Book();
<변수명>.<필드명>;
student.name = "홍길동";

<변수명>.<메소드명>(파라미터1, ...);
student.calculateAverage();
book.searchBooks("Java");

계좌 클래스를 이용한 객체 생성 및 메소드 호출(예제)

앞서 생성한 계좌 클래스를 이용해 객체를 생성하고 메소드를 호출해보겠습니다.

public class AccountTest {

	public static void main(String[] args) {
		// 계좌 클래스를 이용해 account라는 Account 클래스 타입 객체 생성
		Account account = new Account();
		
        // 속성 정의
		account.accountHolder = "홍길동";
		account.accountNumber = "123-456789";
		account.balance = 10000;
		
        // 메소드 호출
		System.out.println("계좌 " + account.accountNumber + " ( 예금주 : " + account.accountHolder + " )");
		account.showBalance();
		
		account.deposit(20000);
		account.showBalance();
		
		account.withdraw(45000);
		account.showBalance();
		
	}
}

결과값은 아래와 같습니다.

계좌 123-456789 ( 예금주 : 홍길동 )
잔액 : 1000020000원을 입금합니다.
잔액 : 3000045000원을 출금합니다.
잔액 : -15000

메소드의 여러 가지 형태

만약 클래스 내에서 메소드를 아래와 같이 정의했다면,

public String formatTime(int hour, int minute) {}

아래와 같이 변수를 선언하며 호출할 수도 있습니다.

String timeInfo = clock.formatTime(5, 2);

메소드 오버로딩(Overloading)

한 클래스 내에 비슷한 기능의 메소드를 같은 이름으로 여러 개 정의하는 것을 의미합니다.

메소드 오버로딩의 조건

  • 메소드 이름같아야 합니다.
  • 메소드 파라미터개수, 데이터 타입, 순서가 달라야 합니다.
  • 메소드 리턴 타입이 다르면 다른 메소드로 인식합니다.

Overloading 클래스

public class Overloading {
  public void addition( int num1, int num2 ) {
    System.out.println( num1 + num2 );
  }
  public void addition( double num1, double num2 ) {
  	System.out.println( num1 + num2 );
  }
  public void addition( String str1, String str2 ) {
  	System.out.println( str1 + str2 );
  }
}

Overloading 메소드 호출

public class OverloadingTest
  public static void main( String[] args ) {
    Overloading overloading = new Overloading();

    overloading.addition(1000, 365);
    overloading.addition(4.3, 1.8);
    overloading.addition("ANT", "AND");
  }
}

생성자

생성자는 클래스를 이용하여 객체를 만들어주는 작업자입니다.
클래스라는 설계도에 따라 여러 객체를 만들 때 생성자를 통하게 됩니다.

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

만약 생성자가 하나라도 생성되어 있다면 기본 생성자를 생성하는 방식으로는 객체를 생성할 수 없습니다.

생성자 작성 방법

public <클래스명>(파라미터 변수, ... ) {
	// 필드 초기화
}

public Student() { ... }
public Student(String name) { ... }
public Student(String name, String id) { ... }

생성자를 통해 객체를 생성하는 방법

// 기본 생성자로 객체 생성
Student student = new Student();

// 생성자를 생성한 후 생성자를 통해 객체 생성
public Book(String title, int price) {
	this.title = title;
    this.price = price;
}

Book book = new Book("해리포터", 8000);

this
자신의 클래스에 있는 필드나 멤버 메소드에 접근하고 싶을 때 사용하는 키워드입니다.

생성자 오버로딩

  • 초기값을 세팅해야 하는 데이터가 각각 다르다면, 생성자를 오버로딩합니다.
  • 생성자에서 정의하지 않은 필드자동으로 초기값을 가지게 됩니다.
public class Book {
	String title;
    String author;
    int price;
    
    public Book( String author ) {
      this.author = author;
    }

    public Book( String title, String author ) {
      this.title = title;
      this.author = author;
    }

    public Book( String title, String author, int price ) {
      this.title = title;
      this.author = author;
      this.price = price;
    }
}

오버로딩된 생성자를 this를 통해 참조하도록 할 수 있습니다.
이때, 주의할 것은 this를 생성자의 첫 번째 라인에 둬야 한다는 것입니다.

public class Book {
	String title;
    String author;
    int price;
    
    public Book( String author ) {
      this.author = author;
    }

    public Book( String title, String author ) {
      this(author);
      this.author = author;
    }

    public Book( String title, String author, int price ) {
      this(author, title);
      this.price = price;
    }
}
profile
Devops Engineer

0개의 댓글