본문 바로가기
Flutter/Dart 입문

[Dart] 9. 객체지향 프로그래밍(OOP: Object Oriented Programming)

by Couldi 2021. 10. 20.
반응형

21. 10. 20.

- Could -

 

이 글은 프로그래밍 입문을 Flutter 때문에 Dart로 시작하는 사람들을 위한 글입니다.
프로그래밍 언어가 가지고 있는 기본 컨셉 자체를 Dart라는 언어를 통해 설명하고,
많은 분들이 Flutter를 위해 학습한다고 생각해, 추후 Flutter 학습에 도움이 되는 방향으로 작성되었습니다.
1. 객체지향 프로그래밍
    1) 객체지향 프로그래밍은 개발방법론이다.
    2) 객체는 명사다.
2. 어떻게 공부해야하는가?

 

함수까지 어떻게 선언하고 사용하는지 배웠다면 프로그래밍의 기초 중 왕기초에 해당하는 부분은 모두 배웠다고 할 수 있다. 그 다음으로 배워야할 개념은 클래스라는 녀석인데, 이 녀석이 엄청 중요하고, 요 개념을 제대로 이해하는 순간 코드의 많은 부분이 눈에 막 읽히기 시작한다. 하지만 프로그래밍 입문자들이 프로그래밍을 포기하게 되는 고비이기도 하기 때문에, 클래스를 배우기 전에 꼭 알았으면 하는 개념인 객체지향 프로그래밍의 개념부터 설명하고 넘어가도록 하자.

1. 객체지향 프로그래밍(Object Oriented Programming)

앞서 Dart 언어의 특징 중 객체지향 프로그래밍 언어라는 이야기가 있었다. 객체를 지향하는 프로그래밍. 일단 객체라는 단어부터 처음 들어보는 경우가 대다수일 것이다. 개발자들도 객체라고 하기도 하기 Object(오브젝트)라고 부르기도 하기 때문에, 일단 두 단어가 같은걸 얘기한다고 생각해 두는게 좋다.

 

https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

 

객체 지향 프로그래밍 - 위키백과, 우리 모두의 백과사전

객체 지향 프로그래밍(영어: Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러

ko.wikipedia.org

위키의 내용이 정말 잘 정리되어있다. 읽어보는걸 추천한다.

 

물론 저런 글을 읽어 척척 이해가되면 그 사람은 이미 초보자가 아닐 확률이 높다. 그래서 여기에 서술한 내용과 위키의 글을 참고하며 이해하면 어떤 개념인지 확실히 알수 있도록 정리해보겠다.

 

1) 객체지향 프로그래밍은 '개발방법론'이다.

'개발방법론' 이라고 해서 너무 어렵게 생각할 필요는 없다. 프로그래밍에서 조금 떨어져서 '언어 공부'에 대해 생각해보자.

우리는 어떤 언어를 모국어로 가지고 있던지, 일정 형식에 따라 문장을 구성해 소통한다. 보통 이때 사용하는 단어들을 문법적인 기능에 따라 명사, 동사, 형용사 등의 품사로 분류해 문법을 설명하는데, 우리가 글을 쓸때 어떤 요소가 가장 중요할까?

명사, 동사, 형용사를 모두 신경써야하는게 맞지만, 그 중에서 어느 부분에 신경쓰느냐에 따라 글의 모양이나 뉘앙스, 의미가 많이 달라질 수 있다.

개발방법론도 마찬가지다. 이건 프로그래밍 언어로 글을 쓸 때(코딩을 할때) 어떤 부분에 많이 신경을 써야하는지에 대한 내용이다.

그렇다면 객체지향 프로그래밍은 '객체'가 아직 뭔지 잘모르겠지만, '객체'를 중심으로 글을 써야한다는 이야기다.

 

2) '객체(Object)'는 명사다.

언어의 품사에서 가장 많은 비중을 차지하는 단어는 무엇일까? 어느나라 언어를 가져와도 '명사'가 압도적으로 많다고 한다. 그만큼 사람들은 일반적으로 명사에 동사를 붙여 문장을 만들어나가며, 다양한 명사를 만들어가며 언어를 사용하는데 익숙하다.

지금 아무 문장이나 생각해보자.

 

'배가 고픕니다.'

'밥이 먹고 싶습니다.'

 

정말 아무말이나 생각했다. 전부 명사로 시작한다. 명사를 놓고 동사나 형용사, 다른 명사 등을 붙여가며 문장이 만들어 진다.

우리에게는 이런 식으로 문장을 만드는 방법이 너무나도 익숙하다. 그래서 '객체'지향 프로그래밍도 명사를 중심으로 프로그래밍을 하자는 개발방법을 제시한다.

변수(variable) 같은 경우는 명사의 성격이 강하고, 함수(function)의 경우는 동사의 성격이 강하다. 다음 시간에 다룰 클래스(class)는 이 객체지향 프로그래밍의 근간을 이루는 개념이고, 공부하게되면 느끼겠지만 명사의 성격이 매우 강하다.

 

