보통사람

[Study-5주차] 클래스 본문

Study

[Study-5주차] 클래스

pej4303 2020. 12. 13. 15:21
  • 목표

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

  • 학습할 것 (필수)

    • 클래스 정의하는 방법

    • 객체 만드는 방법 (new 키워드 이해하기)

    • 메소드 정의하는 방법

    • 생성자 정의하는 방법

    • this 키워드 이해하기

  • 과제 (Optional)

    • int 값을 가지고 있는 이진트리를 나타내는 Node라는 클래스를 정의하세요.

    • int value, Node left, right를 가지고 있어야 합니다.

    • BinrayTree라는 클래스를 정의하고 주어진 노드를 기준으로 출력하는 bfs(Node node)와 dfs(Node node) 메소드를 구현하세요.

    • DFS는 왼쪽, 루트, 오른쪽 순으로 순회하세요.

 

1. 클래스(Class)

 

  • 객체를 정의한 것으로 객체의 설계도, 객체를 생성하기 위한 틀이라고 생각하면 됨

  • 사용 용도는 객체를 생성하는데 사용됨 (클래스 ≠ 객체)

  • 클래스를 통해서 객체를 만드는 이유는 설계도를 통해서 제품을 만드는 이유와 같음 고민 없이 설계도대로만 만들면 되기 때문에

  • 대문자로 시작하며 변수(속성)와 메소드(기능)로 구성되어 있고 'public class'가 있는 경우 소스 파일의 이름과 반드시 같아야 함

  • 클래스 정의하는 방법

class 클래스명 {
}
  • 소스파일(*. java)과 다르게 클래스 파일(*. class)은 클래스마다 만들어짐

package com.study.java.week5;

public class HelloClass {}

class HelloClass2 {}

class HelloClass3 {}

만들어진 클래스파일들

  • 클래스 구조

package com.study.java.week5;

public class TestClass {
    public String myName;                        // instance 변수
    public static String className;              // static 변수(=클래스 변수, 공유 변수)
    
    public static void printSatic() {            // static 메소드  
        System.out.println("static 메소드 입니다.");
    }

    public void print() {                        // instance 메소드
        String localName = "인스턴스 메소드";     // 지역 변수
        System.out.println(localName +"입니다.");
    }
    
    public static void main(String[] args) {
        TestClass.printSatic();
        System.out.println(TestClass.className);
    }
}

클래스 구조
출처 - Java의 정석

2. 객체(Object)와 인스턴스(Instance)

 

  • 객체와 인스턴스는 같은 의미이지만 객체가 더 포괄적인 의미를 가짐 ( 인스턴스 ⊂ 객체 )
  • 인스턴스화 (Instantiate) : 클래스로부터 객체를 만드는 과정

  • 인스턴스 : 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 함

  • 인스턴스는 참조변수를 통해서만 다룰 수 있으며 참조 변수의 타입은 인스턴스의 타입과 일치해야 함

예) TestClass t = new TestClass();

t는 인스턴스이다. (X)  
t는 객체이다. (O)
t는 TestClass의 객체이다. (X)
t는 TestClass의 인스턴스이다. (O)
  • 인스턴스 생성 과정

    • 연산자 new에 의해 TV클래스의 인스턴스가 메모리에 생성됨

    • 대입 연산자(=)에 의해서 생성된 객체의 주소 값이 tv 참조 변수에 저장됨

    • 참조 변수 tv가 TV 인스턴스를 '가리키고 있다' 또는 '참조하고 있다'라고 표현함

    • 참조 변수는 하나의 주소 값만 저장될 수 있음

      • 하나의 인스턴스를 여러개의 참조 변수가 참조(O)

      • 여러 인스턴스를 하나의 참조변수가 참조(X)

인스턴스 생성 과정

 

3. 메소드(Method)

 

  • 특정 작업을 수행하는 명령문의 집합을 의미함

  • 메소드를 이용하면 코드 재사용을 할 수 있으며 중복된 코드의 제거도 가능함

  • 메소드를 정의하는 방법

    • 매개변수는 여러개가 될 수 있지만 반환값은 하나의 값만 허용됨

    • 모든 메소드에는 return문은 반드시 있어야 하며 반환타입이 void인 경우에는 생략해도 됨(컴파일러가 자동 추가함) 

접급제어자 반환타입 메소드 이름 (타입 변수명, ...) {    // 선언부(Method Header)
    // 구현부(Method Body)
}

public void print(String str) {
    System.out.println(str);
}

public String print(String str) {
    return str;
}

 

4. 생성자(Constructor)

 

  • 인스턴스가 생성될 때 호출됨

  • 인스턴스 변수들을 초기화 작업 또는 생성시 실행되어야 할 작업을 수행함

  • 클래스마다 생성자가 있으며 따로 추가하지 않아도 매개변수가 없는 기본생성자를 컴파일러가 추가해줌

  • 생성자의 조건

    • 클래스 이름과 생성자 이름이 동일해야 함

    • 반환값이 없음

접근제어자 생성자명 () {

}
package com.study.java.week5;

public class TestClass {
    public String myName;                        // instance 변수
    
    public TestClass() {                         // 기본 생성자 : 없으면 컴파일러가 자동 추가
        
    }
    
    public TestClass(String myName) {            // 매개변수가 있는 생성자
        this.myName = myName;
    }
}

 

5. this(), this

 

  • this

    • 인스턴스 자신을 가리키는 참조변수로 인스턴스의 주소가 저장되어 있음

    • 모든 인스턴스 메소드에 지역변수로 숨겨진 채 존재함

  • this(), this(매개변수)

    • 생성자를 의미함

    • 같은 클래스의 다른 생성자를 호출 할 때 사용하며 반드시 첫줄에 나와야 함

 

※  참조

 

Java의 정석

www.tcpschool.com/java/java_class_intro

'Study' 카테고리의 다른 글

[Study-7주차] 패키지  (0) 2020.12.29
[Study-6주차] 상속  (0) 2020.12.22
[Study-4주차] 제어문  (0) 2020.12.07
[Study-3주차] 연산자  (0) 2020.11.28
[Study-2주차] 자바 데이터 타입, 변수 그리고 배열  (0) 2020.11.21