객체지향언어
프로그래밍어는 절차지향언어와 객체지향언어로 구분된다
<br/>
절차지향언어 (함수지향언어)
대표적으로 C언어가 있으며, 실행하고자 하는 절차대로 일련의 명령어를 나열 하여 프로그래밍 하는 방법을 절차지향언어 라고한다.
목적을 달성하기 위해 일의 절차를 표현하며 명령들의 순서 또는 흐름에 중점을 둔다.
자판기 프로그램을 예로 들어보자. 절차지향언어로 프로그래밍 한다면
흐름도에(동전투입->돈이충분한가? -> 선택-> 재고확인 ~~~) 따라서 일련의 동작순서에 맞추어 프로그래밍을 할 것이다.
<br/>
객체지향언어
대표적으로 Java, C++이 있다.
프로그래밍의 데이터를 추상화시켜 상태와 행위를 객체로 표현하고 이들의 관계와 상호작용을 통해 로직을 구성하는 프로그래밍입니다.
자판기 프로그램을 예로 들어보자. 절차지향 프로그램은 흐름또에 따라 일련의 동작을 순서에 맞추어 프로그래밍 한다면
객체지향프로그래밍은 우선 객체를 추출하고 이 객체들과의 관계를 결정하고, 이들의 상호작용에 필요한 메소드, 필드를 설계 및 구현한다.
<br/>
객체지향언어의 목적
-
생산성 향상 - 객체지향언어는 상속, 다형성등 소프트웨어 재사용을 위한 여러 장치가 있으며, 이런 재사용을 통해 생산성이 향상된다.
-
실세계에 대한 쉬운 모델링 - 실세계는 절차나 과정보다는 객체들과의 상호작용으로 묘사하는 것이 쉽다.
<br/>
<br/>
객체지향언어의 특성
-
**추상화 **<br/>
객체에서 공통된 속성과 행위를 추출 하는 것<br/> -
캡슐화<br/>
캡술화란 객체를 캡슐로 감싸 그 내부를 볼 수 없게 하는 것을 말한다.<br/>
캡슐약을 생각하면 쉽다. 가루약을 캡슐에 넣으면 어떤 색인지, 쓴지, 무슨 성분이지 할 수가 없다.<br/>
객체는 메소드와 필드로 구성되며 클래스라는 캡슐을 사용하여 객체를 표현한다.<br/>
객체외부에서는 메소드와 필드에 직접 접근 할수 없다. 그러나 몇몇 메소드와 필드는 객체 외부와의 인터페이스를 위해 공개된다.<br/>
캡슐화의 궁극적인 목적은 보안, 보호, 외부 접근 제한이다. 외부로부터 접근을 막아 데이터를 보안, 보호 할 수 있다.<br/>
외부에서 클래스 내부에 데이터 접근을 금지하는것을 정보 은닉화라한다.<br/>
<br/>
getter와 setter를 사용하는 이유는 무엇인가?<br/>
캡슐화를 통해 멤버변수를 숨기고, 객체외부와의 인터페이스를위해 getter와 setter를 사용한다.<br/>
멤버변수에 대해서 메소드를 통해 접근하기 때문에, 메서드 내부에서 매개변수와 같이 어떤 올바르지 않은 입력에 대해 사전에 처리 할수 있게 한다.<br/> -
**상속 **<br/>
상속은 상위 개체의 속성이 하위 개체에 물려져, 하위개체와 상위 개체의 속성을 모두 가지고 있음을 의미한다.<br/>
자바 코드의 중복 작성을 방지하며, 코드를 재사용 하게하여 생산성이 향상된다.<br/> -
다형성<br/>
다형성은 같은 이름의 메소드 호출에 대해 상황에 따라 다른 의미로 해석 할 수 있게 하는 것<br/>
예를들어 동물 부모 클래스를 상속받은 개, 고양이 자식 클래스가 있다고 해보자.<br/>
'소리내기' 라는 메소드를 호출 하였을때 개는 '멍멍', 고양이는 '야옹'을 출력하도록 구현 해야 할 것이다. <br/>
이렇게 같은 '소리내기' 호출에 대해 객체 따른 다른 동작을 하게 구현되는 것을 다형성이라 한다.<br/>
오버로딩과 오버라이딩과 밀접한 관계를 가진다.
<br/>