본문 바로가기
스터디/[white-ship] 자바 스터디(study hale)

5주차 과제: 클래스

by doyoungKim 2021. 1. 1.

목표

자바의 Class에 대해 학습하세요.

학습할 것 (필수)

  • 클래스 정의하는 방법
  • 객체 만드는 방법 (new 키워드 이해하기)
  • 메소드 정의하는 방법
  • 생성자 정의하는 방법
  • this 키워드 이해하기

마감일시

2020년 12월 19일 토요일 오후 1시까지.


 

메소드 정의하는 방법

가장 유명한 메소드는 다음과 같다.

    public static void main(String[] args) {

    }

이름은 main 이고 메소드가 실행되면 중괄호 안에 있는 내용이 순차적으로 실행된다.

    public static void main(String[] args) {
        String myName = "doyoung";
        System.out.println(myName);
    }
// 실행결과
// doyoung

 

메소드는 왜 이렇게 생긴 것일까?

  1.  main 이라는 글자 오른쪽에는 소괄호는 무엇이고 String[] arg는 무엇일까?
  2.  public, static 그리고 void 는 무엇이고 의미하는 바는 무엇일까?
  3.  이름은 main 인데 어떤 식으로 작성해야 하는 것 일까?

1. main 이라는 글자 오른쪽에는 소괄호는 무엇이고 String[] arg는 무엇일까?

main 메소드와 비슷한 메소드를 하나 만들어 보았다.

    public static void helloByName(String name) {
        System.out.println("Hello my name is " + name);
    }
    public static void main(String[] args) {

        String doyoungName= "doyoung";
        String illyName= "illy";

        helloByName(doyoungName);
        helloByName(illyName);

    }
// 실행결과
// Hello my name is doyoung
// Hello my name is illy

 

여기서

helloByName(doyoungName);

는 메소드 helloByName 을 호출 하는 호출 문이다.

호출을 하게 되면 helloByName 중괄호 부분이 실행되어 콘솔에 찍히게 되는 것이다.

콘솔 결과

결과가 각각 doyoung 과 illy 가 찍혔는데, 이 문자들은 호출 하기 전에 선언하였고 호출 할 때, 변수를 소괄호 안에 넣어서 호출 했다.

즉, 호출 할 때, 메소드 구현부에서 실행되는 String name 변수들이 매개변수(parameter) 라고 불린다.

외부로 부터 어떤 변수를 전달 받을 것인지 어떤 타입일 것인지 를 의미한다.

여기서는 외부로 부터 String 타입의 name 이라는 변수에 값을 전달 받아 콘솔에 찍는 기능을 하는 메소드를 만든 것이다.

메소드의 이름과 매개변수를 통해서 호출 하게 되는 데, 메소드 이름 과 매개변수를 메소드 시그니처 라고 표현하기도 한다.

2. public, static 그리고 void 는 무엇이고 의미하는 바는 무엇일까?

public

은 접근 제어자 중의 하나이다.
접근 제어자는 변수, 메소드, 클래스에 대한 접근, 호출을 제어 하는 것이다.

public

접근을 제한하지 않음

protected

동일한 패키지 내에 존재하거나 파생클래스에서만 접근 가능

default

아무런 접근 제한자를 명시하지 않으면 default 값이 되며, 동일한 패키지 내에서만 접근이 가능

private

자기 자신의 클래스 내에서만 접근이 가능

 

static

은 메모리 영역의 위치를 정한다.

static 이라고 명시하면 메모리 영역의 위치가 static 이고 명시하지 않으면 heep 이 된다.

static

heep

Garbage Collector 관리

X

O

생성 시기

프로그램 실행

인스턴스화

죽음 시기

프로그램 종료

오랜 시간 참조 X

static 일 경우, 프로그램 실행 부터 종료까지 언제든 사용 할 수 있는 메모리 영역에 위치한다.

하지만 heep 일 경우, 인스턴스화가 되어야지만 사용할 수 있는 메모리 영역에 위치한다.

