쭈쌤
쭈쌤 Hello World

[Java] 클래스와 객체

크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[Java] 클래스와 객체≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

[Java] 클래스와 객체

객체지향 프로그래밍이란 객체가 중심이 되는 프로그래밍 패러다임을 일컷는 용어입니다.

객체 (Object)

  • 사전적 의미 : 어떠한 물건이나 대상
  • 프로그래밍에서의 의미 : 프로그램에서 표현하고자 하는 기능을 묶기 위한 단위

객체를 구성하는 단위

  • 객체를 이루는 것은 데이터기능이다.
  • 데이터는 변수로 표현된다.
    • 객체 안에 포함된 변수를 멤버변수 혹은 프로퍼티라 한다.
  • 기능은 메서드(=함수)로 표현된다.

클래스 (Class)

객체의 설계도 역할을 하는 프로그램 소스

공장에서 하나의 설계도를 사용하여 여러 개의 제품을 생산할 수 있는 것처럼 하나의 클래스를 통해 동일한 구조를 갖는 객체를 여러 개 생성할 수 있다.

class.png

game.png

클래스의 가장 기본적인 코드 형식

1
2
3
4
5
class 클래스이름 {
    // 변수들 선언부분

    // 메서드 정의부분
}

클래스 이름은 명사들의 조합으로 이루어지며 첫 글자는 대문자로 지정하는 것이 관례이다.

클래스를 통한 객체 생성하기

new 예약어를 사용한다.

1
클래스이름 변수이름 = new 클래스이름();

위와 같이 정의하면 변수는 클래스 안에 정의된 모든 기능을 부여받은 특수한 형태의 변수가 되는데 이를 객체라고 한다.

객체에게 부여된 기능은 점(.)을 통해 접근할 수 있다.

1
2
객체.멤버변수 = ;
객체.메서드();

클래스의 작성 패턴

  1. 변수만 정의
  2. 메서드만 정의
  3. 변수와 메서드를 함께 정의

객체라는 개념은 배열이 같은 종류의 변수들만 그룹화 하는 한계를 벗어나 서로 다른 종류의 변수를 그룹화 하는데서 출발한다. (이 상태를 C언어의 구조체라고 한다.)

그렇게 그룹화 해 놓은 변수들간의 관계를 구현하기 위해 메서드를 함께 포함하는 형태로 발전된 것이다.

변수만 정의한 클래스

SimpleMember.java

멤버변수만을 정의한 클래스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// public 클래스는 하나의 소스파일에서 단 하나만 존재할 수 있다.
class Member {
    String userName = "이름";
    String email = "이메일";
    int age = 0;
}

// public 클래스의 이름은 소스파일 이름과 동일해야 한다.
public class SimpleMember {
    public static void main(String[] args) {
        // 같은 클래스에서 생성된 두 개의 객체는 동일한 구조와 값을 갖는다.
        Member m1 = new Member();
        System.out.println(m1.userName);
        System.out.println(m1.email);
        System.out.println(m1.age);

        Member m2 = new Member();
        System.out.println(m2.userName);
        System.out.println(m2.email);
        System.out.println(m2.age);

        // 이렇게 생성된 객체들은 서로 개별적인 값을 갖도록 수정 할 수 있다.
        m1.userName = "민혁";
        m1.email = "mh@gmail.com";
        m1.age = 20;

        m2.userName = "철수";
        m2.email = "cs@gmail.com";
        m2.age = 19;

        System.out.println(m1.userName);
        System.out.println(m1.email);
        System.out.println(m1.age);

        System.out.println(m2.userName);
        System.out.println(m2.email);
        System.out.println(m2.age);
    }
}
출력결과
1
2
3
4
5
6
7
8
9
10
11
12
이름
이메일
0
이름
이메일
0
민혁
mh@gmail.com
20
철수
cs@gmail.com
19

메서드만 정의한 클래스

SimpleCalc.java

용도나 목적이 같은 메서드들을 별도의 클래스로 묶어둔다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Calc {
    // 일반적인 클래스에서 static은 특별한 경우에만 사용한다. (뒤에서 다룸)
    public int plus(int x, int y) {
        return x + y;
    }

    public int minus(int x, int y) {
        return x - y;
    }
}

public class SimpleCalc {
    public static void main(String[] args) {
        Calc c = new Calc();
        System.out.println(c.plus(1, 2));
        System.out.println(c.minus(10, 5));
    }
}

메서드와 변수를 함께 갖는 클래스

SimpleMessage

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class HelloWorld {
    /** 멤버변수 영역 */
    // 멤버변수의 스코프는 클래스 내의 모든 메서드에서 식별 가능하다.
    // 결국 멤버변수는 모든 메서드가 공유하는 전역 변수의 개념이 된다.
    String message;

    void sayHello() { System.out.println(message); }
    void setEng()   { message = "Hello Java"; }
    void setKor()   { message = "안녕하세요. 자바"; }
}

public class SimpleMessage {
    public static void main(String[] args) {
        HelloWorld hello = new HelloWorld();

        // 메서드의 호출
        hello.setEng();
        hello.sayHello();

        hello.setKor();
        hello.sayHello();
    }
}

SimpleAccount.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Account {
    /** 멤버변수 영역 */
    // 멤버변수의 스코프는 클래스 내의 모든 메서드에서 식별 가능하다.
    // 결국 멤버변수는 모든 메서드가 공유하는 전역 변수의 개념이 된다.
    // 메서드 안에서 파라미터나 일반 변수와 구분하기 위해
    // 멤버변수 앞에는 "this"를 적용할 수 있다.
    // --> this는 현재 객체라는 의미.
    String name;
    int age;

    String getName() { return this.name; }
    void setName(String name) { this.name = name; }

    int getAge() { return this.age; }
    void setAge(int age) { this.age = age; }

    void say() {
        System.out.println(this.getName());
        System.out.println(this.getAge());
    }
}

public class SimpleAccount {
    public static void main(String[] args) {
        Account user = new Account();
        user.setName("자바학생");
        user.setAge(20);
        user.say();
    }
}

크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[Java] 클래스와 객체≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

comments powered by Disqus