절차 지향 프로그래밍
: 절차 지향 프로그래밍은 기존의 Cobol,Fortran,Pascal,C 등이 있습니다.
절차 지향 프로그래밍은 함수(Function), 프로시져(Procedure)를
중심으로 프로그램을 작성하기 때문에 구조적 프로그래밍(Structured Programming)
방식이라고 부릅니다. 대량의 데이터를 순차적으로 처리할 때 적합한 방식입니다.
마치 자동차 공장에서 컨베이어 벨트에 의해 자동차가 자동으로 조립되는 조립라인과
같이 데이터가 순차적으로 처리됩니다. 절차지향 프로그래밍은 모듈별로 프로그램이
가능한 장점이 있습니다. 하지만 규모가 큰 프로그램을 작성하면 개발 및 유지 보수가
어려운 문제도 있습니다.
단점
: 프로그램의 재사용이 쉽지 않습니다.
큰 프로그램을 작성할 때 오류 발생이 많습니다.
프로그램이 조건,선택,반복의 구조로 되어 있기 때문에 유지 보수가 어렵습니다.
현실 세계와 동떨어진 프로그래머 위주의 프로그램이 될 수 있습니다.
모듈화
: 프로그램을 작성할 때 모듈(Module)처리를 사용합니다.
모듈이란 독자적인 기능을 가진 부분을 의미합니다.
모듈화하는 가장 큰 이유는 첫째 프로그램의 재사용성을 높이기 위해서입니다.
특별한 기능을 수행하는 부분을 독립적으로 처리하면, 나중에 그 부분만 띄어내어
다시 사용할 수 있습니다. 두번째는 프로그램 작성을 보다 쉽게 하기 위해서입니다.
프로그램을 기능별로 구조화 하면 여러 사람이 분할 작성할 수 있고, 각 모듈의 내부
구조를 알지 못해도 사용 방법만 알면 되기 때문에 훨씬 쉽게 프로그램을 작설할 수
있습니다.
이와같은 모듈 방식의 프로그램은 프로그래밍 기법에 따라 다르게 이용됩니다.
절차 지향 프로그래밍에서는 함수 또는 프로시져를 사용해 모듈화합니다.
객체 지향 프로그래밍에서는 객체를 사용해 모듈화합니다. 특정한 기능을 수행하기
위해 독립적으로 구성된 객체를 사용해 다른 객체와 구분하고, 객체 상호간에
메시지를 교환하면서 처리합니다.
객체 지향 프로그래밍(OOP)
: 객체 지향 프로그램은 객체(Object), 클래스(Class),
상속(Inheritance)의 개념을 적용해서 작성하는 프로그래밍 방법
프로그램을 작성하는 방법에 따라 프로그램의 정의가 달라집니다.
전통적인 절차 지향 프로그래밍 입장에서는 명령어를 논리적으로
모아 놓은 것을 프로그램이라고 정의합니다.
반면 객체 지향 프로그래밍에서는 객체들의 집합을 프로그램이라고 합니다.
클래스(Class)
: 클래스는 어떤 사물의 속성과 행위를 각각 변수와 메소드를 사용해서
정의하고 있는 소프트웨어적인 설계도(Blueprint)또는 프로토타입(Prototype)
입니다. 이와 같은 클래스를 만들기 위해서는 실세계에 존재하는 사물을
소프트웨어적으로 추상화(Abstraction) 해야 합니다.
객체(Object)
: 클래스의 속성과 행위를 실제로 만들어 놓은것을 객체라고 합니다.
객체는 실세계에 존재하는 사물, 그 자체를 의미합니다.
결국 사물을 소프트웨어적으로 추상화시켜 놓은 것을 클래스라 하고
클래스를 실제 사용할 수 있도록 만든 것, 또는 클래스가 실제 값을 가질 수 있도록
메모리 공간에 할당해 놓은 것을 인스턴스(Instance) 또는 객체라고 합니다.
객체 지향 프로그래밍 단계
1. 객체 모델링 단계
: 첫번째 단계는 객체를 추상화하는 객체 모델링 단계이다.
형식
속성 -> 필드 기능 -> 메소드
속도 -> speed 속도는 5km/hr씩 증가 -> speedUp()
2. 클래스화 단계
: 두번째 단계는 클래스화 단계이다. 추상화 단계에서 얻어진 클래스 이름,
필드, 메소드를 코드로 바꾸는 클래스 정의 작업을 해야한다.
자바는 클래스를 정의하기 전에 class라고는 키워드를 제공한다.
class다음에는 클래스 이름을 기술하고 클래스 내부에 메소드와 필드를
정의한다. 필드는 변수선언 형태로 한다.
클래스 내부에 기술된 변수는 필드라 하고 메소드 내부에 선언된 변수는
지역변수라 한다.
형식
접근 제어자 class 클래스 이름
{
접근 제어자 자료형 필드;
접근 제어자 자료형 메소드(매개 변수);
.
.
.
}
위 형식에서 클래스나 필드 또는 메소드에 접근제어자(access modifier)가
사용된다. 접근 제어자는 접근 허용 범위를 규정 짓는다.
3. 객체 생성과 사용
: 클래스는 객체의 설계도 또는 틀, 거푸집, 템플릿이라 할 수 있다.
객체 지향 프로그래밍에서는 이러한 클래스로 인스턴스를 생성해야 하는데
이 때 사용되는 예약어가 new라고 한다. new 연산자에 의해서 생성되는 객체를
인스턴스 혹은 객체라고 한다.
형식
Car car_1 = new Car();
참조변수선언 인스턴스생성
: 위 내용에서 참조 변수 선언과 인스턴스 생성 두 부분으로 나뉘며
=(대입연산자)를 기준으로 해서 오른쪽이 인스턴스 생성 부분이고
왼쪽이 레퍼런스 변수 선언이다.
JVM은 항상 대입 연산자 오른쪽에 오는 문장을 먼저 수행한다.
즉 'new Car()' 란 문장이 먼저 수행되는데 new 연산자 다음에
클래스 이름인 Car()를 기술하면 인스턴스가 heap 영역에 생성된다.
이와 같은 과정을 클래스의 인스턴스(객체)화 라고한다.
new 연산자는 heap 영역에 메모리 할당 하는 일과 더불어 할당된 메모리를
참조할 수 있는 주소값을 되돌려준다. 그렇기 떄문에 new 연산의 결과 값을
따로 저장해 두어야만 인스턴스를 참조할 수 있다. 객체를 참조하기 위해
new 연산의 결과값을 저장하는 변수를 객체 참조변수(레퍼런스변수)라고한다.
참조형(Reference Type)
: 기본형 변수는 해당 변수가 위치한 곳에 값을 보관하고 있습니다.
하지만 참조형은 값이 저장된 곳의 위치 정보를 알고있는 변수입니다.
결국 기본형은 변수의 위치와 값이 저장된 위치가 동일한
반면 참조형은 값이 저장된 위치와 변수의 위치가 다릅니다.
참조라는 말은 Address(주소)라고도 말할 수 있습니다.