전체 글 (190) 썸네일형 리스트형 package manager Yum은 red hat linux의 package manager Brew는 Mac의 package manager .gitignore file 생성 방법 https://www.toptal.com/developers/gitignore 위 링크에서 생성하면 된다. 내가 사용하는 언어, 프레임워크, 빌드툴, IDE 등을 적어준 후 생성하면 그 옵션을 고려하여 깃저장소에 올리지 말아야할 것들을 자동으로 적은 스크립트를 리턴해준다. 예를 들어, 파이썬과 장고, 파이참을 사용한다고 가정한다면, Python, Django, PyCharm 을 적어주고 create 버튼을 눌러주면 된다. DI(Dependency Injection) 루비에서는 DI 코드를 만들 수 있고 의존성을 보내는 주체는 개발자이다. 프레임워크를 사용했을 시 의존성을 프레임워크가 보내주는 것이다.(IoC) 또한 레일즈 이야기를 하자면, 스프링에서는 DI를 제공해주는 반면, 레일즈에서는 DI를 제공하지 않는다. 왜냐하면 스프링처럼 빈(스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트)을 관리하면서 외부 모듈이나 클래스가 필요한 클래스에 주입을 해주는 기능이 없기 때문이다. 그래서 레일즈에서는 다른 모듈이나 클래스에 접근하고 싶을 때, 직접 생성해서 접근한다. 이러한 이유로 결합도가 높은 코드가 나올 수 밖에 없는 것이다. 1. 의존성 이야기 잘 디자인된 객체는 하나의 책임만 지고 있다. 그래서 복잡한 환경을 표현하기 위해 다른 객체와 협업을 할 수밖에.. instance variable encapsulation 루비에서 인스턴스 변수는 디폴트가 private이다. 그래서 접근하려면 attr_reader, attr_writer, attr_accessor로 변수를 지정해줘야 외부에서 접근 가능하다. 여기에서는 인스턴스 변수 캡슐화에 대해서 알아보자. class InstanceAi attr_reader :data def initialize(data) @data = data end def plus(v) data + v end end ins = InstanceAi.new(1) puts ins.data puts ins.plus(2) ##### ===> result 1 3 1. attr_reader, attr_writer, attr_accessor 이 3개의 예약어는 인스턴스 변수에 wrapper method를 제공해준다... 상속 vs 믹스인(mixin) 루비만의 모듈 사용 방법이다. 이 방법을 이용하면 다중 상속 문제나 굳이 상속을 할 필요가 사라진다. 루비는 단일 상속을 지원하는 언어이고 믹스인을 통해 다중 상속을 간접적으로 지원한다. 1. 그렇다면 상속이 아닌 왜 믹스인을 써야 할까? 정답은 상황에 따라 다르다. 상속을 사용해야 하는 상황은 리스코프의 치환 원칙으로 설명할 수 있다. 이 원칙은 "타입 T 객체 x에 관해 참이 되는 속성을 q(x)라고 한다면, S가 T의 자식이라면 타입 S의 객체 y에 대해 q(y)도 참이 된다."로 설명할 수 있다. 즉, 부모 클래스의 객체는 모두 자식 클래스의 객체로 바꿔서 사용할 수 있고 자식 클래스는 한 종류의 부모 클래스라고 말할 수 있어야 한다는 의미다.(is-a) ex) 자동차는 운송 수단이다. 즉, is.. MSA 1. MSA(MicroServiceArchitecture)란? 단순한 프로토콜(HTTP와 JSON)로 통신하는 작은 서비스를 지향한다. 느슨히 결합된 작은 분산 서비스 애플리케이션 기능을 분해하고 분리해서 완전히 상호 독립적이어야 한다. 코드와 소스 관리 저장소, infrastructure(app server and database)가 이제 애플리케이션의 다른 부분과 완전히 독립적 그래서 각 기능은 독립적으로 빌드와 테스트, 배포 가능. 2. MSA features divide an application into small applications 각 애플리케이션은 상호 독립적 재사용성 HTTP와 JSON 사용 서비스가 작아서 클라우드에서 많은 서비스 인스턴스를 쉽게 시작 가능하고 확장성도 높일 수 있음 .. 블록 1. 블록이란? 블록은 중괄호 {} 나 do와 end 키워드로 둘러싸인 코드 덩어리다. 일반적으로 한 줄에 블록을 작성할 수 있다면 중괄호를 사용하고 그렇지 않으면 do와 end 키워드를 사용 블록은 익명 메서드의 본문과 비슷한 무언가라고 생각해도 무방 2. 블록 사용 방법 ids = [1,2,3,4,5] sheets = [] ids.each_slice(3) { |idxs| sheets += Sheet.where(id: idxs) } or ids.each_slice(3) do |idxs| sheets += Sheet.where(id: idxs) end 이렇게 두 가지 방식으로 쓸 수 있다. each_slice() 함수의 로직을 확인해보면, def each_slice(n) block_given? ? (yi.. 루비에서 람다식이란 루비를 사용한다면 람다식을 절대 빼놓고 설명할 수 없다. 루비 언어는 전통적인 for문을 사용하지 않고 list.each 함수를 사용한 후블록 문에 람다(이름 없는 함수)식을 넣어서 처리한다. 1년 동안 람다를 사용하면서 느낀 거지만, 루비에서 람다를 사용하는 이유는 편하고 직관적이고 이해하기 쉽고 적은 코드로 많은 내용을 표현할 수 있기 때문이라고 생각한다. 물론 단점은 람다식에 익숙하지 않으면 이 식에 적응하고 이해하는데 시간이 걸린다는 것이다. 자 그럼 람다식에 대한 예시를 들어보겠다. 1. 람다식 사용 ids = [1,2,3,4,5] sheets = [] ids.each_slice(3) { |idxs| sheets += Sheet.where(id: idxs) } 블록에 서브 id 리스트를 넘겨주.. 이전 1 ··· 8 9 10 11 12 13 14 ··· 24 다음