캡슐화/상속/추상화/다형성은 OOP의 4대특성이며 , OOP로 작성된 초기버전을 변경해가며 OOP의 특성을 하나씩 알아 보겠습니다.
캡슐화
캡슐화는 다음과 같이 정의합니다. 객체의 속성(data fields)과 행위(methods)를 하나로 묶고, 실제 구현 내용 일부를 외부에 감추어 은닉한다.
OOP를 처음 배울때 은닉한다란 단어때문에 구현부 유출방지를 위한 보안적인 부분으로 생각하면 캡슐화를 이해하기가 어려워집니다.
사용부에서 관심사의 분리로 이해하는것이 더 적절할것같습니다.
외부에서 객체 내부의 데이터에 직접적으로 접근하지 못하게 하여 데이터의 안전성과 유지보수성을 높입니다.
이 약의 캡슐에 든 성분은 모르겠지만 이 약을 먹으면 투통이 나아진다고~
캡슐화중 은닉할 있는부분을 '접근제어자' 라고도하며 public → private으로 변경하면 오로지 자신의 객체 내에서만 접근이 가능하며
사용부에서 관심사를 분리할수 있습니다.
public class TalkMan {
//...............
private int sayCount = 0;
private void increseSayCount()
{
sayCount++;
}
public void say(string message)
{
if(sayCount==0)
hello(message)
else
helloAgain(message);
increseSayCount();
}
//................
}
talkMan.say("Hello, World!");
talkMan.say("Hello, World!");
talkMan.say("Hello, World!");
talkMan.say("Hello, World!");
이 봐 토크맨~ 나는 헬로우 월드를 찍고 싶을 뿐이야! 내가 여러번 사용하면 Again만 붙여 달라고~
상속
TalkMan을 재사용하고 'We Are The World'를 노래하는 기능으로 확장한다고 가정해봅시다.
이 코드는 기존의 이야기기능을 유지하고 새로운기능을 추가할수 있습니다.
OOP의 특성인 기존 코드의 재사용및 유지보수에 해당하는것으로 다음과 같이 이용할수 있습니다.
public class Singer: TalkMan {
//...............
public void sing(string message)
{
playText( message);
}
//................
}
이봐 토크맨 나는 노래도 부를수 있다고~ 하지만 니 덕분에 나는 이야기도 할수 있다고~
다형성
노래를 할수 있는 트롯트모드.발라드 모드등 장르의 모드가 추가 되었다라고 가정해봅시다.
이때 동일한 기능을 다양한 방법으로 확장할수 있는것이 함수오버로딩 입니다. 기능명은 동일하지만 기능을 다양하게 동작시키는 파라메터는 여러개일수 있습니다.
Singer은 이미 말하기방식을 계승을 받았지만, 이것을 다르 방식으로 변경하여 말하는 방식을 변경하고 재정의하는것이 함수오버로딩 입니다.
나는 트로트,발라드등 다양한 장르로 부르고 싶다고~
public class Singer: TalkMan {
//...............
public void sing(string message)
{
playText( message);
}
public void sing(string message,int mood) // 오보로딩을 통한 기능확장
{
playText( message, mood);
}
public void say(string message) //오버라이딩을 통한 기능 재 정의
{
sayText( message );
}
//................
}
추상화
컴퓨터 과학에서추상화(abstraction)는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다.
객체지향 프로그래밍
객체지향(Object-Oriented Programming)을 줄여서 OOP란 표현을 더 많이하며
'Hello World' 를 찍는 예제를 통해 그 특성을 이해 해봅시다.
Let's 뎁~
절차적 프로그래밍
절차적 프로그래밍은 프로그래밍된 순서대로 처리하고 결과를 내는 방식입니다.
구조적 프로그래밍
절차적 프로그래밍 방식의 개선된 형태로 프로그램을 함수단위로 나누고 구조화하여 함수끼리 호출하는 방식입니다.
큰 문제를 해결하기 위해 문제를 작은 단위들로 나누어 해결하는 방식 Top-Down 방식입니다.
사용기법에 가까운 절차적 프로그래밍의 틀에 벗어나지는 못하였습니다.
객체지향 프로그래밍
큰 문제를 작게 쪼개는 것이 아니라, 작은 문제들을 해결하는 객체를 만들며 객체들을 조합해 큰 문제를 해결하는 Bottom-Up 방식으로
구조적 프로그래밍 샘플을 그대로 변환하였습니다 단순하게 구조적으로 작성된 함수를 집합을 시켰습니다.
이것만으로 OOP의 특성을 모두 이용했다고 볼수는 없지만 작은 문제를 해결하는 객체(Class)를 정의하고 집합을 시킨것으로 OOP의 시작으로 볼수 있습니다.
다음 장점이 생겨났습니다.
OOP의 언어적인 특성도 있지만 중요하게 여겨봐야할것은 프로그래밍 방식의 패러다임 전환입니다.
다소 절차적 기계어에 가까웠던 프로그래밍 해결방식을 추상화 가능하게 했다란것입니다.
추상화는 패러다임 전환관점이기도 하지만
OOP의 4대 특성
캡슐화/상속/추상화/다형성은 OOP의 4대특성이며 , OOP로 작성된 초기버전을 변경해가며 OOP의 특성을 하나씩 알아 보겠습니다.
캡슐화
캡슐화는 다음과 같이 정의합니다. 객체의 속성(data fields)과 행위(methods)를 하나로 묶고, 실제 구현 내용 일부를 외부에 감추어 은닉한다.
OOP를 처음 배울때 은닉한다란 단어때문에 구현부 유출방지를 위한 보안적인 부분으로 생각하면 캡슐화를 이해하기가 어려워집니다.
사용부에서 관심사의 분리로 이해하는것이 더 적절할것같습니다.
외부에서 객체 내부의 데이터에 직접적으로 접근하지 못하게 하여 데이터의 안전성과 유지보수성을 높입니다.
캡슐화중 은닉할 있는부분을 '접근제어자' 라고도하며 public → private으로 변경하면 오로지 자신의 객체 내에서만 접근이 가능하며
사용부에서 관심사를 분리할수 있습니다.
상속
TalkMan을 재사용하고 'We Are The World'를 노래하는 기능으로 확장한다고 가정해봅시다.
이 코드는 기존의 이야기기능을 유지하고 새로운기능을 추가할수 있습니다.
OOP의 특성인 기존 코드의 재사용및 유지보수에 해당하는것으로 다음과 같이 이용할수 있습니다.
다형성
노래를 할수 있는 트롯트모드.발라드 모드등 장르의 모드가 추가 되었다라고 가정해봅시다.
이때 동일한 기능을 다양한 방법으로 확장할수 있는것이 함수오버로딩 입니다. 기능명은 동일하지만 기능을 다양하게 동작시키는 파라메터는 여러개일수 있습니다.
Singer은 이미 말하기방식을 계승을 받았지만, 이것을 다르 방식으로 변경하여 말하는 방식을 변경하고 재정의하는것이 함수오버로딩 입니다.
추상화
컴퓨터 과학에서 추상화(abstraction)는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다.