Language & Framework

    [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로 올라가서 토..

    [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..

    [JAVA] 소켓(socket) 프로그래밍

    소켓 프로그래밍 소켓(socket) 이란 프로세스간의 통신에 사용되는 양쪽 끝단을 의미한다. 자바에서는 java.net패키지를 통해 소캣 프로그래밍을 지원하는데, 소켓 통신에 사용되는 프로토콜에 따라 다른 종류의 소켓을 구현하여 제공한다. 1. TCP(Transmission Control Protocol) 인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜. 일반적으로 TCP와 IP를 함께 사용하는데, IP가 데이터의 배달을 처리한다면 TCP는 패킷을 추적 및 관리한다. TCP는 연속성보다 신뢰성있는 전송이 중요할 때에 사용하는 프로토콜로 예를 들면 파일 전송과 같은 경우에 사용한다. 패킷(Packet)이란? 인터넷 내에서 데이터를 보내기 위한 경로배정(라우팅)을 효율적으로 ..

    [JAVA]입출력 IO & NIO

    입출력이란? I/O란 입력과 출력, 컴퓨터 내부 또는 외부의 장치와 프로그램간의 데이터를 주고 받는 것을 말한다. 스트림(stream) 스트림이란 데이터를 운반하는데 사용되는 연결통로이다. 스트림은 단방향통신만 가능하기 때문에 하나의 스트림으로 입력과 출력을 동시에 처리할수 없다. 그래서 입력과 출력을 동시에 수행하려면 입력을 위한 입력스트림과 출력을 위한 출력스트림 모두 2개의 스트림이 필요하다. 스트림은 먼저 보낸 데이터를 먼저 받게 되어 있으며 중간에 건너뜀 없이 연속적으로 데이터를 주고받는다. 큐와 같은 FIFO(First In First Out) 구조로 되어 있다고생각하면 이해하기 쉬울 것이다. 바이트 기반 스트림 ( InputStream, OutputStream ) - 입출력 되는 데이터를 단..

    [JAVA] 자바 컴파일은 어떻게 동작할까?

    Write Once, Run Anywhere! 자바 이전에 C/C++과 같은 언어는 컴파일을 리눅스에서 했다면 리눅스에서만 실행이 가능했다. 즉 컴파일러가 OS에 종속되어 해당 OS에 맞는 컴파일러를 각각 사용해야 했던 것이다. 자바는 OS에 관련없이 JRE만 설치되어 있다면 어떤 OS에서도 자바를 컴파일하고 실행이 가능하다. 이를 보완하기 위해 나온 JVM은 가상환경에서 컴파일을 하는 방식으로 모든 OS에서 하나의 JVM으로 실행 및 컴파일 할 수 있게 하였다. JAVA 컴파일과정 및 메모리 구조 Java 컴파일 과정 .java 파일 생성 후 Build -> compile(javac) -> byteCode .class file(반기계어) 이렇게 생성된 자바 바이트 코드는 클래스 로더에 의해 JVM내로 ..