본문 바로가기
그 외 프로그래밍 언어/Java

자바, 객체지향 프로그래밍 (OOP)

by Dreaming Coder 2021. 12. 12. 16:06

 


 

갈수록 점점 더 어려워집니다.

이번에는 메소드보다 더 큰 벽인 객체지향 프로그래밍(Object Oriented Programming)에 대해서 배워보겠습니다.

 

 

 

지난 포스트

 

자바, 메소드 오버로딩 (중복정의)

이번에는 메소드 오버로딩(중복정의)에 대해서 배워보겠습니다. 지난 포스트 자바, 제곱 값 구하는 메소드 만들기 자꾸 새로운 문제들로 메소드를 반복하고 있는데, 문제를 푸는 것보다 중요한

gogogameboy.tistory.com

 

 

 

참고로 이번 포스트에서는 코딩을 하지는 않습니다.

객체지향 프로그래밍에 대해서 설명만 하는 포스트가 될 겁니다.

그리고 이 설명들이 한 번에 이해가 되지는 않을 겁니다.

처음부터 다 이해하고 넘어가려고 이걸 붙잡고 끙끙대지는 마세요.

원래 이해가 안되는게 당연한 겁니다.

처음부터 모든게 다 이해가 되는 사람이 있다면 그게 이상한 겁니다.

 

일단은 객체지향 프로그래밍이 무엇인지부터 대충 설명을 들은 다음에,

그다음에 코딩을 해보고.. 그러고 나서 다시 여기의 글들을 보면 '아, 이런 말이었구나~' 하면서 이해가 되실 겁니다.

(라고 저를 가르쳐준 선생님도 말씀하셨고, 유튜브의 선생님들도 그렇게 말하고 계십니다.)

 

 

 

객체지향 프로그래밍(Object Oriented Programming)이란?

 

 

코딩을 독학으로 처음 배우려고 했을 때 많은 도움을 받았던 생활코딩에서의 영상을 가져와봤습니다.

다시 말씀드리지만 봐도 무슨 말인지 모르실 겁니다.

그래도 한번쯤 직접 코딩을 하기 전에 이론 수업을 들어야 합니다.

 

 

 

지금까지 이 블로그에서 공부해온 자바는, 하나의 클래스 파일 안에서 모든 코드들을 짰었습니다.

이건 어떻게 보면 절차지향 프로그래밍을 해왔다고 말할 수 있습니다. (자바가 절차지향 프로그래밍 언어는 아니지만요.)

코드가 한줄 씩, 위에서 아래의 순으로 차례대로 실행이 됐고, 하나의 클래스 파일 안에서만 모든 프로그램을 다 짰었습니다.

 

그런데 이런 방식의 절차지향 프로그래밍이 객체지향 프로그래밍보다 나은 장점도 있긴 하지만 (객체지향보다 속도가 훨씬 빠릅니다.) 대신 프로그램의 유지보수가 어렵다는 단점이 있습니다.

긴 코드 안의 어딘가에서 에러가 터지면 그 에러를 잡아내는 것이 참 어렵습니다.

그 에러를 겨우 없애면 또 다른 곳에서 에러가 뜨고 말이죠.

 

그런데 여기저기서 다른 데이터를 불러들이고 조합해서 만드는 객체지향 프로그래밍은 에러가 떴을 때의 유지보수가 쉽습니다.

 

 

 

 

클래스(Class)와 오브젝트(Object)

 

객체지향 프로그래밍에서 절대 빼먹을 수 없는 두 가지의 단어입니다.

 

클래스Class는 실제 오브젝트(객체)를 제작하기 전에 설계하는 도면 혹은 틀이며,

오브젝트Object는 클래스(설계도)를 기반으로 실제로 메모리에 할당되는 것, 클래스 모양 그대로 생성된 실체를 말합니다.

 

비유를 하자면,

붕어빵을 만들어내는 틀이 클래스이고, 이 틀의 형태로 구워진 붕어빵이 바로 오브젝트(객체)입니다.

붕어빵은 틀의 모양대로 만들어지지만 붕어빵들은 서로 조금씩 다릅니다.

팥이 들어간 붕어빵, 크림이 들어간 붕어빵.. 그래도 이것들은 다 붕어빵입니다.

 

 

 

필드(Field)와 메소드(Method)

 

객체지향 프로그래밍에서 클래스(설계도)를 만들 때에는 크게 두 가지 섹션으로 구분이 됩니다.

바로 필드Field메소드Method인데요,

