관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

클래스와 객체 1 - 객체 지향과 자바 본문

프로그래밍 언어/자바

클래스와 객체 1 - 객체 지향과 자바

huenuri 2024. 8. 16. 02:59

드디어 객체 지향 프로그래밍 수업을 들을 시간이 되었다. 새벽 1시까지 엘리스로 클래스 공부를 마쳤고 이후에 1시간 정도는 집 정리와 청소를 하며 몸과 마음을 깨끗이 하는 시간으로 보냈다.

이제 산뜻한 마음으로 1시간만 더 공부를 하고 취침하려고 한다. 그리고 6시에 일어나서 공부를 다시 이어갈 것이다.

그럼 수업을 들으면서 공부를 진행해 보자!


 

 

 

 

객체 지향 프로그래밍

 

이 그림에서 무엇이 보이나?

 

처음에 보았을 때 새, 토끼 등 각각 다르게 보인다. 사람마다 보는 관점이 다른데 이것을 패러다임이라고 한다. 여기까지 수업이 진행되다가 갑자기 소리가 꺼져서 아무것도 들리지 않는다.

이 수업은 1/3은 이런 경우들이 대부분인 것 같아 수업을 들을 때마다 좀 그렇다.

 

 

 

 

 

 

패러다임이란 무엇인가?

 

 

 

 

 

 

 

 

 

 

 

 

절차적 프로그래밍 언어

 

절차적 프로그래밍은 어떤 순서에 따라 프로그래밍이 진행되는 것이다. C 프로그래밍처럼 실행하고자 하는 절차를 정하고, 이 절차대로 프로그래밍하는 방법을 절차 지향 프로그래밍이라고 부른다. 절차 지향 프로그래밍은 목적을 달성하기 위한 일의 흐름에 중점을 둔다. 자판기 소프트웨어를 구현하는 경우를 보자. 아래 그림과 같이 흐름도를 설계하고 흐름도상의 동작들을 함수로 작성하며, 흐름도에 따라 일련의 동작들이 순서대로 실행되도록 작성한다.

 

 

 

 

 

그러나  객체 지향 개념은 프로그램을 보다 실제 세상에 가깝게 모딜링하여 실제 세상의 물체를 객체로 표현하고 객체들의 관계, 상호작용을 설계한다. 그런 다음 각 객체를 클래스로 작성하면 프로그램이 완성된다. 자판기를 객체 지향 프로그래밍으로 구현하면 자판기를 이루는 여러 통들과 버튼들, 이들을 제어하는 자판기 엔진, 디스플레이 객체들을 추출한다. 이 객체들 사이의 관계를 설계한 뒤, 각 객체를 메서드와 필드로 작성하고 클래스로 캡슐화하면 된다.


 

 

 

 

 

 

 

 

 

 

객체 지향 프로그래밍 언어

 

 

 

 

 

 

 

 

패러다임은 개 발자가 가지는 관점을 말한다. 절차적 프로그래밍, 객체지향 프로그래밍도 패러다임 중 하나라고 할 수 있다.

 

 

 

 

 

클래스와 객체

 

 

 

 

 

 

 

 

클래스는 설계도이며, 객체는 인스턴스라고도 하는데 설계도를 사용해서 만든 실체를 말한다.

 

 

 

 

 

 

 

객체는 클래스라는 캡슐을 사용하며 필드(멤버 변수)와 메서드(멤버 함수)로 구성된다. 


 

 

 

 

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

 

 

 

 

 

 

1. 추상화

 

추상화는 어떤 사물을 간략한 형태로 표현한 것을 말한다. 이 코끼리를 보고 추상화한 것이 오른쪽의 그림이다. 이걸 보고도 코끼리라는 걸 떠올릴 수도 있다.

 

 

 

 

 

 

 

 

 

 

 

 

2. 상속

 