2. 어떻게 공부해야하는가?

그렇다면 객체지향 프로그래밍은 어떻게 공부를 해야하는가? 지금 Flutter를 공부하고 Dart를 사용하고 있다면, '내가 지금 작성하고 사용하는 방식이 객체지향 프로그래밍이구나!' 만 알면 된다. 이제부터 코드를 이해하려 할때 마다, 명사인 부분이 어디인지, 동사인 부분이 어디인지 생각해보며 읽어보면 왜 Flutter가, 왜 Dart가 객체지향이라고 하는지 이해가 쉬울 것이다.

 

클래스(class)에 익숙해지자.

앞에서도 설명했지만 클래스는 객제지향 프로그래밍의 근본이 되는 아주 중요한 녀석이다. 수단과 방법을 가리지 말고 이 개념을 명확히 알고 넘어가야한다. 클래스의 개념이 명확히 이해되는 순간, Flutter의 위젯과 코드들이 새롭게 보일 것이다.

 

용어를 명확히 공부하자.

프로그래밍을 공부할때 같은 내용을 설명하는 단어지만 굉장히 여러가지 단어를 사용하는 경우가 많다. 예를들어  return value를 이야기할때, 결과값, 리턴값, 리턴벨류, 리턴 등으로 표현하는 것처럼, 번역의 오류와 짧게 이야기하고 싶어하는 사람들의 특성은 한글, 한자, 영어가 합쳐진 끔찍한 혼종의 단어들을 많이 만들어 냈는데, 개발자마다 선호하는 단어나 설명할때 쓰는 단어가 조금씩 다를 수 있다. 그렇기에 공부하다가 모르는 단어가 나오면, 구글링을 통해 단어가 의미하는 바가 무엇인지 알고 넘어가는 습관을 들이는 것이 좋다.

 

네이밍에 신경을 쓰자.

코드를 작성하다보면 수많은 변수와 함수를 만들고, 클래스도 만들어야 할 경우가 매우 많다. 그럴때마다 내 창의력을 시험하듯, 각각에 이름을 지어주어야하는데 이게 또 만만치 않은 일이다. 그래서 처음 공부할때부터 변수나 함수, 클래스의 이름을 지을때 명확하게 지어주는게 습관을 들이는 것이 좋다.

몇가지 지키면 좋은 규칙을 제시하자면 다음과 같다.

  • 대소문자를 구분하자
    Dart와 Flutter를 사용하면 기본적으로 camelCase라는 형태로 변수명과 함수명을 짓게 된다. class를 명명할때는 첫글자를 대문자를 쓰는 PascalCase를 사용하는데, 코드를 짤때 이 규칙성에 유의해서 코드를 작성하는 습관을 들이기 바란다.
  • 기발한 이름보다는 기능을 명확히 나타내는 이름을 짓자
    개발을 하다보면 내가 지은 변수이름이 생각이 안나고, 내가 작성한 코드가 무슨 기능을 하는지 기억 못하게 된다. 이건 당연한거니 자신의 머리를 너무 자책하지 말자. 그렇기 때문에 이름을 지을때는 이 코드가 어떤 기능을 하는지 명확하게 이름을 지어주는게 좋다. 코드를 작성할때 변수명이나 함수명이 짧으면 물론 좋겠지만, 이름을 a, b, c 같은 식으로 지어놨다가 나중에 보고 코드 전체를 분석하며 고생하는 것보다는, 조금 길더라도 String age, void sayHi()  등으로 코드에서의 기능이 어느정도 유추되게끔 작성하는게 좋다.
    (주석으로 상세히 적어주면 좋지않냐고 물을 수는 있겠지만, 주석을 많이 적는 것은 좋은 방법은 아니다. 코드가 그냥 코드 그 자체로 읽히고 이해되도록 작성하는게 좋은 코드이다.)

이제는 단순히 코드만 작성하는데 만족할 것이 아니라, 어떻게 코드를 짜야 보기좋을지 고민해야하는 시점이다. Dart와 Flutter를 공부하는 입문자들이 정말 좋은건, Dart와 Flutter의 기본적인 포매팅이 엄청 깔끔한 코드 스타일을 반쯤 강요하고 있다는 점인데, 어떤 규칙을 가지고 코드들이 작성되고 활용되는지 조금만 생각해가며 공부해 나간다면, 다른 언어로 공부를 시작한 사람들 보다 깔끔한 코딩 스타일을 자연스럽게 가지게 될거라 생각한다.

반응형

'Flutter > Dart 입문' 카테고리의 다른 글

[Dart] 10-2. 클래스(class)  (4) 2021.10.27
[Dart] 10-1. 클래스(class)  (3) 2021.10.22
[Dart] 쉬어가기. Dart? Flutter?  (0) 2021.10.19
[Dart] 8. Function  (0) 2021.10.15
[Dart] 7. 반복문 : while, for, forEach, for (... in...)  (0) 2021.10.14

댓글