본문 바로가기
코딩공부/자바

자바의 정석(6) - 자바의 다섯 번째 이야기, 객체지향(1)

by 에반셀린 2023. 2. 8.

*이 글은 개인적인 공부/기록 목적으로 올립니다.

부족하다고 느껴질 수 있는 글이니 양해 부탁드립니다.*

 

참고도서

http://www.yes24.com/Product/Goods/24259565

 

Java의 정석 - YES24

최근 7년동안 자바 분야의 베스트 셀러 1위를 지켜온 `자바의 정석`의 최신판. 저자가 카페에서 12년간 직접 독자들에게 답변을 해오면서 초보자가 어려워하는 부분을 잘 파악하고 쓴 책. 뿐만 아

www.yes24.com


 객체지향이란

 객체지향이라는 단어는 개발자라면 많이 들어봤을 단어이다. 객체지향이라는 뜻은 이미 옛날부터

쓰이고 있었던 방법이였고 대중적으로 인기가 많아진 가장 큰 이유는 지금 우리가 공부하고 있는

'JAVA'라는 언어 덕분에 객체지향이 유명해졌다.

 

 객체지향은 크게 3가지의 특징을 가지고 있다.

 

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

-> 클래스를 정의하고 상속이라는 기능을 통해 기존에 작성된 코드를 보다 쉽게 이용하여 프로그래밍을 할 수 있다.

 

2. 코드의 관리가 쉬워졌다.

-> 빠르게 기술이 발전하는 만큼 여러 기술들이 새롭게 출시되고 있는 요즘 시대에 객체지향은 코드가 변경되면

관련된 코드들도 자동적으로 변경이 되기 때문에 프로그래밍만 잘한다면 유지보수에 큰 힘을 들이지 않고도

프로그래밍을 할 수 있다.

 

3. 신뢰성이 높은 프로그램의 개발을 가능하게 한다.

-> 자바의 기술중 '제어자'와 '메서드'를 이용하여 중요한 데이터를 보호하고 코드의 중복을 제거하여

코드의 불일치로 인한 오류를 방지할 수 있다.

 

 객체지향 개념을 잘 이해하면 앞으로 자바를 공부할 때 조금 더 이해하기

쉬울 수 있기 때문에 객체지향의 개념과 특징을 잘 기억하도록 한다.


클래스와 객체

 클래스란 객체를 정의해 놓은 장소를 말하며 객체를 생성하는 데 사용된다.

객체는 실제로 존재하는 것을 말하는데 일반적으로 자동차나 TV와 같은 사물이 객체를 뜻하고

용도는 객체의 속성과 기능에 따라 달라진다.

프로그래밍에서 객체를 생성하면 클래스에 정의된 내용대로 메모리에 객체가 생성된다.

 

 둘을 비유하자면 클래스는 설계도를 뜻하며 객체는 설계도에 의해 만들어진 사물로 비유할 수 있다.

클래스 객체
제품 설계도 제품
자동차 설계도 자동차
빵공장

 

객체를 표현하면 인스턴스라는 단어가 많이 언급된다. 사실 객체와 인스턴스는 같다고 볼 수 있다.

용어를 구분해서 말하는 것이 아닌 객체는 일반적인 의미로 사용되고

인스턴스는 특정 클래스의 객체라는 것을 강조할 때 사용된다.

 클래스로부터 인스턴스를 생성할 때 '인스턴스화'라고 한다.


 객체의 구성요소

 객체는 속성과 기능으로 이루어져 있다. TV를 예로 든다면 TV의 속성에는 크기, 높이, 색상등을 말하고

기능에는 전원 on/off, 볼륨up/down등과 같이 속성과 기능이 존재한다.

 

 이처럼 객체의 속성과 기능을 파악하여 속성은 변수로, 기능은 메서드로 정의할 수 있다.

class Tv {
	// 변수
	String color;     // 색상
    String power;  // 전원상태(on/off)
    int cannel;        // 채널

	// 메서드
    void power() {power = !poerw;}  // 전원on/off
    void channelUp {channel++;}      // 채널 Up
    void channelDown {channel--;} // 채널 Down
}

 인스턴스의 생성과 사용

 이전에 Tv클래스를 정의하였는데 이제 Tv클래스를 인스턴스화하여

Tv인스턴스를 생성하는 방법에 대해 알아보고자 한다.

 

 먼저 생성하려는 인스턴스의 타입의 참조 변수를 선언하고

다음으로  new 연산자를 이용하여 객체를 생성하고

new 연산자가 반환하는 생성된 객체의 주소가 참조 변수의 저장되게 하면 된다.

 

 new 연산자는 인스턴스를 생성할 클래스를 읽어서 인스턴스 생성에 필요한 메모리를

계산한 다음 메모리의 빈 공간을 찾아 객체를 생성한다. 그리고 생성된 객체의 메모리 주소를 반환한다.

그러면 생성된 인스턴스를 참조 변수로 다룰 수 있게 된다.

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

Tv t;
t = new Tv();

// 한번에 사용 가능
Tv t = new Tv();

참조 변수는 인스턴스를 다룰 수 있는 유일한 방법이기 때문에

참조 변수가 없으면 인스턴스를 사용할  수 없다.

Tv t1 = new Tv();
Tv t2 = new Tv();

t2 = t1;
t1.channel = 7;

System.out.println(t1.channel);
System.out.println(t2.channel);

다음과 같이 2개의 Tv인스턴스를 생성했을 때 참조 변수 t1의 값이 t2에 저장이 된다.

t1의 주소값이 100인데 t2에도 t1의 값이 저장되었기 때문에 100이 저장된다.

이렇게 되면 t2는 기존에 참조하고 있던 인스턴스를 다룰 수 없고 t1이 참조하고 있던

인스턴스를 다룰 수 있게 된다.


 오늘부터 자바의 꽃이라 불리는 객체지향에 대해서 알아보았다.

사실 이번에 공부하면서 간단하게 적었지만 앞으로 계속해서 공부하게 될 부분들이

어마어마하게 많기 때문에 계속해서 공부하면서 정리해서 올려보도록 노력해보겠다.