지금 사용하는 예시가 모두 static 인 이유는 아직 인스턴스화를 배우지 않아서 이다. 아래의 클래스 부분에서 다뤄볼 예정이다.

void

void 를 해석하면 공허함 이라는 뜻이 나온다. 왜냐하면 void 자리는 메소드가 주는 값의 종류를 의미한다.
void 일 경우는 아무런 값을 주지(return) 않는다. 를 의미한다.

예를 들어서 다음 과 같이 내 이름이 들어간 이메일을 만드는 기능을 하는 메소드를 만들었다.

    public static String generateNaverMailByName(String name) {
        return name + "@naver.com";
    }

이번엔 void 대신 String 이니 대입연산자를 이용해서 String 변수에 할당 할 수 있는 것이다.

String doyoungNaverEmail = generateNaverMailByName(doyoungName);
// doyoung@naver.com

3. 이름은 main 인데 어떤 식으로 작성해야 하는 것 일까?

  1. 첫번째 문자는 소문자 영어여야 한다.
  2. 카멜 케이스를 사용해야한다. (getName)

클래스 정의하는 방법

클래스는 데이터와 기능(메소드) 두 가지로 이루어져 있다.

  • 데이터(data): 프로그램 상에서 유지하고 관리해야 할 데이터
  • 기능(method): 데이터를 처리하고 조작하는 기능

은행계좌 관련된 데이터와 기능을 모아 클래스를 하나 만들어 보았다.

이는 잔액 이라는 데이터를 가지고있고, 입금, 출금, 잔액확인을 할 수 있는 기능이 있다.

public class BankAccount {
    private int balance = 0;

    public int deposit(int amount) {
        balance += amount;
        return balance;
    }

    public int withdraw(int amount) {
        balance -= amount;
        return balance;
    }

    public int checkMyBalance() {
        System.out.println("잔액 : " + balance);
        return balance;
    }
}

해당 클래스를 바로 사용할 수 있지는 않다.

사용하려면 메모리가 할당 되어야 하는데, 할당 시키기 위해서는 static 이나 인스턴스화를 해야한다.

위에서 static 에 대한 설명은 했으니 인스턴스화를 설명해 보자면,

 

설계도를 실체로 만드는 것을 의미한다.

 

과정은 다음과 같다.

BankAccount bankAccount = new BankAccount();

new 라는 키워드와 생성자를 호출 하면 된다.

기본적으로 생략이 되어있지만 생성자는 하나씩 가지고 있다.

여기서 생략된 생성자는 다음과 같다.

    public BankAccount() {

    }

이 생성자를 통해서 실체가 되는 것인데 실체가 되는 과정속에서 데이터의 값을 할당 할 수 있고 그것을 초기화 라고 부른다.

예를 들어서 계좌의 이름을 할당하면서 실체로 만들 때는 다음과 같은 생성자를 만들 수 있다.

먼저 name 이라는 데이터를 추가하고

private String name;
public BankAccount(String name) {
	this.name = name; 
}

매개변수로 부터 계좌이름을 받아와서 실체화 하는 것이다.

이 때 매개변수의 이름과 클래스 내의 데이터 와 이름이 같기 때문에, 구분을 하기 위해서

이 클래스의 name 이라는 의미로 this. 를 붙인다.

따라서 다음과 같이 인스턴스화 할 수 있다.

다른 말로는 객체를 생성한다고도 한다.

BankAccount bankAccount = new BankAccount("doyoung");
728x90

'스터디 > [white-ship] 자바 스터디(study hale)' 카테고리의 다른 글

4주차 과제: Stack  (0) 2021.01.02
4주차 과제: Queue  (0) 2021.01.02
5주차 과제: BinaryTree 이론  (0) 2021.01.01
7주차 과제: 패키지  (0) 2021.01.01
5주차 과제: BinaryTree 실습  (0) 2021.01.01

댓글