[작성일: 2023. 01. 25]
객체지향언어
역사
- 과학, 군사적 모의실험을 위해 컴퓨터를 이용한 가상세계를 구현하려는 노력으로부터 객체지향이론이 시작됨.
- 1960년대 최초의 객체지향언어 Simula 탄생
- 1980년대 절차방식의 프로그래밍의 한계를 객체지향방식으로 극복하려고 노력함. (C++, Smalltalk와 같은 보다 발전된 객체지향언어 탄생)
- 1995년 말 Java 탄생. 객체지향언어가 프로그래밍 언어의 주류가 됨.
정의
- 클래스(Class)
- 설계도
- 객체를 정의한 것. 객체를 생성하는 데 사용됨.
- 객체
- 설계도로 만든 제품
- 실제로 존재하는 것
- 객체의 속성과 기능에 따라 용도가 다름.
클래스 | 객체 |
제품 설계도 | 제품 |
TV 설계도 | TV |
- 클래스는 객체로 구현될 때 의미가 있음(=제품으로 만들어지지 않는 설계도는 의미가 없음.) ➡️ Apple과 An Apple
- 객체지향의 목적은 코드 개발 노력을 최소화하는 것
- 객체지향 프로그래밍은 클래스를 디자인하는 것
특징
- 기존의 프로그래밍 언어에 몇 가지 규칙을 추가한 것일 뿐 크게 다르지 않음.
- 새로운 코드를 작성할 때 기존의 코드를 이용하기 때문에 쉽게 작성할 수 있고 코드의 재사용성이 높음.
- 코드 간의 관계를 맺어줌으로써 적은 노력으로 코드 변경이 가능하며 코드의 관리가 쉬움.
- 신뢰성이 높은 프로그램의 개발 가능. 제어자와 메서드를 이용해서 데이터를 보호하고 코드의 중복을 제거하여 코드의 불일치로 인한 오류 방지
종류
- 상속(Inheritance)
- 하위 클래스가 상위 클래스를 물려받는 것
- 다형성(Polymorphism)
- 같은 이름으로 호출했을 때 호출한 인자에 따라 다르게 설계하는 것
- 추상화(Abstraction)
- 사물(객체)의 속성이나 특성을 추출하는 것
- 캡슐화(Encapsulation)
- 내부를 공개하지 않는 것
- 불필요하게 복잡한 것을 피하고 위험에서 보호함.
객체와 인스턴스
- 객체 = 인스턴스
- 객체(Object)는 인스턴스(instance)를 포함하는 일반적인 의미
- 특정 클래스로부터 생성된 객체(ex: tv인스턴스)
책상은 인스턴스다. | 책상은 책상 클래스의 객체이다. |
책상은 객체다. | 책상은 책상 클래스의 인스턴스이다. |
인스턴스화
- 클래스로부터 인스턴스를 생성하는 것
- 클래스(설계도) ➡️ 인스턴스(객체/제품)
객체의 속성과 기능
- 객체는 속성과 기능의 집합 - 멤버
- 속성은 변수, 기능은 메서드로 정의
class TV { // tv 설계도
String color; // 색
boolean power; // 전원상태(on/off)
int channel; // 채널
void power() { power = !power; } // 전원 on/off
void channelUp { channel++; } // 채널 올리기
void channelDown { channel--; } // 채널 내리기
인스턴스 생성방법
- 클래스명 참조변수명; // 객체를 다루기 위한 참조변수 선언
- 참조변수명 = new 클래스명(); // 객체생성 후 생성된 객체의 주소를 참조변수에 저장
Tv t;
t = new TV();
t.channel = 5;
t.channelDown();
System.out.println(t.channel);
class TV {
String color; // 색
boolean power; // 전원상태(on/off)
int channel; // 채널
void power() { power = !power; } // 전원 on/off
void channelUp { channel++; } // 채널 올리기
void channelDown { channel--; } // 채널 내리기
}
클래스(Class)
- 클래스 == 데이터 + 함수
- 데이터와 함수의 결합
- 변수: 하나의 데이터를 저장할 수 있는 공간
- 배열: 같은 타입의 여러 데이터를 저장할 수 있는 공간
- 구조체: 타입에 관계없이 서로 관련된 데이터들을 저장할 수 있는 공간
- 클래스
- 데이터와 함수의 결합(구조체 + 함수)
- 여러 형태의 값뿐 아니라 여러 형태의 함수를 저장함.
클래스의 구조
필드(Field) | - 클래스가 가지고 있는 변수 - 클래스의 함수 내에서 선언된 변수는 아님. - 멤버 변수 |
메서드(Method) | - 클래스 내에 있는 함수 - 멤버 함수 |
생성자( Constructor) | - 클래스(설계도)가 객체(제품)로 만들어질 때 실행되는 함수 - 객체로 생성될 때 반드시 해야할 작업들을 넣음. - 함수명이 클래스명과 동일해야 하며 리턴값이 없음. |
사용자 정의 타입(User-defined type)
- 프로그래머가 직접 새로운 타입을 정의할 수 있음.
- 서로 관련된 값을 묶어서 하나의 타입으로 정의함.
int[] hour = new int[3];
int[] minute = new int[3];
int[] second = new int[3];
// ↓ 아래의 코드가 더 객체지향적인 코드임.
Time[] t = new Time[3];
t[0] = new Time();
t[1] = new Time();
t[2] = new Time();
class Time { // Time 클래스 정의, 사용자 정의 타입
int hour;
int minute;
int second;
}
Time t = new Time(); // 객체 생성
t.hour = 12;
t.minute = 34;
t.second = 56; // 객체지향적인 코드
Time t1 = new Time();
Time t2 = new Time();
Time t3 = new Time();
Time[] t = new Time[3];
t[0] = new Time();
t[1] = new Time();
t[2] = new Time();
Q&A
Q. 클래스가 왜 필요한가?
A. 객체(제품)를 생성하기 위해
Q. 객체(TV)가 왜 필요한가?
A. 객체(제품, TV)를 사용하기 위해
Q. 객체를 사용한다는 것은?
A. 객체(TV)가 가진 속성(변수)과 기능(메서드)을 사용하려고
🐣 해당 게시글은 자바의 정석(남궁성 님) 영상으로 함께 공부하며 요약/정리한 글입니다.
🐣 입문 개발자가 작성한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.