본문 바로가기

Java

[Java] 클래스, 객체

객체지향언어

기존의 프로그래밍언어와 다른 전혀 새로운 것이 아니라, 기존의 프로그래밍 언어에 몇가지 새로운 규칙을 추가한 보다 발전된 형태의 것.

※ 특징

1. 코드의 재사용성이 높다. 

   - 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.

2. 코드의 관리가 용이하다. 

   - 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.

3. 신뢰성이 높은 프로그래밍을 가능하게 한다. 

   - 제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 

     코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다.




클래스와 객체

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

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

클래스와 객체의 관계는 제품 설계도와 제품의 관계라고 할 수 있으며, 클래스는 단지 객체를 생성하는데 사용될 뿐, 객체 그 자체가 아니다.


변수 - 하나의 데이터를 저장할 수 있는 공간

배열 - 같은 종류의 여러 데이터를 하나의 집합으로 저장할 수 있는 공간

구조체 - 서로 관련된 여러 데이터를 종류에 관계없이 하나의 집합으로 저장할 수 있는 공간

클래스 - 데이터와 함수의 결합(구조체 + 함수)



객체와 인스턴스

클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화라고 하며, 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 한다.

인스턴스는 객체와 같은 의미이지만, 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 가지고 있으며, 인스턴스는 어떤 클래스로부터 만들어진 것인지를 강조하는 보다 구체적인 의미를 가진다.




객체의 구성요소

객체는 속성과 기능으로 이루어져 있으며, 객체가 가지고 있는 속성과 기능을 그 객체의 멤버(member)라고 한다.

 속성(property) 

 멤버변수(member variable), 특성(attribute), 필드(field), 상태(state)

 기능(function)

 메서드(method), 함수(function), 행위(behavior)




인스턴스의 생성과 사용

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
class Tv {
    String color;
    boolean power;
    int channel;
    
    void power() {
        power = !power;
    }
    void channelUp() {
        ++channel;
    }
    void channelDown() {
        --channel;
    }
}
 
public class _01_TvTest {
    
    public static void main(String[] args) {
        Tv t;
        t = new Tv();
        t.channel = 7;
        t.channelDown();
        System.out.println("현재 채널은 " + t.channel + "입니다.");
    }
}
cs


1. Tv t;

Tv 클래스 타입의 참조변수 t를 선언한다. 메모리에 참조변수 t를 위한 공간이 마련된다. 

아직 인스턴스가 생성되지 않았으므로 참조변수로 아무것도 할 수 없다.



2. t = new Tv();

new 연산자에 의해 Tv클래스의 인스턴스가 메모리의 빈 공간에 생성된다. 

멤버 변수는 각 자료형에 해당하는 기본값으로 초기화되며, 주소가 0x100인 곳에 생성되었다고 가정하면 아래와 같다.



대입 연산자에 의해서 생성된 객체의 주소 값이 참조변수 t에 저장된다. 

참조변수 t를 통해 Tv 인스턴스에 접근할 수 있다. 인스턴스를 다루기 위해서는 참조변수가 반드시 필요하다.



3. t.channel = 7;

참조변수 t에 저장된 주소에 있는 인스턴스의 멤버변수 channel에 7을 저장한다. 



4. t.channelDown();

참조변수 t가 참조하고 있는 Tv 인스턴스의 channelDown 메서드를 호출한다. 



5. System.out.println("현재 채널은 " + t.channel + " 입니다.");

참조변수 t가 참조하고 있는 Tv 인스턴스의 멤버변수 channel에 저장되어 있는 값을 출력한다.



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









참고자료

자바의 정석

'Java' 카테고리의 다른 글

[Java] 오버로딩과 오버라이딩  (0) 2019.01.01
[Java] 변수, 메서드  (0) 2018.12.30
[Java] 배열  (0) 2018.12.30
[Java] 변수  (0) 2018.12.30
[Java] Java 개요  (0) 2018.12.30