자바 공부6

윤현우·2022년 8월 24일
0

자바공부

목록 보기
6/6
post-thumbnail

📕객체지향언어 1-1


객체지향언어

실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 사물간의 상호작용으로 이루어져 있다.

즉, 프로그램을 여러개의 독립된 단위인 객체들의 모임으로 파악하고자 하는 것이다.

  • 실제 사물의 속성과 기능을 분석한 다음, 데이터(변수)와 함수로 정의함으로써 실제 세계를 컴퓨터 속에 옮겨 놓은 것과 같은 가상세계를 구현하고 이 가상세계에서 모의실험을 함으로써 많은 시간과 비용을 절약할 수 있다.

  • 객체지향이론은 상속, 캡슈화, 추상화 개념을 중심으로 점차 구체적으로 발전

객체지향언어의 특징

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

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

  3. 신뢰성이 높은 프로그래밍을 가능하게 한다.
    제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다.

  • 객체지향 개념을 학습할 때 재사용성과 유지보수 그리고 중복된 코드의 제고, 이 세가지 관점에서 보면 보다 쉽게 이해할 수 있을 것이다.

클래스와 객체

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

클래스의 정의 : 클래스란 객체를 정의해 놓은 것이다.
클래스의 용도 : 클래스는 객체를 생성하는데 사용된다.

객체의 사전적인 정의는 우리가 주변에서 볼 수 있는 책상, 의자, 자동차 같은 실제로 존재하는 사물들이 곧 객체이다.

  • 프로그래밍에서의 객체는 클래스에 정의된 내용대로 메모리에 생성된 것을 뜻한다.

객체의 정의 : 실제로 존재하는 것. 사물 또는 개념
객체의 용도 : 객체가 가지고 있는 기능과 속성에 따라 다름

유형의 객체 : 책상, 의자, 자동차, TV와 같은 사물
무형의 객체 : 수학 공식, 프로그램 에러와 같은 논리나 개념

클래스와 객체의 관계

예를 들면 제품 설계도와 제품과의 관계라고 할 수 있다.
ex) TV설계도(클래스), TV제품(객체)

클래스는 단지 객체를 생성하는데 사용될 뿐, 객체 그 자체는 아니다.
-> 우리가 원하는 기능의 객체를 사용하기 위해서는 먼저 클래스로부터 객체를 생성하는 과정이 선행되어야 한다.

클래스를 정의하고 클래스를 통해 객체를 생성하는 이유는 설계도를 통해 제품을 만드는 이유와 같다. 클래스를 한번만 잘 만들어 놓기만 하면, 매번 객체를 생성할 때마다 클래스로부터 객체를 생성해서 사용하기만 하면 되는 것이다.

JDK(Java Development Kit)에서는 프로그래밍을 위해 많은 수의 유용한 클래스(Java API)를 기본적으로 제공하고 있으며, 우리는 이 클래스를 이용해서 원하는 기능의 프로그램을 보다 쉽게 작성할 수 있다.

객체와 인스턴스

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

  • 인스턴스와 객체는 같은 의미이므로 두 용어의 사용을 엄격히 구분할 필요는 없지만, 위의 예에서 본 것과 같이 문맥에 따라 구별하여 사용하는 것이 좋다.

객체의 구성요소 (속성과 기능)

객체는 속성기능,두 종류의 구성요소로 이루어져 있으며, 일반적으로 객체는 다수의 속성과 다수의 기능을 갖는다.

즉, 객체는 속성과 기능의 집합이라고 할 수 있다. 그리고 객체가 가지고 있는 속성과 기능을 그 객체의 멤버(구성원, member)라 한다.

속성(property) : 멤버변수(member variable), 특성(attribute), 필드(field), 상태(state)
기능(function) : 메서드(method), 함수(function), 행위(behavior)

인스턴스의 생성과 사용


class Tv {
	//Tv의 속성(멤버 변수)
    String color;	// Tv색상
    boolean power;	// 전원상태(on/off)
    int channel;	// 채널
    
    //Tv의 기능(메서드)
    void power()	{ power != power ;}	// Tv를 켜거나 끄는 기능을 하는 메서드
    void channelUp()	{ ++channel; }	// Tv의 채널을 높이는 기능을 하는 메서드
    void channelDown()	{ --channel; }	// Tv의 채널을 낮추는 기능을 하는 메서드
}

class TvTest {
	public static void main(String args[]) {
    	Tv t;	// Tv 인스턴스를 참조하기 위한 변수 t를 선언
        t = new Tv();	// Tv 인스턴스를 생성
        t.channel = 7;	// Tv 인스턴스의 멤버변수 channel의 값을 7로 초기화
        t.channelDown();	// Tv 인스턴스의 메서드 channelDown()을 호출
        System.out.println("현재 채널은 " + t.channel + " 입니다.");
    }
}

// 실행결과
// 현재 채널은 6 입니다.
  1. Tv t;
  • Tv 클래스 타입의 참조변수 t를 선언
  • 메모리에 참조변수 t를 위한 공간이 마련된다.
  • 인스턴스가 생성되지 않았기 때문에 참조변수로 아무것도 할 수 없다.
  1. t = new Tv();
  • Tv클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장
  • 연산자 new에 의해 Tv클래스의 인스턴스가 메모리의 빈 공간에 생성된다. (주소 생성)
  • 멤버 변수는 각 자료형에 해당하는 기본 값으로 초기화된다.
  1. t.channel = 7;
  • 참조변수 t에 저장된 주소에 있는 인스턴스의 멤버변수 channel에 7을 저장
  • 인스턴스의 멤버변수(속성)을 사용하려면 '참조변수.멤버변수'와 같이 사용
  1. t.channelDown();
  • 참조변수 t가 참조하고 있는 Tv인스턴스의 channelDown메서드를 호출

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

객체 배열

  • 많은 수의 같은객체를 다뤄야할 때, 배열로 다루면 편리
Tv tv1, tv2, tv3;

3개의 클래스가 같은 객체를

Tv[] tvArr = new Tv[3];

으로 배열을 만들 수 있다.

  • 이 객체 배열은 정확히는 객체의 주소를 저장
  • 객체 배열만 생성하는 것은 참조변수가 만들어진 것일 뿐, 아직 객체가 저장되지 않음
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();

이처럼 객체를 생성해야 한다.

하지만 여러 종류의 객체를 하나의 배열에 저장할 수 있는 방법도 있다.

profile
개발자가 되는 그날까지

0개의 댓글