본문 바로가기

코딩 공부/Java

[Java] 15_클래스와 객체

클래스와 객체

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

객체 (object)

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

객체를 구성하는 단위

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

클래스 (Class)

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

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

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

    class 클래스이름 {
        // 변수들 선언부분
        // 메서드 정의부분
    }

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

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

new 예약어를 사용한다.

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

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

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

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

클래스의 작성 패턴

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

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

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

변수만 갖는 클래스

SimpleMember.java

// 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();    // m2라는 변수에 class배열의 시작주소값만 저장!
        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);


    }
}
출력결과
이름
이메일
0
이름
이메일
0
민혁
mh@gmail.com
20
철수
cs@gmail.com

메서드만 갖는 클래스

SimpleCalc

class Calc{
    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));
    }
}
출력결과
3
5

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

SimpleAccount.java

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;}

    // 변수를 하나가지고 get, set 두개의 메서드가 동작함을 알수가있다.

    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();
    }
}
출력결과
자바학생
20

SimpleMessage

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();
    }
}
출력결과
Hello java
안녕하세요. 자바

'코딩 공부 > Java' 카테고리의 다른 글

[Java] 18_MyBatis 설정하기  (0) 2020.05.12
[Java] 17_DAO 패턴  (0) 2020.05.12
[Java] 16_생성자  (0) 2020.05.08
[Java] 17_은닉성  (0) 2020.05.08
[Java] 14_재귀호출  (0) 2020.05.08