객체지향
현실 세계를 모델링 해서 프로그래밍하는 언어
객체 = 인스턴스
객체는 object, 객체의 반대말이 주체,
즉 개체는 주제 이외의 나머지 현실 세계의 사물들을 말한다.
현실에서는 '객체'라고 하고
이것을 컴퓨터 프로그램에서는 인스턴스라고한다.
객체지향 프로그래밍이란
객체 지향 프로그램을 줄여서 OOP
프로그램에서 필요한 요소들을 객체로 만들고 이것들을 이용해 프로그래밍하는 것.
구체적으로 객체를 상태와 행위로 분석해 구체적으로 구현해는 것이며 , 이객체들은 마치 레고 블록처럼 조립해서 하나의 프로그램을 만드는 것이다.
객체 지향프로그래밍의 장,단점
장점
코드 재사용이 용이함 --> 기존에 만들어진 클래스를 재사용할 수있고 상속을 통해 확장가능
유지 보수가 편리하다 --> 수정해야 할 부분이 클래스 내부에 잇으므로 해당 부분만 수정하면 됨
대형 프로젝트에 적합함 --> 클래스 단위로 모듈화시켜서 개발 : 업무 분담의 편리성이 향상됨
단점
처리속도가 상대적으로 느림
객체의 수 증가 --> 용량이 커질수 있음
설계시 많은 시간과 노력이 필요하다 --> 좋은 객체를 만드는 것을 다른 말로 설계를 잘하는 법이라고 할 수 있는데 , 좋은 설계는 현실을 잘 반영해야 한다.
객체지향 프로그램의 5가지 특성
1) 클래스 + 인스턴스(객체)
클래스 : 추상화를 거쳐 집단에 속하는 속성과 행위를 변수와 메소드로 정의한 것
즉,
어떠한 객체의 상태를 나타내는 변수와 행동을 나타내는 메소드의 집합
객체를 정의하는 틀 , 설계도 라고 볼수있음
인스턴스 (객체)
클래스에서 정의한 것을 토대로 실제 메모리상에 할당 된 것
클래스로부터 객체를 선언하는 과정을 클래스의 인스턴스화 라고 한다.
2) 추상화 (Abstraction)
불필요한 정보는 놔두고 , 중요한 정보만을 표시함으로써 공통의 속성이나 기능을 묶어 이름을 붙이는것이다. 물고기 ,사자 ,토끼 ,뱀이라는 이름을 가진 객체가 각각 있고 이 객체들을 하나로 묶으려고 할 때 , 동물 또는 생물이라는 추상적인 개체로 크게 정의하여 묶는 것을 추상화라고함
3) 다형성 (Polymorphism )
하나의 변수명 , 함수명등이 상황에 따라 다른 의미로 해석될 수 있는 것
오버라이딩 --> 부모 클래스의 메소드와 같은 이름 ,매개변수를 재정의 하는 것
오버로딩 --> 같은 이름의 함수를 여러개 정의하고 매개변수의 타입과 개수를 다르게 하여 매개변수에 따라 다르게 호출할 수있도록 하는 것.
4) 상속 (Inheritance)
상위 개념의 특징을 하위 개념이 물려받은 것
부모 클래스의 속성과 기능을 그대로 물려받아 사용할 수 있고, 기능의 일부분을 변경해야 할 경우 상속받은 자식 클래스에서 해당 기능만 다시 수정하여 사용할수있다.
5) 캡슐 (Encapsulation)
데이터 구조와 데이터를 다루는 방법들을 결합 시켜 묶는 것
변수와 함수를 하나로 묶는 것을 뜻함
캡슐화를 통해 관련된 기능과 특성을 한 곳에 모으고 분류하기 때문에 재활용이 원활해지는 효과가 있다.
객체지향의 큰 특징
모듈화 :
모듈화가 되면 쉽게 교체되거나 재사용할 수 있다.
예 ) 레고 블록으로 비행기를 만든다 치면 각각의 머리,몸통,날개,꼬리를 각각만들어서 합친다.
각 각 머리 , 몸통 , 날개, 꼬리를 모듈이라고 부를 수 있다.
즉 모듈화가 되면 :
1. 추가, 수정 ,삭제가 쉽다.
재사용이 가능하다
이미 검증된 모듈을 사용할 경우 신뢰도가 높다.
클래스란
하나의 데이터 타입이 되며 제품의 틀로서 동작한다
하나의 설계도를 통해서 나온 제품은 모두 동일한 특성을 갖게 된다.
Ex) 클래스 = 붕어빵틀 , 객체 = 틀로 찍어낸 붕어빵
클래스 = 설계도 , 객체 = 제품
클래스는 실체가 없는 개념일므로 실제 값이 할당 될 필요는 없다.
추상화라는 과정을 거쳐 클래스를 만드는 과정이다. , 추상화 과정에서 객체 타입을 나타낼 이름을 정하고 객체속성을 변수로 , 객체의 기능을 매서드로 하여 하나의 클래스를 작성한다.
객체 분석 - 설계 - 구현
사람을 현실 세계의 객체라고 할 때 ,사람을 프로그래밍하려면 먼저 사람을 분석해야 한다.
사람을 분석하면 즉 사람이라는 객체를 분석하면 속성과 기능을 찾을 수있다.
사람 객체는 이름 ,나이 ,성별등의 정보를 가지고 있고 , 일하고 공부하는 기능이있다.
이와같이 클래스 안에는
속성 : 객체가 가지는 정보 , 데이터로 변수 , 상태 , 필드
기능 : 메서드 , 행위, 함수로 불리며 ,객체가 할 수 있는 작업
마무리
구체화는 프로그램의 세계 즉, 메모리에 객체(인스턴스 , 오브젝트)를 생성하는 과정
분석 : 객체 모델링 [분석] - 대상 객체의 구성요소(속성)과 동작(기능)추출 = 추상화
(1) 일반화 - 학생 모두 , 사람, 동물등 ...상위개념
(2) 구체화 - 하위개념 동물 안에 개 ,고양이 ,소 , 돼지등
설계 : 클래스 정의[설계] - 분석 결과에 따른 구성요소 및 기능 정의
(1) 객체의 구성요소 (속성) = 멤버변수
(2) 개체의 동적(기능) = 메서드
구현 : 객체생성[구체화] - 클래스를 사용하여 실체화된 대상 생성
객체의 생성 = 즉 , 인스턴스화
JVM
자바가상머신의 줄임말
JVM이란 JAVA Virtual Machine, 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다 (가상머신이란 프로그램을 실행하기 위해 물리적 머신과 유사한 머신을 소프트웨어로 구현한 것이다.) JVM역할은 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는 것이다. 그리고 JVM은 JAVA와 OS사이에서 중개자 역할을 수행하여 JAVA가 OS에 구애박지 않고 재사용을 가능하게 해준다. 그리고 가장 중요한 메모리관리, Garbage collectrion을 수행한다. 그리고 JVM은 스택기반의 가상머신이다. ARM 아키텍쳐 같은 하드웨어는 레지스터 기반으로 동작하는데 비해 JVM은 스택기반으로 동작한다.
자바 프로그램 실행과정
1. 프로그램이 실행되면 JVM은 OS로부터 이 프로그램이 필요로 하는 메모리를 할당받는다.
JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.
2. 자바 컴파일러(java)가 자바 소스코드(.java)를 읽어들여 자바 바이트코드(.class)로 변환시킨다.
3. Class Loader를 통해 class파일들을 JVM으로 로딩한다.
4. 로딩된 class파일들은 Execution engine을 통해 해석된다
5. 해석된 바이트코드는 Runtime Data Areas에 배치되어 실질적인 수행이 이루어지게 된다
이러한 실행과정 속에서 JVM은 필요에 따라 Thread Synchronization과 GC같은 관리작업을 수행한다.