객체지향언어(Object(객체)-oriented(지향) Programming(언어)) 란?
: 참조자료형이라고 불리우며, 프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 프로그램을 수많은 '객체'라는 기본 단위로 나누고 이 객체들의 상호작용으로 서술하는 방식 입니다.
● 객체란? : 사전상의 등록되어 있는 단어들, 머리속에 떠올릴 수 있는 모든 것들이 object 을 이야기 합니다.
● 객체 지향언어의 특성
1) 캡슐화 : 객체를 캡슐로 싸서 내부를 볼 수 없게 하는 것입니다. 캡슐화를 통해서 객체의 내용들을 보호하고, data를 효율적으로 관리하기 위해서 사용합니다. 그전까지는 data 자료형으로 나눠서 일일이 저장하고 선언해서 관리했어야 하는데 그것을 한번에 할 수 있도록 합니다.
2) 다형성 : 같은 이름의 메소드가 클래스나 객체에 따라 다르게 동작하도록 구현합니다.
- 다형성 사례
- 메소드 오버로딩 : 같은 이름이지만 다르게 작동하는 여러 메소드
- 메소드 오버라이딩 : 슈퍼클래스의 메소드를 서브 클래스마다 다르게 구현
● 객체 지향언어의 목적
1) 소프트웨어의 생산성 향상
- 소프트웨어를 빠른 속도로 생산할 필요성 증대시킵니다.
- 객체 지향 언어
- 상속, 다형성, 객체, 캡슐화 등 소프트웨어 재사용을 위한 여러 장치 내장되어있습니다.
- 소프트웨어 재사용과 부분 수정 빠름니다.
- 소프트웨어를 다시 만드는 부담 대폭 줄입니다.
- 소프트웨어 생산성 향상시킵니다.
2) 실세계에 대한 쉬운 모델링
- 컴퓨터 초기 시대의 프로그래밍 수학 계산/통계 처리를 하는 등 처리 과정, 계산 절차 중요했습니다.
- 현대의 프로그래밍은 컴퓨터가 산업 전반에 활용, 실세계에서 발생하는 일을 프로그래밍, 실세계에서는 절차나 과정보다 물체(객체)들의 상호 작용으로 묘사하는 것이 용이해졌습니다.
※ 객체 지향 언어
: 실세계의 일을 보다 쉽게 프로그래밍하기 위한 객체 중심적 언어
Database와 비교를 통해서 쉽게 설명하겠습니다.
Database 자료형을 효율적으로 관리하기 위해서 table 형태로 관리하고 있습니다.
Database 자료형을 효율적으로 관리하기 위해서 table 형태로 관리하고 있다.
Empno |
empname |
sal | deptno | dept |
13132 |
scott |
2500 |
10 |
sale |
테이블(관계형)을 이용하여 record단위로 하나의 값을 저장하고 있기 때문에 data를 관리하기 쉬웠습니다.
이와 같은 개념을 java에서도 수행할 수 있는데 이를, 객체지향언어로 사용합니다.
기본 자료형 -> 객체지향 (테이블의 형태) + 우리가 정의 하는 자료형(참조자료형)
: java가 지원해주는 자료형 만 아니라 내가 만드는 참조자료형을 통해서 사용합니다.
● Java의 객체지향과 database의 table의 공통점!
: 틀을 만들어서 데이터를 관리합니다. Java 에서는 class를 통해서 table를 정의하는 것과 같습니다.
● Java의 객체지향과 database의 table의 차이점!
: database는 정형화 되어있는 틀을 프로그램에서 제공해주지만 java는 직접 틀을 만들었다는 것을 인식할 수 있도록 메모리에 저장하게끔 할당 받아야 합니다.
● Java는 어떻게 할당 받을 수 있을까요?
Database는 table을 기준으로 삽입만 하면 되지만 Java는 data를 저장하려고 하면 저장할 공간을 할당 받도록 설계되어 있기 때문에 New 를 사용해야한다. (new : 만들어둔 틀의 저장 공간을 할당 받기 위한 명령어이다.)
지금부터 예시를 통해서 객체지향을 만들어보도록 하겠습니다.
1) class 사용하여 틀 만들기
package 객체지향언어;
class Employee{
// 사원이라는 대상의 속성으로 만들어낸 틀이다.
// field / 멤버변수 // class : 틀을 만들어주는 명령어
int empno;
String ename;
String job;
int mgr;
int sal;
int deptno;
class를 이용하여서 사원에 대한 정보를 하나의 틀을 만들어서 선언하고 있습니다.
각각의 자료형을 하나의 Employee 라는 이름으로 묶어줍니다.
주의)
선언만 되어 있을 뿐이지 main 안에 들어있지 않기 때문에 결과가 수행되지 않습니다. Employee 이름의 자료형으로 내가 저장해준 것입니다.
2) new 사용하여 틀 선언하기
- new : 만들어둔 틀의 저장 공간(memory)을 할당 받기 위한 명령어입니다.
- new Employee(); 형식은 method 수행하는 형식과 같이 사용합니다.
- 요청은 내가 했지만 memory 영역은 java가 할당해줍니다.
public class OOPBasic {
public static void main(String[] args) {
Employee king ;
king = new Employee();
king.empno = 1000;
king.ename = "사장님";
king.job = "관리";
king.mgr = 0;
king.sal = 5000;
king.deptno = 10;
Employee king ; 참조변수(주소값) 내가 만든 자료형으로 변수 선언 합니다.
Employee 안에 선언해놓은 6개의 데이터를 가지고 내가 필요할 때사용할 수 있습니다.
king = new Employee(); 참조 자료형 , 인스턴스화 -> 인스턴스(메모리할당)
1. 주소값 : 할당 받은 메모리의 시작 주소( 1개의 값만 저장할 수 있습니다.) 주소값을 통해서 내가 지정한 자료형으로 갈 수 있습니다.
2. king 의 값을 주소값을 불러주는 참조변수라고 불러줍니다. - 참조변수는 별도로 4byte 할당 받습니다.
(주소값을 가지고 있다. = 객체를 가지고 있고, 인스턴스화 시킨다.)
- 이제부터 각자 관리 되는 것이 아니라 king하나로 관리할 수 있습니다.
king.displayEmployee();
/*
* 사원번호 : 1000
* 사원이름 : 사장님
* 직책 : 관리
* 사수번호 : 0
* 급여 : 5000
* 부서번호 : 10
*/
위의 king을 출력하면 그안의 선언되어 있던 자료형이 하나의 정형화 되어 출력 됩니다.
추가적 설명)
- 실체화 한 대상 : ( 범용적인 )객체 = 할당 되어 있는 메모리에 있는 정보 / (좁은 의미) 객체 = 할당하기 시작하는 이름
- 인스턴스 : 할당 되어 있는 메모리 공간 입니다.
- 추상적인 개념인 클래스에서 실제 객체를 생성하는 것을 인스턴스화(instantiation)라고 합니다.
예제) e-mart에서 가셔서 사과를 5000원 어치 사오셨다. e-mart의 이윤과 사과의재고를 관리하자.
(단, 개단 사과의 값은 1,000원)
package JAVA연습;
-- field (속성) --
class Apple{
int benefit; // 이윤
int numofapple; // 남은 사과 갯수
Apple(int apple){
numofapple = apple ;
}
-- method(사과를 판매 - 행위/기능) --
public void sale(int money) {
int num = 0;
num = money/1000;
numofapple -= num;
benefit += money;
}
-- 결산 --
public void displaybuy() {
System.out.println("이윤 : " + benefit);
System.out.println("남은 사과 수 : " + numofapple);
}
}
public class qq20200406 {
public static void main(String[] args) {
Apple e_mart;
e_mart = new Apple(100);
e_mart.sale(10000);
e_mart.displaybuy();
e_mart.sale(10000);
e_mart.displaybuy();
}
}
결과값
이윤 : 10000
남은 사과 수 : 90
이윤 : 20000
남은 사과 수 : 80
Apple e_mart; --
생성자 : class Apple 의 이름과 같아야 한다. 반환형이 없다. java에 의해서 memory 생성시 딱 1번만 수행된다.
e_mart = new Apple(100);
1) 메모리를 할당해주고, Apple의 주소값을 가져옵니다.
2) 위의 Apple() 를 호출하고, 초기화를 합니다.
e_mart.sale(98000); 필드의 값을 메모리에 할당해서 그 값으 주소값을 주고 초기화 하는데 활용하게 합니다.
- 자료형만 잘 지어주면 결과값은 언제든지 얻어낼 수 있습니다.
- 객체의 이름만 알고 있다면 언제든 수행할 수 있습니다 .
- 자료형을 만들어두면 새로운 객체가 생길 때 마다 그 값 저장하기에 유용합니다.
'빅데이터 > JAVA' 카테고리의 다른 글
[JAVA] 객체지향언어(오버로딩, this, 클래스매서드) (0) | 2020.04.29 |
---|---|
[JAVA] 객체지향언어(생성자, 정보은닉/접근제어 지시자,Static) (0) | 2020.04.29 |
[JAVA] METHOD (0) | 2020.04.25 |
[JAVA] 반복문(While문, Do While문, For문) (0) | 2020.04.25 |
[JAVA] 조건문(If , Switch) (0) | 2020.04.22 |