함수형 프로그래밍과 객체지향 프로그래밍
객체지향
C#, JAVA등의 프로그래밍 언어는 ‘객체지향 언어Object Oriented Programming‘이다. 줄여서 OOP라고 부르며, 객체지향 프로그래밍이 아니더라도 객체지향을 지원하는 프로그래밍 언어가 많기 때문에, 배워둔다해서 손해볼 것은 없다.
사람의 이름들은 모두 다양하고, 나이도 다양하고, 가진 기술도 다양할 것이다
1
2
3
4
5
6
7
8
9
사람1 = 이름 : 홍길동, 나이 : 22, 기술 : 파이썬
사람2 = 이름 : 김갑수, 나이 : 30, 기술 : C++
사람3 = 이름 : 이험용, 나이 : 28, 기술 : JAVA
.
.
.
사람999 = ...
사람이 더 늘어난다면 어떨까? 999.. 9999.. 그 때마다 이름, 나이, 기술의 변수를 선언해주고 그 안에 데이터를 입력해야 할 것이다. 만약 9999명의 사람변수를 만들었는데, 사람의 속성 값 중에 ‘성별’을 추가해야한다면? 9999개의 코드 전부에 성별을 추가해줘야하고 그 9999개의 코드 중에 스펠링에러가 날지, 변수의 이름을 잘못 선언할지 너무 머리가 아프기 때문에 해결책으로 등장하는 것이 객체와 클래스이다.
클래스는 객체를 만들기 위한 공장(여기서는 사람..을 만들기위한 공장?이다)이라고 생각하면 된다. 클래스 안에는 객체들의 ‘같은 속성’을 가지고 있는 설계도라고 생각하면된다. 사람이라는 클래스는 이름과 나이, 기술이 있다고 만들어주는것이다.
그런 설계도(클래스)를 만들어 준 이후에는 코드에 길동 = 사람(홍길동, 22, 파이썬)
이라는 사람이라는 ‘객체’를 만들고 그 사람의 객체 안에는 이름, 나이, 기술이라는 속성이 들어있게 선언해주는 것이다.
그리고 클래스 안에는 메서드를 만들 수 있는데, 클래스에서 사용가능한 함수를 생각하면 된다. ‘인사를 하는 메서드’, ‘이름을 말하는 메서드’ 같은 메서드들을 클래스 안에 만들어두기만 하면 객체들은 그 메서드를 사용할 수 있는 것이다.
클래스 - 객체를 만들기 위한 공장 메서드 - 객체에 액세스하거나, 조작할 수 있는 기능
상속
이 OOP에는 상속이라는 아주 중요한 개념이 있다. OOP를 더 매력있게 만들어주는 기능 중 하나인데, 현실에서 상속이라함은 재산을 물려준다거나하는등의 뜻을 가진다. 프로그래밍에서의 ‘상속’은 비슷하지만 살짝 다르다(현실에서 상속은 재산을 물려주니까 윗 세대(부모)의 재산이 사라지는데, 프로그래밍에서는 상속해도 그대로 가지고있다는점?).
상속은 흔히 부모와 자식의 관계로 나눌 수 있는데, 부모의 클래스를 자식 클래스가 상속하면 그 상속한 부모 클래스의 속성을 이어받는다. 예를 들어
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Human{
constructor(name){
this.name = name;
this.eyes = 2;
this.nose = 1;
}
}
class Baby{
constructor(name){
this.name = name;
this.eyes = 2;
this.nose = 1;
this.cute = true;
}
cry(){
return "으앙";
}
}
class Teen{
constructor(name){
this.name = name;
this.eyes = 2;
this.nose = 1;
this.emotional = false;
}
cursetheworld(){
return "..."
}
}
의 코드를 보면 클래스 Baby와 클래스 Teen 은 공통된 Human의 특성을 가지고있다. 이 때 Baby와 Teen 전부에 공통된 특성을 적어주는게 아니라
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Human{
constructor(name){
this.name = name;
this.eyes = 2;
this.nose = 1;
}
}
class Baby extends Human{
constructor(name){
this.cute = true;
}
cry(){
return "으앙";
}
}
class Teen extends Human{
constructor(name){
this.emotional = false;
}
cursetheworld(){
return "..."
}
}
의 코드로 적어줄 수 있다. 이 때 Baby와 Teen은 Human클래스의 속성을 전부 다 가지고 추가적으로 다른 속성을 추가해줄 수도 있다.
함수형 프로그래밍
함수형 프로그래밍은 코드를 작성할 때 함수를 쓰는 새로운 방식을 말한다. 함수형 프로그래밍을 하면 버그를 쉽게 찾을 수 있고, 코드를 깔끔하게 쓸 수 있다는 장점이 있다.
명령형 코드와 선언형 코드간의 차이를 살펴보자
명령형 코드
명령형Imperative 코드는 원하는 결과를 얻기 위해 필요한 지침을 달성하며 코드를 작성한다.
선언형 코드
선언형Declarative 코드를 작성하면 원하는 결과를 작성하기 위해 코드를 작성한다.
선언형 코드는 명령형 코드에 비해 무슨 일을 하고 있는지 알기 쉽다.
명령형 코드는
1
2
3
4
5
6
저장할 변수 = ""
반복문{
조건을 실행할 변수 = ""
실행할 기능
}
이라면 선언형 코드는
1
저장한 함수("", "")
의 형태이다. 보기가 직관적이고 쓰기가 간편하다.
이렇게 작성된 선언형 코드에는 명령형 코드가 작성되어있다.
즉 선언형 코드는 명령형 코드 위에 작성되어진다.
댓글남기기