Tech/Lang

스칼라를 공부하면서 느끼는 스칼라란

glqdlt 2017. 5. 14. 14:36


스칼라는 함수형 언어가 아니다.

정확히는 멀티언어로 오브젝트와 함수형의 성격을 같이 갖고 있다.


자바는 피리미티어 타입이라 해서 (성능이슈)를 해결하고자, 순수 객체언어는 아니다.


스칼라는 순수 객체언어다.


오히려 순수 객체언어같다. 순수 함수형 언어는 아니다.

함수형언어는 함수를 사용하는 언어인데, 이 뜻은 타입세이프하다는 뜻이다. (A를 넣으면 A+1 이 되는거지 A+B??가 되는건아니다)


미사일을 발사할지, 로그를 찎으려ㅗ IO 에 접근할지 모른다. 이런걸 사이드 이펙트라고 한다.


자바는 타입추론이 뭐 같다.  가끔 유지보수를 하다보면 DTO 객체를 Object로 박아놓은 객체들을 종종 보곤 했는 데, 디버그하면서 충공깽을 느꼈다.



재밌는거는 var i = 1 이라고 스칼라에서 기입하면 int 로 되나


i.toString 으로 i를 스트링으로 치환한다고 하면


i == object 형인 integer 로 변환된다.


재밌는건 자바도 interger i = 1 이면 i.toString() 이 된다.


자바에서는 날짜나 시간 컨버팅이 없다. 자바8에 와서 좋아졌다. 스칼라는 기본적으로 날짜 시간 타입은 없다.

스칼라는 ScalaTime 이라는 라이브러리가 있다.


스칼라는 프리미티어 타입이 주다. (자바에 있는건 프리미티어 타입은 다 있다)


스칼라는 Object


캠페인형 오브젝트라는 게 있다. 자바의 스태틱하고 비슷하다.


캠페인형오브젝트는 오브젝트 obj 라는 가 있다면, obj 라는 클래스를 만들었을 시 obj 클래스는 캠페인형오브젝트기능을 쓸수있따.

이건 오브젝트 obj 의 모든 싱글톤 변수를 사용할 수 있따. private 이든 뭐든, 이으 ㅣ장점은 obj 를 생성하지 않고 내부의 변수만 접근할 수 있게 해준다.


스칼라에서는 class가 모두 public 이 기본이다. 메소드를 만들 떄에도 public 으로 들어간다.


스칼라 메소드 작성은


def 메소드이름 : 반환타입 = 반환값 ;

이렇게 되어있다. return 이 없음.


def 메소드이름(파라미터이름 : 파라미터 타입) : Unit(void같은거) = printLn("hello");


unit 을 생략가능한데, 안좋은 코드 습관이다. Unit 을 써서 코드가독성을 올려주자.


그리고 


뭘 하든간에 마지막에 있는 반환타입이 같은 값이 리턴이 된다.



자바에서는 클래스 파일 안에서 하나의 클래스 선언만이 가능하다.


자바 빈을 만들 때는 솔직히 롬복을 많이 쓰는데

개인적으로 벨리데이션 체크 같은 거 하기 위한 

코드가 필요할 떄 가 있어서 조금 짜증날 때가 있다.  ( 사실, 벨리데이션 체크를 하려는 클래스를 따로 만들어서 처리하는게 정석이다. )

그냥 개인적으로 플러그인 쓰는것을 탐탁치않아서 그렇다. 순수 지향주의랄까.. 음..







주변 경험에서 느껴지는 스칼라를 잘 안쓰는 듯한 이유.


1. 기능이 많다보니 너무 헤메이게 된다.


다양한 장점만 모았더니 어렵다. oop + fp 라서 더욱 헷갈린다. 어떤게 정답인지 모르곘다는 반응.


2. 자기주장이 약한 언어라 느껴진다.


나의 개인적인 생각으로 장점만 모았다보니 어떻게 보면 키메라 같은 느낌이든다. 


3. 기호로 된 문법체계가 많다보니 검색하기 어렵다.


