[ 프로젝트 BEP ] 최종장 - 엔지니어로서의 마인드셋에 대해 : 우수한 엔지니어는 누구이고, 가져야할 마인드 셋에 대해

이미지
  들어가면서 이제 2025년도 얼마 남지 않은듯 하다.  조금 길어질 수도 있기 때문에  실제로 업로드 하는 것은 새해 이후가 될 가능성도 있으나  올해는 이 글로 마무리 해보려고 한다. 이제 이 최종장을 끝으로 이 프로젝트를 다소 마무리 할 수 있을 것 같다. 물론 전체적으로 글 자체가 부족한 부분이 여려 곳 보이지만,  이는 천천히 개선하기로 하고 일단 마무리를 잘 지어보려고 한다. 이 프로젝트의 목표는 어디까지나 주니어 엔지니어(넓은 범위로서)에게  도움이 될 수 있는 부분을 정리해 놓은 것 이며, 이를 전달하는 것에 주력을 했다. 정확히는 그 사이에 몇 번이나 직장은 바뀌었지만,  내가 다니고 있는 회사에서 작게는 멘터,  크게는 주니어 교육에 활용하기 위한 초안이였다. 들어가기 앞서서 먼저 개발자는 무엇인가에서 부터 시작해서,  수학은 필요한가, 그리고 학위에 대한 이야기를 나누어보았고, 그 다음으로 컴퓨터가 무엇인가에 대해서는,  가장 첫 장인 컴퓨터 개론에서 메모리 손실과 함께 설명하였다. 다음으로는 개발 방법론과 시스템 설계,  그리고 프로그래밍 언어에 대한 이야기로 간단하고 이론적인 이야기를 하였다. 눈치가 빠른 사람은 알 수 있듯이,  현실에서 가질 수 있는 몇 가지 의문으로 시작해서  컴퓨터라는 하드웨어 부터 시작해서,  프로젝트(개발 방법론), 설계, 프로그래밍 언어 순으로  일부러 점점 컴퓨터 세계로 들어가도록 구성을 해 놓았다. 여기서 한 걸음 더 나아가자면, 알고리즘이 들어갈 수는 있겠으나  어디까지나 가볍게 전달하는대에 목적이 있기도 하고,  개인적으로는 당장은 크게 중요하지 않은 부분이 라고 생각 했기 때문이다. 먼저 이 부분에 대해서 좀 더 자세히 이야기해보도록 하자. 시작 부터 모든 지식을 쌓을 수는 없다 이는 개발 영역에서만 해당되는 이야기는 아니지만,  모든 것에는...

[ Ruby ] 30분만에 대충 살펴보는 Ruby의 기본 ②



난 Harsh를 모른다.
그렇기에 일단 코드를 복사 붙여넣어 결과물을 봤다.


정확히는 모르겠지만, 대충 
books라는 객체에 Hash를 추가하는 것 같다.

다음으로 넘어가자


튜토리얼에서는 이 블록({ })을 이야기하려고 했던것 같다.


Ruby는 메소드 뒤에 {} 을 붙여서 
추가적인 처리를 할 수 있는 것 같다.


이번에는 블록({})과 파이프 기호에 대해 설명하는 것 같다.

5.times의 결과물을 블록의 시작 부분에 파이프로 넘길 수 있다고 설명한다.

따라서 .times 메소드의 결과물은 
블록 내부의 time이라는 파이프에 넘기게 될 것이다.

이를 확인해보자.


예상대로 각 결과물이 화면에 표시되는 것을 알 수 있다.

다음으로 넘어가보자.


다음으로 괄호()에 관한 이야기 이다.

Ruby에서는 ()를 붙이건 붙이지 않건 올바르게 작동한다고 한다.

물론 개인적으로는 괄호를 명시해주는 것이 가독성이 좋다고 생각한다.


위에서 언급한대로 있건 없건 컴파일 에러는 나오지 않는것을 확인할 수 있다.

다음으로 넘어가자.


이번에는 메소드를 정의하는 방법에 대한 예제인것 같다.

위의 코드를 작동해보면


위와 같이 메소드의 이름이 출력되는데,
아무것도 정의되어 있지 않으면 메소드 이름을 출력하는 것 같다.

