20201211(금)
흠.. 루비는 뭔가 이상하다
2020-12-11
1. 학습 날짜
2020-12-11
2. 학습 시간
09:00 ~ 22:00
3. 학습 범위 및 주제
루비
4. 학습 목표
루비 학습
5. 과제 제출
6. 상세 학습 내용
루비
루비는 완전 객체 지향 언어다.
심지어
nil
도 아무것도 없음을 가리키는 객체다
루비는 관습이 정말 중요하다. 심지어 스크립트 실행에도 영향을 미친다.
루비는 다중 상속이 되지 않는다. 그 대신
mix
라는 개념이 있다.이
mix
를 이용하기 위해서는모듈
을 사용해야한다. 모듈 또한 루비의 개념이다. 함수와 상수를 모아놓은 네임스페이스와 같은 개념이지만, 클래스에서 이 모듈을 하나 이상include
할 수 있다. include 하게 되면 모듈에 존재하는 모든 메써드와 상수들을include
한 클래스에서 자신의 것인거 마냥 사용할 수 있다.
배열과 해시가 있다.
배열은 인덱스가 정수고 해시는 인덱스에 무엇이든 올 수 있다.
존재하지 않는 인덱스에 접근하면
nil
을 리턴한다.
심볼이라는 또다른 개념의 상수가 있다.
다른 언어에서 상수를 사용하기 위해서는 특정한 값으로 선언 및 초기화를 해줬어야 한다.
루비에서 심볼이란 사용자는 그냥 사용하기만 하면 루비인터프리터가 알아서 상수화를 해주는 상수다.
즉 사용자는 초기화를 할 필요 없이 그냥 사용하면 된다.
프로그램 내에서 하나의 심볼은 모두 같은 값을 유지한다.
주로 해시의 인덱스로 사용된다.
해시의 인덱스로 사용하면 해시를 선언하는데도 코딩에 이점이 있다.
코드 블록
코드 블록은 반드시 메써드 뒤에 위치한다.
코드 블록을 정확히 정의하기에는 아직 공부가 부족한 것 같다.
메써드 내에서
yield
를 호출하면 코드 블록이 실행된다.메써드에서 코드 블록으로 인자를 건네줄 수 있다.
반대로 코드블록에서도 메써드로 인자를 줄 수 있다.
이 둘은 con-current 하게 동작한다고 보면 된다.
반복자
반복자의 정의는 코드 블록을 호출할 수 있는 메써드를 이야기 한다.
배열을 생각해보면 배열의 each 메써느는 코드 블록을 호출할 수 있다.
즉 메써드 내부에 yield가 있는것으로 보인다.
보통의 반복자는 메써드를 호출한 객체 집합의 모든 원소를 하나하나 yield을 이용해 코드블록으로 내보낸다.
열거자
배열이나 해시에 대해
to_enum
을 호출하면enumerator
객체를 얻을 수 있다.열거자 또한 반복자다.
열거자는
enum_test.next
와 같이 next를 실행하면 반복을 하나 진행한다.
loop
블록을 그저 반복적으로 실행하기만 하는 메써드다.
loop
을 사용할 때는 특정한 조건에 의해 반복이 정지되도록 하는게 중요하다.
7. 오늘 학습 내용에 대한 개인적인 총평
솔직히 아직은 잘 모르겠다. 지금 공부하는 방법이 조금은 나사가 빠진 방법인 것 같다. 정말 쓸모없는 강의에 너무 시간을 쏟았고, 또한 지금 보는 책이 프로그래밍 루비 라는 아주 유명한 책인데 이 책도 루비를 처음 보는 사람한테는 조금 무리가 있는 것 같다. 예제 실행하는 것도 참 힘들다;;
8. 다음 학습 계획
루비 공부
Last updated