구글에서 검색할 때, 특수기호에 대한 처리의 한계가 있다.



내가 스칼라를 하게 된 이유


자바개발자가 FP 를 맛보기 좋은 걸 얘기하라면 당연 스칼라기 때문이었기 때문, 이게 계기였고 (+ 겉멋)

아이러니 하게 스칼라 공부를 해야지 마음을 먹으면서 준비를 할 때

자바로 AKKA를 개발하고 있었다. 

필연처럼 Akka 때문이라도 언젠가는 스칼라를 했을거라는 이야기..

말이 샜는데 다시, 자바 개발자가 FP를 접하기 쉬운 스칼라라는 얘기에서..

같이 처음 시작한 회사 동료는 FP 개발론을 먼저 하고자 빨간책부터 학습하자고 얘기헀었다.

나는 당연하게 그냥 How to 식으로 시작하자고 했고, 결국 의견 충돌로 서로서로 알아서하고 장단점에 대해 리뷰를하자, 끝..

결과는 나혼자 아직도 스칼라를 하고 있고, 그 사람은 중도 포기했다.

다행히 나는 아직도 관심을 놓지 않고 있다고 하지만 개인 스터디 할 때 아직도 ; 세미콜론을 쓴다던지

OOP 틱하게 쓰고 있다, 창피하게도 말이다. 그래도 쓰고는 있다. 엣헴.

하지만 그렇다고 이게 잘못됬다고 말할순없다고 생각한다. 

거부감을 가질 필요없고, 점차 고쳐가면 된다 생각한다.


도구는 도구일 뿐이다. 사실 스칼라를 FP 위주로 쓰는건 맞다고 생각한다.

그렇다고 까이면서까지 거부감 들면서 안쓸 필요는 없다고 본다.


어떤사람은 스칼라를 스크립트 식으로 Amm 을 쓰면서 하는것도 봤다 (나프다의 케빈님)

사실 FP의 장점은 안정성측면에서 가장 좋다, 단점은 어렵다는 거다.

이 어렵다는 개념이 OOP에 익숙해져 있어서 좀 더 학습하기 어렵게 느껴진다.

나도 그렇고 한국의 대부분은 OOP 에 길들어져있고, 이미 OOP로도 개발이 가능하다.

그러다보니 거부감도 들고, 완전 딴 세상이라 생각하고 안하는 사람들을 많이 봤다.

그래서 든 생각이 어찌됬든 OOP틱하게 스칼라를 쓰든 뭐든 나중에 패치가 되거나 FP 틱하게 하려고 관심가지다 보면 변형되지 않겠나 이거다. -_-;


나는 회사에서 자바 개발자로 고용되어있고 자바로 일을 하고 있다.

내 선에서 해결할 수 있고, 주변에서 관심도 없는 로직이라면 보조로 스칼라를 적용해보고 있다.

최근에는 단순모듈에서 요즘 유행하는 마이크로 서비스를 비스므리하게 흉내내서까지 스칼라를 써보려고 노력하고 있다 ( 가 팀에서 쿠사리 먹었다, 스칼라 쓰지 말라고 음.. 반성 -_- )

개인 플젝에서는 웹앱을 제외하곤 스칼라로 개발하고 있다. 

최근에 하는 것을 예를 들면 스프링 기반의 웹앱에, 채팅서버를 스칼라 기반으로 개발해서 연동하고 있다. 왜 스칼라마저 웹앱을 안하냐 하면, 국내 정서에는 맞지 않는 개발루틴을 갖고 있다. (그리고 구직하려면 스프링이다..밥은 먹고 살아야지)


아무튼 이러이러한 이야기


너무 두서없이 썼는데 나중에 정리해야곘다.



'Tech > Lang' 카테고리의 다른 글

SBT on eclipse for scala  (0) 2017.05.29
vmware disk 100%  (0) 2017.05.23
Vertx 와 Akka에 대해 (Akka 만세)  (0) 2017.03.21
PlayForScala -1  (0) 2017.03.19
PlayForScala -0  (0) 2017.03.07