슬기로운 개발생활

온라인 자바 스터디 #5 - 클래스, 메소드, 생성자 정의, this, 객체 new 키워드

by coco3o
반응형

목표

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

학습할 것 (필수)

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

 

과제 (Optional)

  • int 값을 가지고 있는 이진 트리를 나타내는 Node 라는 클래스를 정의하세요.
  • int value, Node left, right를 가지고 있어야 합니다.
  • BinrayTree라는 클래스를 정의하고 주어진 노드를 기준으로 출력하는 bfs(Node node)와 dfs(Node node) 메소드를 구현하세요.
  • DFS는 왼쪽, 루트, 오른쪽 순으로 순회하세요.

클래스

클래스란 '객체를 정의해 놓은 것' 또는 클래스는 '객체의 설계도 또는 틀'이라고 정의할 수 있다.

클래스는 객체를 생성하는데 사용되며, 객체는 클래스에 정의된 대로 생성된다.

어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스(instance)라고 함 

객체 = 인스턴스

클래스의 정의 - 클래스란 객체를 정의해 놓은 것이다.
클래스의 용도 - 클래스는 객체를 생성하는데 사용된다.

자바에서는 어떤 프로그래밍이든 클래스 안에서 진행됨.(public static void main(String[] args)기능도 class안에 있음)

public class 클래스이름 {
	public static void main(String[] args) {
    	//프로그램 시작 시점
    }
}

클래스의 구조

클래스는 속성(멤버변수)과 기능(메소드)의 집합이라고 할 수 있다.

 

  • 이해를 돕기 위한 Tv클래스
class TV {
	//Tv의 속성(멤버변수)
    String color;	//색상
    boolean power;	//전원상태 (on/off)
    int channel;	//채널
    
    //Tv의 기능(메서드)
    void power() { power = !power; } 
    void channelUp() { ++channel; }
    void channelDown() { --channel; }
}

인스턴스의 생성과 사용

클래스로부터 인스턴스를 생성하는 방법은 여러 가지가 있지만 일반적으로는 다음과 같이 한다.

클래스명 변수명;			//클래스의 객체를 참조하기 위한 참조변수를 선언한다.
변수명 = new 클래스명();	//클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장한다.

Tv t;					   //Tv클래스 타입의 참조변수 t를 선언 
t = new Tv();			   //Tv인스턴스를 생성한 후, 생성된 Tv인스턴스의 주소를 t에 저장

new 연산자를 통해 Heap 영역에 데이터를 저장할 공간을 할당받고 그 공간의 참조값을 객체에 게 반환함으로써

클래스 타입의 인스턴스(객체)를 생성해주는 역할을 하는 것이다.

class Tv {
    //Tv의 속성(멤버변수)
    String color;	//색상
    boolean power;	//전원상태 (on/off)
    int channel;	//채널

    //Tv의 기능(메서드)
    void power() { power = !power; }
    void channelUp() { ++channel; }
    void channelDown() { --channel; }
}
public class TvTest {

    public static void main(String[] args) {
        Tv t;
        t = new Tv();
        t.channel = 10;
        t.channelUp();
        System.out.println("현재 채널은 " + t.channel + "입니다.");
    }
}

메소드 정의하는 방법

메소드(method)란?

어떤 문제를 처리하기 위한 방법을 소스 코드로 묶어두고 필요에 따라 동작하는 기능

보통 다른언어에는 함수라는 것이 별도로 존재한다. 하지만 자바는 클래스를 떠나 존재하는 것은 있을 수 없기

때문에 자바의 함수는 따로 존재하지 않고 클래스 내에 존재한다. 이 클래스 내의 함수를 메소드라고 부른다.

메소드를 사용하는 이유?

가끔 프로그래밍을 하다 보면 똑같은 내용을 자신이 반복해서 적고 있는 것을 발견할 때가 있다. 이 때가 바로 메소드가 필요한 때이다. 여러 번 반복해서 사용된다는 것은 언제고 또다시 사용할 만한 가치가 있는 부분이라는 뜻이다. 즉, 이러한 경우 이것을 한 뭉치로 묶어서 “어떤 입력값을 주었을 때 어떤 리턴값을 돌려준다”라는 식의 메소드를 작성하는 것이 현명한 일일 것이다.

 

 

메소드가 정상적으로 종료되는 경우는 다음과 같이 두 가지가 있다.

- 메서드의 블럭{ } 내의 마지막 문장까지 수행했을 때
- 메소드의 블럭{ } 내에 있는 문장을 수행 중 return문을 만났을 때

메소드 선언

리턴 타입(자료형 또는 void) 메소드명() {
	실행할 코드 작성;
    return; // 리턴 타입이 void일 경우 return 없음
}

위에서 봤듯이 메소드의 리턴 타입은 자료형 또는 void가 올 수 있고,

자료형이 리턴 타입으로 오면 메소드 자료형과 동일한 값의 return이 반드시 있어야 하고,

void는 return 값이 없다. 

 

return문은 현재 실행 중인 메소드를 종료하고 호출한 메소드로 되돌아가게 한다.

반환값이 없는 경우

return;

 

반환값이 있는 경우

return 반환값;

int add(int a, int b) {
	int result = a + b;
    return result;
}

생성자 정의하는 방법

자바 클래스에서 생성자란 객체가 메모리에 할당 될 때마다 자동으로 실행되는 메소드를 의미한다.

객체가 생성될 때 한 번 호출되는 메소드이며, 반환값이 없고 클래스명과 메소드명이 같다.

하나의 클래스에 여러 개의 생성자가 존재할 수도 있다.

모든 클래스는 생성자가 반드시 존재한다.

클래스 내부에 생성자가 하나도 없다면 컴파일러는 기본 생성자를 바이트 코드에 자동으로 추가시킨다.

Student인스턴스를 생성할 때, 기본 생성자를 사용한다면,

인스턴스를 생성한 다음에 따로 초기화 해주어야 하지만,

매개변수가 있는 생성자를 사용하면 동시에 원하는 값으로 초기화 할 수 있게 된다.


this 키워드 이해하기

자바에서 this는 '객체, 자기 자신'을 나타낸다.

주로 3가지 형태로 사용되고 있다.

 

1. 클래스의 속성과 생성자/메소드의 매개변수의 이름이 같은 경우

여기에서 this키워드는 객체 자신의 속성을 나타내게 되는 것

2. 클래스에 오버로딩된 다른 생성자 호출

같은 클래스에 오버로딩된 다른 생성자를 호출할때에도 this키워드가 사용된다.

 

3. 객체 자신의 참조값을 전달하고 싶을 때


 

반응형

블로그의 정보

슬기로운 개발생활

coco3o

활동하기