Versions Compared

Key

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

...

입력을 받아 명시된 순서대로만 처리하고 결과를 내는 방식으로 코드의 라인수대로 진행합니다.

OOP가 가진 장점중 하나인 코드의 재사용이 불가능하지만  에 어려움이 있으며 명령의 재 사용을 위해 코드를 점프하는코드의 점프를 하는

프로그래밍 'goto' 와 같은 명령이 있는 언어도 있습니다. 


구조적 프로그래밍

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


//구현파트
int g_sayCount = 0;

void increseSayCount()
{
	g_sayCount++;
}

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

	increseSayCount();
}

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

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

절차적 프로그래밍 방식의 개선된 형태 프로그램을 함수단위로 나누고 구조화하여 함수끼리 호출하는 방식입니다.

큰 문제를 해결하기 위해 문제를 작은 단위들로 나누어 해결하는 방식 Top-Down 방식입니다.

함수를 통한 코드의 재사용이란 장점은 어느정도 가능해졌습니다.

하지만 책임단위 구분이 없고  누가 누구를 호출할수 있는지에 대한 규칙이 없기때문에 함수가 늘어갈수록

유지보수가 어려워집니다어려워지는것은 동일합니다.

객체지향 프로그래밍

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");
	}

}

큰 문제를 작게 쪼개는 것이 아니라, 작은 문제들을 해결하는 객체를 만든다. 만들며 객체들을 조합해 큰 문제를 해결하는 Bottom-Up 방식으로 

...

  • 책임을 객체단위로 생성하고 누군가가 사용할수 있게 제공가능합니다제공합니다.
  • 코드의 유지보수가 객체단위로 분리될수 있으며 이후 설명될 다형성에의해 객체가 재사용되어 확장될수 있습니다.



OOP의 언어적인 특성도 있지만 중요하게 여겨봐야할것은 프로그래밍 방식의 패러다임 전환입니다.

다소 절차적 기계어에 가까웠던 프로그래밍 해결방식을 추상화 가능하게 했다란것입니다.  

컴퓨터 과학에서 추상화(abstraction)는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다.

-위키피디아



OOP의 4대 특성

draw.io Diagram
bordertrue
diagramNameoop특성
simpleViewerfalse
width
linksauto
tbstyletop
lboxtrue
diagramWidth851
revision1

...

사용부에서 관심사의 분리로 이해하는것이 더 적절할것같습니다.   샘플 객체인 TalkMan를 실제 작동시키는 코드에서는 말하는 횟수를 조정하거나 변경할 필요가 없습니다.  


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



캡슐화중 은닉할 있는부분을 '접근제어자' 라고도하며 public → private으로 변경하면 오로지 자신의 객체 내에서만 접근이 가능하며

...