Search

클래스와 객체

클래스와 객체의 정의와 용도

클래스의 정의 객체를 정의해 놓은 것 클래스의 용도 객체를 생성하는 데 사용
객체의 정의 실제로 존재하는 것. 사물 또는 개념 객체의 용도 객체가 가지고 있는 기능과 속성에 따라 다름 유형의 객체 책상, 의자, 자동차, TV와 같은 사물 무형의 객체 수학공식, 프로그램 에러와 같은 논리나 개념
제품(객체)를 생성하기 위해서는 설계도(클래스)가 필요하고, 잘 만들어놓은 설계도만 있으면 언제든지 제품(객체)를 만드는 것은 쉬운 일
JDK(Java Development Kit)은 프로그래밍을 위한 많은 클래스(Java API)를 제공

객체와 인스턴스

인스턴스화(Instantiate) : 클래스로부터 객체를 만드는 과정
인스턴스(Instance) : 클래스로부터 만들어진 객체
ex) TV 클래스로부터 만들어진 객체(TV)
객체와 인스턴스는 같은 의미이긴 하나...
객체 : 모든 인스턴스를 대표하는 포괄적인 의미
ex) 책상은 객체
인스턴스 : 어떤 클래스로부터 만들어진 것인지 강조하는 구체적인 의미
ex) 책상은 책상 클래스의 인스턴스

객체의 구성 요소 - 속성과 기능

객체의 구성 요소 : 속성 & 기능
객체는 다수의 속성과 다수의 기능으로 이루어져 있는, 속성과 기능의 집합
객체가 가지고 있는 속성과 기능 → 객체의 멤버(member)
객체를 정의한 클래스모든 속성과 기능이 정의되어 있음.
속성과 기능을 의미하는 여러 용어
속성(property) 멤버변수(member variable), 특성(attribute), 필드(field), 상태(state) 기능(function) 메소드(method), 함수(function), 행위(behavior)
TV 클래스
class TV { // 속성(변수) String coclor; // 색깔 boolean power; // 전원 상태 int channel; // 채널 // 기능(메소드) void power() { power = !power; } void channelUp() { channel++; } void channelDown() {channel--; } }
Java

인스턴스의 생성과 사용

클래스명 변수명; // 클래스의 객체를 참조하기 위한 참조변수 선언 변수명 = new 클래스명(); // 클래스 객체 생성 후, 객체 주소를 참조변수에 저장 TV t; t = new TV();
Java
인스턴스를 사용하려면, 해당 인스턴스 클래스의 참조변수가 필요
TvTest.java
인스턴스는 참조 변수를 통해서만 다룰 수 있으며, 참조변수의 타입은 인스턴스의 타입과 일치해야 한다.
같은 클래스에서 생성되었어도, 각 인스턴스의 속성(멤버변수)은 서로 다른 값 유지가 가능 메소드의 내용은 모든 인스턴스에 대해 동일
TvTest2.java
참조변수에는 하나의 값(주소)만 저장 가능 둘 이상의 참조변수가 하나의 인스턴스를 참조하는 것은 가능하지만, 하나의 참조변수로 여러 개의 인스턴스 참조는 불가능
TvTest3.java

객체 배열

객체 배열 : 참조변수들을 하나로 묶은 참조 변수 배열
많은 수의 객체를 다룰 때 배열로 다루는 것이 편하며, 객체 역시 배열로 다루는 것이 가능
객체 배열 안에는 객체의 주소가 저장됨.
TV tv1, tv2, tv3; // 객체 배열 생성 (기본값으로 초기화됨) TV[] tvArr = new TV[3]; // 길이가 3인 TV 타입의 참조변수 배열 // 배열 생성 후, 객체를 생성해서 배열의 각 요소에 저장하는 것이 필요 tvArr[0] = new TV(); tvArr[1] = new TV(); tvArr[2] = new TV(); // 초기화 블럭을 사용해서 간단히 TV[] tvArr = { new TV(), new TV(), new TV() }; // 객체 수가 많을 때는 for 문 사용 TV[] tvArr = new TV[100]; for (int i=0; i < tvArr.length; i++) { tvArr[i] = new TV(); }
Java
TvTest4.java

클래스의 프로그래밍 관점적 정의

변수 하나의 데이터를 저장할 수 있는 공간 배열 같은 종류의 여러 데이터를 하나의 집합으로 저장할 수 있는 공간 구조체 서로 관련된 여러 데이터를 종류에 관계없이 하나의 집합으로 저장할 수 있는 공간 클래스 데이터와 함수의 결합(구조체+함수)
함수는 주로 데이터를 가지고 작업하기 때문에 관계가 깊음.
→ 자바에선 변수(데이터)와 함수를 하나의 클래스에 정의하여 함께 다룰 수 있게 함.
자바에서 String 클래스문자열을 다룸.
문자열과 문자열을 다루는 데 필요한 함수들을 함께 묶기 위해 → 서로 유기적으로 연결되어 더 간단한 작업이 됨.
public final class String implements java.io.Serializable, Comparable { private char[] value; // 문자열을 저장하기 위한 공간 public String replace(char oldChar, char new Char) { char[] val = value; // 같은 클래스 내의 변수를 사용해서 작업 } }
Java

클래스의 사용자 정의 타입(user-defined type)

프로그래밍 언어에서 제공하는 기본 자료형 외에, 서로 관련된 변수들을 묶어서 하나의 타입을 새로 추가하는 것
// 비겍체지향적 콬드 int hour1, hour2, hour3; int minute1, minute2, minute3; float second1, second2, second3; int[] hour = new int[3]; int[] minute = new int[3]; float[] second = new float[3]; // 객체지향적 코드 class Time { int hour; int minute; float second; } Time t1 = new Time(); Time t2 = new Time(); Time t3 = new Time(); Time[] t = ne Time[3]; t[0] = new Time(); t[1] = new Time(); t[2] = new Time();
Java
객체지향 언어의 장점
제어자와 메소드를 이용해 데이터에 대한 제약 조건 설정 가능
public class Time { private int hour; private int minute; private float second; public int getHour() { return hour; } public int getMinute() { return minute; } public float getSecond() { return second; } // 시, 분, 초에 대한 제약조건 설정 // 변수 값 직접 변경을 불가능하게 하고, //메소드를 통해 유효성 조건문을 통과할 경우에만 변경 public void setHour(int h) { if (h < 0 || h > 23) return; hour=h; } public void setMinute(int m) { if (m < 0 || m > 59) return; minute=m; } public void setSecond(float s) { if (s < 0.0f || h > 59.99f) return; second=s; } }
Java

참고 자료