Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
themeEmacs
linenumberstrue
//사용파트
int main()
{
	TalkMan talkMan= new TalkMan();
	talkMan.say("Hello, World!");
	talkMan.say("Hello, World!");
	return 0;
}

//객체 정의파트
public class TalkMan() {

	public int sayCount = 0;

	public void increseSayCount()
	{
		sayCount++;
	}

	public void say(string message)
	{
		if(sayCount==0) 
			hello(message) 
		else
			helloAgain(message);

		increseSayCount();
	}

	public void hello(string message)
	{
		printf(message);
	}

	public void helloAgain(string message)
	{
		printf(message + "Again");
	}

}

...

사용부에서 관심사의 분리로 이해하는것이 더 적절할것같습니다.   


외부에서 객체 내부의 데이터에 직접적으로 접근하지 못하게 하여 데이터의 안전성과 유지보수성을 높입니다.

이 약의 캡슐에 든 성분은 모르겠지만 이 약을 먹으면 투통이 나아진다고~

...

Code Block
themeEmacs
linenumberstrue
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의 특성인 기존 코드의 재사용및 유지보수에 해당하는것으로 다음과 같이 이용할수 있습니다.

Code Block
themeEmacs
public class Singer: TalkMan { 
//...............
    public void sing(string message)
    {
		playText( message);
    }
 
//................
}


이봐 토크맨 나는 노래도 부를수 있다고~ 하지만 니 덕분에 나는 이야기도 할수 있다고~

다형성

노래를 할수 있는 트롯트모드.발라드 모드등 장르의 모드가 추가 되었다라고 가정해봅시다. 


이때 동일한 기능을 다양한 방법으로 확장할수 있는것이 함수오버로딩 입니다. 기능명은 동일하지만 기능을 다양하게 동작시키는 파라메터는 여러개일수 있습니다.

Singer은 이미 말하기방식을 계승을 받았지만, 이것을 다르 방식으로 변경하여 말하는 방식을 변경하고 재정의하는것이 함수오버로딩 입니다.


나는 트로트,발라드등 다양한 장르로 노래를 부르고 싶다고~


코드의 유지보수관점에서 가독성과 유연성을 높일수 있는 방식입니다. 

Code Block
themeEmacs
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 );
		
    }
 
//................
}


추상화