상위 개체의 속성을 하위 개체에게 물려주어, 하위 개체가 상위 개체의 속성을 모두 가지는 관계이다. 자바에서 부모 클래스를 슈퍼 클래스라고도 부르며, 자식 클래스를 서브 클래스라고 부른다. 상속은 슈퍼 클래스의 필드와 메서드를 물려받아 코드를 재사용함으로써, 코드 작성에 드는 시간과 비용을 줄인다.

 

 

 

 

상속의 예시

 

 

 

 

 

 

3. 다형성

 

다형성은 같은 이름의 메서드가 클래스 혹은 객체에 따라 다르게 동작하도록 구현되는 것을 말한다. 

  • 오버라이딩 : 동일한 이름으로 자신의 특징에 맞게 다시 구현하는 것
  • 오버로딩 : 클래스 내에서 이름은 같지만 서로 다르게 동작하는 메서드를 여러 개 만드는 것

 

 

 

 

 

 

 

4. 캡슐화

 

내부를 보호하고 볼 수 없게 하는 것으로 캡슐 약을 생각하면 이해하기 쉽다. 캡슐에 든 약은 어떤 색인지, 어떤 성분인지 보이지 않으며, 외부의 접근으로부터 안전하다.

객체는 캡슐화가 기본 원칙이지만 외부와의 접속을 위해 몇 부분만 공개 노출한다. TV는 내부를 캡슐화하고 On/Off, 밝기 조절, 채널, 음량, 리모컨과 통신하는 부분은 노출시킨다.


 

 

 

 

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

 

 

 

 

 

객체 지향 언어의 목적

객체 지향 언어는 절차 지향 언어의 단점을 보완하고 다음의 목적을 달성하기 위해 탄생하였다.

 

1. 소프트웨어의 생산성 향상

컴퓨터 산업이 발전함에 따라 소프트웨어가 시장에 나와서 사라지는 주기가 짧아지고, 새로운 소프트웨어의 필요성이 빈번하게 나타난다. 따라서 짧은 시간 내에 소프트웨어를 만들어야만 했다. 이러한 목적을 충족시키기 위해 객체, 캡슐화, 상속, 다형성 등 소프트에어의 재사용을 위한 여러 기법들을 가진 객체 지향 언어가 탄생하게 되었다.

객체 지향 언어는 상속을 통해 이미 작성된 코드를 재사용하기 쉬우며, 부분 수정을 통해 소트프웨어를 다시 만드는 부담을 대폭 줄일 수 있게 한다.

 

 

2. 실세계에 대한 쉬운 모델링

수학 계산이나 통계 처리 등이 주류를 이루는 과거에는 데이터의 처리 과정이나 계산의 절차를 잘 표현하는 절차 지향 언어가 적합했지만, 점점 컴퓨터가 산업 전반에 활용됨에 따라 실세계의 일을 프로그래밍해야 하는 경우가 더욱 많아지게 되었다. 하지만 실세계에서 일어나는 일을 절차 지향 언어를 이용하여 일련의 절차로 묘사하는 것은 힘든 작업이다. 실세계의 일은 절차나 처리 과정보다는 일과 관련된 많은 물체(객체)들의 상호 작용으로 묘사하는 것이 더 적합하다.

이에 실세계의 일을 보다 쉽게 프로그래밍하기 위해 객체를 중심으로 하는 객체 지향 언어가 부각되었다.


 

 

 

핵심 체크 문제 풀기


 

 

 

 

 

학습을 마치고

여기까지 객체지향 프로그랭에 대한 이론 학습을 진행해 보았다. 소리가 하나도 들리지 않아서 화면만 보고 이런 게 있구나 하며 이해했다. 대신 건너뛰는 내용이 많아서 학습 시간은 훨씬 적게 걸렸다. 

책에도 비슷한 내용이 있어 그 부분을 읽으면서 공부하면 부족한 부분을 매울 수 있을 것 같다.

 

책에 있는 내용을 함께 정리했더니 훨씬 더 이해가 잘 된다. 이제 클래스를 본격적으로 만들어볼 수 있을 것이다.