필드'데이터' 혹은 '속성' 이라고 말하기도 하고, 메소드'로직', '기능', '행동' 이라고 말하기도 합니다.

 

 

 

위의 이미지처럼 사람Person이라는 이름의 클래스를 만들었습니다.

 

빨갛게 표시된 부분이 필드입니다.

다른 말로 '데이터' 혹은 '속성' 이라고 했죠.

사람이라면 누구나 가질 수 있는 '데이터', '속성'들을 넣는 곳입니다.

위의 코드에서는 이름과 성별, 나이 등의 데이터를 넣었습니다.

 

파랗게 표시된 부분이 메소드입니다.

이전의 포스트들에서 계속 공부했던 그 메소드입니다.

메소드는 '로직', '기능', '행동' 이라고 했죠.

사람은 걷거나, 먹거나, 자거나, 말하거나, 생각을 합니다.

그러한 '기능', '행동'들을 메소드 안에 넣습니다.

 

 

 

 

자바, 메소드(method)의 기본 구조

이번에는 메소드method에 대해서 배워봅시다. 처음에는 분명 어렵고 복잡하게 느껴질 수도 있지만, 일단 해보면 조금씩 이해가 되실 겁니다. 지난 포스트 자바, 2차원 배열의 중복되는 코드를 for

gogogameboy.tistory.com

 

자바, 리턴 타입이 없는 메소드 (feat. void)

계속해서 메소드에 대해서 공부해보겠습니다. 이번에는 지난 포스트에서 공부한 '결과 값을 돌려주는 메소드'와는 달리, 리턴 타입이 없는, 아무런 결과 값도 돌려주지 않는 메소드를 만들어보

gogogameboy.tistory.com

 

 

 

 

객체지향 프로그래밍의 특징

객체지향 프로그래밍은 크게 4가지의 특징을 가지고 있습니다.

바로, 추상화 (Abstract), 캡슐화 (Encapsulation), 상속 (Inheritance), 다형성 (Polymorphism)인데요,

이것들은 정보처리기사 시험을 보실 분들은 한글뿐만 아니라 영어까지도 꼭 외워두실 필요가 있습니다.

시험에 나오기도 하는 녀석들이거든요. (영어로도 말이죠..)

흔히들 앞 글자 4개만 따와서 '캡상추다'라고 외웁니다.

 

 

 

추상화 (Abstract)

객체에서 공통된 속성과 행위를 추출하는 기법입니다.

코드 상에서 구현(로직) 부분을 제외한, 오직 선언 부분만을 설계하고,

상세한 정보는 무시하고 필요한 정보들만 간추려서 구성합니다.

 

 

 

캡슐화 (Encapsulation)

캡슐화란 객체를 캡슐로 싸서 내부를 보호하고 볼 수 없게 하는 것으로 객체의 가장 본질적인 특징입니다.

관련된 필드와 메소드를 하나로 묶고, 실제 구현 내용을 외부로부터 감추는 정보은닉 기법을 사용해서 만일의 상황(타인이 외부에서 조작)을 대비해서 특정 속성이나 메소드를 사용자가 조작할 수 없도록 숨겨 놓은 것을 말합니다.

 

 

 

상속 (Inheritance)

이미 작성된 클래스(상위 클래스)의 특성을 그대로 이어받아 새로운 클래스(하위 클래스)를 생성하는 기법입니다.

기존의 코드를 그대로 재사용하거나 재정의 할 수 있습니다.

 

 

 

다형성 (Polymorphism)

사전적 의미로는 '다양한 형태로 나타날 수 있는 능력'으로, 같은 기능(메소드)을 호출하더라도 객체에 따라 다르게 동작하는 것을 말합니다.

상위 클래스의 동작을 하위 클래스에서 다시 정의하여 사용하는 것 또한 다형성으로 볼 수 있습니다.

 

 

 

 

 

 

다음 포스트

 

자바, 간단한 객체지향 프로그래밍을 해봅시다.

지난 포스트에서 공부한 객체지향 프로그래밍을 이해하기 위해 간단한 코드를 짜보도록 하겠습니다. 지난 포스트 자바, 객체지향 프로그래밍 (OOP) 갈수록 점점 더 어려워집니다. 이번에는 메소

gogogameboy.tistory.com

 

 

 


이 글이 도움이 됐다면 하단의 공감 버튼을 꾹 눌러서
빨간 하트로 만들어주세요.
지인에게 보여주고 싶은 글이었다면
공감 버튼 옆을 클릭해서 SNS 공유해주세요.
댓글은 블로그 운영에 큰 힘이 됩니다.

 


 


댓글