티스토리 뷰

1. 절차지향 프로그래밍 vs 객체지향 프로그래밍


절차지향 프로그래밍은 순차적인 처리가 중요하며, 프로그램 전체가 유기적으로 연결되도록 구현하는 프로그래밍 기법이다.

컴퓨터가 작업을 처리하는 방식과 비슷하기 때문에 객체지향 언어로 구현된 프로그램보다 처리속도가 빠르다는 장점을 가지고 있습니다.

하지만, 절차지향 프로그래밍에서는 순서가 중요하기 때문에 변경 및 수정에는 많은 어려움이 있습니다. 


반면 객체지향 프로그래밍은 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들이 서로 메세지를 전달받으며 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다. 각각의 모듈들이 분할되었기 때문에 유지보수 및 코드의 재사용성 가능하다. 

캡슐화, 상속, 추상화, 다형성(캡! 상추다)의 특징이 있다. 


객치지향 프로그래밍도 물론 실행순서가 중요하지만, 프로그램을 설계하는 방식에서 가장 큰 차이가 있다.

절차지향 프로그래밍은 프로그램의 순서와 흐름을 먼저 세우고 필요한 자료구조와 함수들을 설계하는 방식이고, 객체지향 프로그래밍은 반대로 자료구조와 이를 중심으로 한 모듈들을 먼저 설계한 다음에 이들의 실행순서와 흐름을 짜는 방식이다.


2. 클래스 vs 객체


클래스는 같은 속성과 기능을 가진 객체들을 통칭하는 개념, 집합, 분류.

객체는 상태(변수)와 행위(메소드)를 가지는 유일무이한 사물, 존재.


2. 객체지향의 특징 


(1) 추상화 == 모델링

추상의 사전적 의미는 여러 가지 사물이나 개념에서 공통되는 특성이나 속성을 추출하여 파악하는 작용을 의미한다. 

프로그래밍에서 추상화는 구체적인 것을 분해해서 관심영역에 있는 특성만을 가지고 재조합 하는 것을 의미한다. 


(2) 상속 = 재사용 + 확장

부모객체를 상속하여 자식객체를 생성함으로써, 코드의 중복 제거 가능하다.

부모객체를 수정하면 상속 받은 자식객체도 자동으로 수정되기 때문에 수정과 유지보수 간편하다. 다중상속을 지원하지 않는다. (Is-a 관계)


(3) 인터페이스 = 사용편의성

같은 타입을 입력함으로써, 다양한 결과 값을 얻을 수 있는 성질

부모타입에는 모든 자식객체가 대입이 가능하고, 인터페이스타입에는 모든 구현객체 대입 가능하다.


(4) 캡슐화 = 정보은닉

필드, 메소드를 하나로 묶고 실제 구현내용을 감추는 기법으로 외부 객체는 공개된 메소드와 필드만 이용가능하기 때문에 외부 객체로 인한 객체의 손상을 줄일 수 있다.


3. 자바 언어의 특징 


(1) 이식성이 높은 언어

이식성은 서로 다른 환경을 가진 시스템 간에 프로그램을 옮겨 실행할 수 있는 것을 의미한다.

자바는 소스를 수정하지 않아도, 자바실행환경(JRE)이 설치되어있는 모든 운영체제에서 실행이 가능하다.


(2) 객체지향 언어

부품에 해당하는 객체들을 생성, 조립, 연결하여 프로그램을 완성하는 기법으로 캡슐화, 상속, 다형성 기능을 지원한다.


(3) 함수적 프로그래밍 지원 

자바는 함수적 프로그래밍 람다식을 지원. 컬렉션 요소를 필터링, 매핑, 이벤트 처리가 쉬움


(4) 메모리의 자동관리

자바는 개발자가 메모리를 직접 관리할 수 없다. 가비지컬렉션이 사용하지 않는 메모리를 자동으로 제거하기 때문에 개발자는 메모리 관리보다는 개발에 

집중이 가능하다.


(5) 동적로딩을 지원

자바는 애플리케이션을 실행할 때 모든 객체가 생성되지 않고, 객체의 필요에 따라 클래스를 로딩하다. 개발 완료 후, 유지보수를 할 때, 애플리케이션 전체를 컴파일 필요없이 해당 객체만 수정이 가능하기 때문에 유지보수와 관리가 간편하다.


4. 가비지 컬렉션

가바지 컬렉션은 기존에 할당된 메모리를 재사용하는 매커니즘이다. 자바는 객체를 생성하면 힙 영역에 메모리를 할당한다. 

C, C++ 언어에서는 malloc, free 함수를 호출해서 메모리 할당을 수동으로 직접 관리해야 한다. 하지만, 자바에서는 가비지 컬렉션을 통해 자동으로 메모리를 관리하고 있기 때문에 메모리를 수동으로 관리했을 때 발생할 수 있는 개발자의 실수를 줄일 수 있다. 


가바지컬렉션은 모든 동작 중인 코드에서 더이상 참조하지 않는(사용하지 않는) 객체를 찾은 후, 메모리를 반환한다.

Minor Garbage Collection 은 힙 영역에서 New area 영역에서의 가비지 컬렉션을 의미한다. 동작원리는 아래와 같다.

 1. Eden 영역 (객체가 최초로 생성된 공간)에 메모리 공간이 부족해지면, 가비지 컬렉션이 동작해서 Survivor1 영역에 각 각의 값들을 복사한다.

 2. Survivor1 영역을 제외한 모든 객체들을 삭제한다.

 3. Eden 영역과 Survivor1 영역의 메모리가 기준치 이상이 되면, Eden 영역과 Survivor1 영역에서 참조하지 않는 객체를 탐색한다.

 4. 참조되고 있는 객체는 Survivor2 영역으로 값을 복사하고, Survivor2 영역을 제외하고 모두 삭제한다.

 5. 일정 시간이 지나면, Survivor2 영역의 객체들을 Old Area로 이동시킨다.


Major Grabage Collection은 힙 영역에서 Old area 에서의 가바지 컬렉션을 의미한다. Old 영역에 있는 모든 객체들을 검사하고, 사용하지 않는 객체는 한번에 삭제한다. 탐색하고 삭제하는 과정에서 많은 시간이 소요되고, 실행 중 프로세스가 정지된다.



공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함