1. 객체 지향 언어란?
1.1 객체지향의 의미
객체 지향 언어는 객체를 중심으로 프로그래밍하는 언어이다. 즉, 객체를 이용하여 프로그램을 구현하고, 객체들 간의 상호작용을 통해 프로그램을 실행시키는 것이다. 객체란 데이터와 그 데이터를 처리하는 함수(메서드)를 하나로 묶어놓은 것이다. 객체는 클래스를 이용하여 만들어지며, 클래스는 객체를 정의하는 틀이다.
객체지향 언어의 특징
- 코드의 재 사용성이 높다
- 코드의 관리가 용이하다
- 신뢰성이 높은 프로그래밍을 가능하게 한다
- 제어자와 메서드를 이용하여 데이터를 보호하고 코드 중복이 적기 때문
사용자 정의 타입(user-defined type)
프로그래밍 언어에서 제공하는 자료형 외에 프로그래머가 서로 관련된 변수들을 묶어서 하나의 타입으로 새로 추가하는 것을 의미한다.
- 구조체
- 클래스( java )
2. 클래스와 객체
2.1 클래스
클래스란?
- 클래스는 “객체를 정의하는 틀” 이다. 객체는 클래스에 정의된대로 생성된다.
- 제빵틀 이라고 생각하면 된다.
- JDK에서는 유용한 클래스(JAVA API)를 기본적으로 제공하고 있다.
- Class Tv
class TV { String color; boolean power; int channel; void power(){power = !power;} void channelUp() {++channel;} void channelDown(){--channel;} }
- 해당 틀에서는 TV에 필요한건
색상
전기가 들어와 있는지
채널
등을 내포하고 있다.
- TV가 동작하는건
끄기와 켜기
채널 이동
이다.
2.2 객체 (인스턴스)
객체란?
- 클래스로부터 만들어진 인스턴스들을 객체라고 부른다 인스턴스와 객체는 비슷한 말이지만, 객체는 모든 인스턴스들을 아우르는 느낌이고 인스턴스는 어떤 클래스에 대한 인스턴스(객체) 느낌이라고 생각하면 된다.
클래스와 객체의 구분이 어렵다면?
Class : Tv 설계도 → 객체 : TV
2.3 객체의 구성 요소
2.1) 속성
- 멤버 변수, 특성, 필드, 상태
2.2) 기능
- 메서드, 함수
/ | TV | 전등 |
속성 | 크기, 제조사, 전압규격 등 | 색깔, 전압, 가격 등 |
기능 | TV켜기, TV끄기, 넷플릭스 틀기 등 | 크기, 켜기 |
2.4 객체의 생성 및 사용, 참조 변수
객체의 생성, 사용
new 클래스()
형식으로 사용하면 된다. 인스턴스(객체)가 생성되는 시점부터 객체의 메모리 공간이 생성된다. 클래스명 변수명 변수명 = new 클래스명(); Tv t; //Tv 클래스 타입의 참조변수 t를 선언 t = new Tv(); //TV 인스턴스를 생성한 후, 생성된 Tv인스턴스의 주소를 t에 저장 //실제 코드 class TV { String color; boolean power; int channel; void power(){power = !power;} void channelUp() {++channel;} void channelDown(){--channel;} } public class create { public static void main(String[] args) { TV t; t = new TV(); t.color = "black"; t.power = false; t.channel = 1; t.channelUp(); System.out.printf("현재 채널 : %d", t.channel); } //현재 채널 : 2
객체의 참조 변수
- 객체를 다루기 위해 사용되는 변수를 참조 변수라고 한다.
- 참조 변수는 객체의 주소를 저장한다.
예제
TV t1, t2; //참조변수가 생성된다. TV t1 = new TV(); //TV클래스의 인스턴스가 메모리의 빈 공간에 생성되고 참조변수는 해당 인스턴스를 가르킨다.
- 인스턴스는 참조변수를 통해서만 다룰 수 있으며, 참조변수 타입은 인스턴스의 타입과 일치해야만 한다.
객체 배열
객체 배열의 생성
TV[] TvArr = new TV[3]; //참조변수 배열(객체 배열) 을 생성
- 객체 배열을 생성하는 것은 그저 그 객체를 다루기 위한 참조 변수들이 만들어진 것 뿐이다
각각의 참조 변수들에 인스턴스를 생성해 주어야 비로소 의미가 있다.
//객체 생성 후 객체 배열의 각 요소에 저장 TvAarr[0] = new TV(); TvAarr[1] = new TV(); TvAarr[2] = new TV(); // 객체 배열 생성하자마자 각 요소에 저장하기 TV[] TvArr = {new TV(), new TV(), new TV()}; // 객체의 개수가 많을 경우 for문으로 초기화 TV[] TvArr = new TV[3]; for (int i = 0; i < TvArr.length; i++){ TvArr[i] = new TV(); }