분류 전체보기

    [Node.js] Slack 봇으로 일정 시간마다 DM 발송하기

    42Seoul의 캐비닛 대여 서비스 배포를 앞두고 반납기한이 임박한 유저를 대상으로 슬랙 메세지를 발송하는 슬랙봇을 만들어봤다. 대여 성공시 & 매일 오전 9시를 기준으로 반납일이 다음 날인 학생을 대상으로 슬랙 메세지를 발송한다. 슬랙 봇을 생성하는 과정은 생략하겠다. https://api.slack.com/apps 위 주소로 접속 후 슬랙봇을 생성하였다면 Features -> OAuth & Permissions -> Scopes 에서 지정한 워크스페이스에서 봇이 사용할 권한을 설정할 수 있다. DM 발송을 위한 chat: write 과 워크스페이스에 있는 유저 정보를 읽어오기 위한 user:read 를 추가했다. 권한을 추가한 후 OAuth Tokens for Your Workspace로 올라가서 토..

    [42Seoul] Philosophers : 뮤텍스와 세마포어

    이번 과제는 Dining Philosophers Problems (철학자들의 만찬 문제)를 Mutex를 사용해 멀티스레드를 구현하는 문제이다. Dining Philosophers Problems 이란? 철학자들의 만찬문제는 n명의 철학자가 원형 테이블에 앉아있으며 양쪽에는 포크가 놓여져 있고 테이블의 중간에는 음식이 있다. 각 철학자는 양쪽의 포크를 모두 집어야만 음식을 먹을 수 있으며 일정시간 음식을 먹지 못하면 죽는다. 음식을 다 먹으면 포크를 내려놓고 생각을 시작하며 일정시간 생각이 끝나면 다시 포크를 들고 음식을 먹는다. 여기서 철학자는 process / thread 가 되며 포크는 공유자원이 된다. 이 문제는 교착 상태(Deadlock)을 잘 설명하는 예시이며 교착 상태가 발생할 수 있는 4가지..

    [JAVA] :: 자바 기초 6 :: 인터페이스 (Interface)

    👀 노션으로 보기 0. 인터페이스란? 인터페이스는 일종의 추상클래스로 추상메소드, 상수만 포함 가능 💡 자바 8 부터 default 메소드, static 메소드를 인터페이스의 멤버로 사용가능 추상 클래스처럼 new 를 이용한 객체생성을 할 수 없다. 인터페이스의 선언과 상속 interface InterfaceName { } class ClassName implements InterfaceName{ } 1. 인터페이스를 쓰는 이유 그렇다면 추상 클래스를 사용하지 않고 인터페이스를 쓰는 이유가 무엇일까? 인터페이스는 추상 클래스 보다 더 추상적인 개념이다. 추상 클래스는 구현 메서드도 포함을 할 수 있어 확장의 개념이라면 인터페이스는 구현 코드가 없어 기능 구현을 강제한다. 추상 클래스는 다중상속을 지원하지..

    [JAVA] :: 자바 기초 5 :: 다형성 / InstanceOf / Abstract Class / Upcasting & Downcasting

    다형성(polymorphism) 객체지향에서 다형성이란 "여러가지 형태를 가질 수 있는"이란 뜻이다. 자바에서는 상위 클래스 타입의 참조변수로 하위 클래스의 인스턴스를 참조할 수 있도록 하는 것이다. class Animal{ void run(){System.out.println("달리자");} } class Cat extends Animal{ void eat(){System.out.println("츄르먹자");} } class Polymorphism{ public static void main(String[] args) { Animal cat = new Cat(); cat.run(); // cat.eat(); error } } 실제 생성된 인스턴스는 Cat 타입이지만 Animal 타입으로 참조되었다. 이..

    [JAVA] :: 자바 기초 4 :: 상속 / 오버라이딩(overriding) / IS-A vs HAS-A / 가상함수

    상속(Inheritance) 상속이란, 기존에 있던 클래스를 재사용하여 새로운 클래스를 생성하는 것이다. 즉 상속을 받는 클래스는 상속하는 클래스의 멤버변수와 메소드를 상속받는다. 상속하는 클래스 : 상위 클래스, 부모 클래스, base class, super class 상속받는 클래스 : 하위클래스, 자식 클래스, derived class, sub class 기존에 있던 클래스보다 더 구체적인 기능을 가진 클래스를 구현해야할 때 기존 클래스를 상속을 하게된다. 자식 클래스는 부모 클래스의 멤버들을 상속 받게 되어 자식클래스는 부모 클래스를 포함하는 형태가 된다. 상속은 아래와 같이 extends(확장)를 사용해 작성한다. class Child extends Parent{ } extends 뒤에는 단 하..

    [JAVA] :: 자바 기초 3 :: Static / Singleton Patton / Array / ArrayList

    Static 이란? static은 정적인, 고정된이란 의미로 컴파일 단계에서 클래스로더가 클래스를 로딩할 때 함께 메모리에 할당되어 프로그램이 종료될 때까지 유지되는 메모리를 말한다. static은 클래스, Method, 상수 등과 함께 Method Area에 클래스 별로 저장되어 관리하며 모든 쓰레드가 공유한다. 즉 모든 인스턴스가 하나의 주소를 가리키고 있어 하나의 값을 공유한다. static 키워드를 가지는 메소드와 변수를 클래스 메소드, 클래스 변수 혹은 정적 필드, 정적 메소드라고 부른다. static 키워드가 붙은 멤버는 객체에 소속된 것이 아닌 클래스에 소속되어 있기 때문이다. 정적 멤버 선언 class Sclass{ static int cVar = 123; //클래스 변수 선언 및 초기화 ..

    [JAVA] :: 자바 기초 2 :: 생성자 / 오버로딩 / 접근제어자 / 정보은닉

    생성자 생성자는 클래스에 선언되어있는 클래스와 동일한 이름을 가지고 있는 메소드이다. 생성자는 객체를 생성할때 호출된다. 생성자와 메소드의 형태 차이 메소드 생성자 구현부 return형 메소드명 (파라미터 1, 파라미터2,,,) 클래스명(파라미터 1, 파라미터 2,,,) ex) int Sum(int a, int b) ClassName(int a, int b) 이처럼 생성자는 리턴형을 사용하지 않으며 클래스와 동일한 이름을 가진다. 파라미터를 받아 멤버변수의 초기화를 위해 사용할 수 있으며 명시적으로 작성하지 않는다면 자동으로 기본생성자가 제공된다. 이렇게 기본으로 생성되는 생성자를을 디폴트 생성자라고도 부른다. 디폴트 생성자는 precompile 단계에서 추가가 된다. 만약 파라미터가 있는 생성자를 구현..

    [JAVA] :: 자바 기초 1 :: 객체 / 클래스 / 인스턴스 / 속성 / 함수 / 메소드

    자바는 대표적인 객체지향(Objecti Oriented Programming) 언어이다. C언어와 같은 절차지향언어와 다른점은 자바는 모든 데이터를 객체로 취급하여 객체 중심으로 작성된다는 점이다. OOP의 장점에는 코드의 확장성과 재활용성, 유지보수가 절차지향에 비해 개선되는 점이 있다. 이러한 객체를 만들고 구성하는 개념들을 알아보자. 객체(object) 객체란 object, 존재하는 사물 혹은 개념, 논리와 같은 무형적인 것들도 객체라 정의할 수 있다. 예를 들어 사람, 차, 책 등 물리적으로 존재하는 것과 개념적인 주문, 계산 등도 객체가 될 수 있다. 객체는 각각 독립적으로 존재하며 다른 객체와 서로 상호작용을 할 수 있다. 자바에서는 클래스에서 생성된 데이터를 객체로 정의한다. 클래스(clas..

    [42 Seoul] Minitalk : signal 함수로 IPC(Inter-Process Communication) 구현

    1. signal 이란 시그널(signal)은 software interrupt 로 프로세스 간의 비동기적 이벤트와 데이터를 공유, 전송할 수 있도록 운영체제에서 제공되는 IPC 중 하나이다. signal을 프로세스에 보내면 각 signal에 지정된 동작을 수행한다. 2. signal 함수 signal signal 함수는 에 정의되어 있으며 시그널을 받아 지정된 함수를 실행할 수 있다. signal(SIGINT, (void *)sig_handler); 아래는 signal의 종류이다. SIGHUP 터미널 연결이 끊어졌을 때 이 터미널과 연결된 세션 리더 또는 세션에 속한 모든 프로세스들에게 보내지는데 이 시그널을 받으면 종료 SIGINT 터미널에서 인터럽트 키를 눌렀을 때 보내지는데 이 시그널 받으면 종료..

    [42Seoul] Push_Swap : 정렬 알고리즘 구현

    1. 게임 규칙 이 게임은 a와 b라는 이름의 두 개의 스택으로 이루어져 있고 게임은 다음과 같이 시작한다. a는 서로 중복되지 않는 음수 혹은 양수인 난수들을 포함한다. b는 비어있다. 이 게임의 목표는 스택 a에 오름차순으로 수를 정렬하는 것이다. 정렬을 위해 다음 명령어들을 수행할 수 있다. 명령어 기능 sa : swap a 스택 a의 가장 위에 있는 두 원소의 위치를 서로 바꾼다. sb : swap b 스택 b의 가장 위에 있는 두 원소의 위치를 서로 바꾼다. ss : sa + sb sa와 sb를 동시에 실행한다. 명령어 기능 pa : push a 스택 b에서 가장 위(탑)에 있는 원소를 가져와서, 스택 a의 맨 위(탑)에 넣는다. 스택 b가 비어 있으면 아무 것도 하지 않는다. pb : push..