다음으로 넘어가자.


이번에는 메소드 내부를 채워서 결과물을 확인하는 것 같다.

실행해보자.


정의한 메소드의 숫자를 집어넣으면
위와 같이 숫자 만큼 puts이 실행되는 것을 확인할 수 있다.

다음으로 넘어가자.


다음은 실제 메소드를 실행하는 것인데 
나는 위에서 먼저 확인했었다.

다음으로 넘어가자.


다음은 메소드에 return을 넣어 반환값을 확인하는 것이다.

결과를 확인해보자.


결과는 함수 내부의 처리대로 3번 puts이 실행되고
마지막 코드의 puts에 의해 
tame(3)의 리턴 값이 표시되는 것을 확인할 수 있다.

다음으로 넘어가자.


이제 본격적인 메소드 제어에 관한 이야기를 시작하는 것 같다.

튜토리얼에서 셰익스피어의 책의 목록을 저장한
get_shakey라는 변수를 제공해주었다.


get_shakey를 실행하면 위와 같이 
셰익스피어의 책 목록들을 확인할 수 있다.

다음으로 넘어가자.


이 데이터는 JSON 형식으로 지정되어 있다고 한다.

이를 코드로 출력해보면


예제의 코드로 
s라는 변수에서 각 리턴 값들을 
key, val에 넣고 val값을 출력하는 것을 볼 수 있다.

다음으로 넘어가자.


위의 예제의 메소드는
특정 년도를 메소드의 매개변수로 집어넣을때
해당 년도에 셰익스피어가 작성한 희극의 수를 반환하는 메소드이다.

위를 실행해보면


해당 메소드에 1591를 넣으면 
각 타이틀이 puts에 의해 출력되고 
마지막에 .count메소드에 의해 길이가 출력되는 것을 알 수 있다.

다음으로 넘어가자.


다음은 2개의 년도를 입력하면 
그 사이에 있는 희극들을 출력해주는 메소드로 보인다.

get_shakey라는 JSON파일에서 
William Shakespeare라는 키 값을 찾아오고
받아온 Value 값을 .select{}에 넣어 검색하고
마지막으로 .each{} 메소드를 활용해 

파이프 라인에 변수를 넣어 해당하는 책의 타이틀과 년도를 출력하는 것으로 보인다.

실제 확인해보자.


위와 같이 타이틀 이름과 년도가 출력되는 것을 확인할 수 있다.

다음으로 넘어가자.


다음은 Ruby에 제어문에 관한 내용인 것 같다.


제어문은 다른 프로그래밍 언어들과 큰 차이는 없어보인다.

다음으로 넘어가자.


이번에는 비교 연산자인 equal에 관한 문제인 것 같다.

이 부분은 많은 프로그래밍 언어에서 '=='를 채택하고 있기 때문에 
Ruby도 ==가 아닐까 싶다.


=를 사용할 경우 a가 0인데도 불구하고
a가 100일 경우의 메시지가 출력되며, 옳지 않다는 메시지를 확인할 수 있다.

그럼 ==를 사용해보자.


위와 같이 올바르게 else의 루틴으로 들어가는 것을 확인할 수 있다.

다음으로 넘어가자.


이번에는 메소드 정의에 관한 내용인 것 같다.

위의 코드를 살펴보면 맨 상단에 끝에 ?가 달려있는 메소드를 볼 수 있는데
내가 알고 있는 다른 언어에서는 없는 특성이다.


if와 같은 문법을 활용할때 주의해야할 점은 
끝낼때 end를 꼭 붙어줘야 한다는 점이다.

또한 흥미로운 점은 마치 C언어의 매크로 처럼 
메소드를 제어한다는 점인데 조금 가독성은 떨어져 보인다.

이 블로그의 인기 게시물

[ Web ] 웹 애플리케이션 아키텍처 (Web Application Architecture)

[ Web ] 서버 사이드(Sever Side) ? 클라이언트 사이드(Client Side)? 1 [서론, 클라이언트 사이드(Client Side)]

[ Web ] 웹 애플리케이션 서버 아키텍처의 정의 및 유형 ( Define and Types of Web Application Server Architecture )