728x90

분류 전체보기 68

[Java] 추상클래스 vs 인터페이스

클래스는 크게 일반 클래스와 추상 클래스로 나뉘고, 추상 클래스란 클래스 내부에 추상 메서드가 하나 이상 포함되거나 abstract로 정의된 경우를 말한다. 반면, 인터페이스는 모든 메서드가 추상 메서드인 경우이다. 단순히 생각하면, 모든 메서드가 추상 메서드이냐 아니냐에 따라 추상 클래스와 인터페이스를 구분할 수 있을 것 같지만, Java8 이후부터는 default 키워드를 이용해 인터페이스에서 일반 메서드의 구현도 가능하기 때문에 확실한 차이점이라고는 할 수 없다. 그렇다면 추상메서드와 인터페이스는 뭐가 다른 걸까? 🤔 일단, 생김새도 다르고 사용하는 방법도 다르지만 하는 일은 비슷해 보인다. 하지만, 애초에 이 둘은 존재 목적이 다르다. 추상 클래스는 해당 클래스를 상속받아 기능을 이용하고, 확장시..

🌱Java | Spring 2022.06.14

[PostgreSQL] pgAgent

PostgreSQL에서 스케줄러를 통해 특정 쿼리 또는 프로시저를 실행시키고자 할 때, PostgreSQL의 pgAgent를 사용할 수 있다. pgAgent의 설치 방법과 사용법을 알아보자. 먼저 pgAgent를 설치하기 위해서는 당연히 PostgreSQL설치가 선행되어야 한다. PostgreSQL 설치 시 stackbuilder도 함께 설치하고, 설치가 완료되면 PostgreSQL 설치 폴더의 bin 파일 하위 stackbuilder를 실행한다. stackbuilder를 실행하여 다음과 같이 pgAgent를 선택하여 설치를 진행한다. 단계에 따라 설치하면 되고, 중간에 PostgreSQL 설치 시 지정했던 password와 window password를 입력하는 항목이 나오니 설치했던대로 입력하자! p..

💾DB 2022.06.10

[Python] deque

파이썬의 deque가 무엇인지 언제 사용해야 하는지 같이 알아보자. 🤔 보통 queue는 FIFO(First In First Out) 방식으로 작동한다. FIFO방식으로 작동하지 않는 양방향 queue가 존재하는데 그것이 바로 deque이다. 즉, 맨앞이나 맨뒤 양쪽 방향에서 원소를 추가하거나 제거할 수 있다. deque는 양 끝 원소의 append와 pop이 빠르다. 일반적인 List가 append와 pop연산에 O(n)이 소요되지만, deque O(1)으로 접근 가능하다. deque에 존재하는 method는 아래와 같다. - append(item) : 원소를 deque 오른쪽 끝에 삽입 - appendLeft(item) : 원소를 deque 왼쪽 끝에 삽입 - pop() : deque의 오른쪽 끝 원..

🐍Python | Django 2022.06.04

[Python] heapq

데이터를 정렬된 상태로 저장하기 위해 사용하는 파이썬의 내장 모듈인 heapq에 대해 알아보자. heapq 모듈은 binary tree 기반의 min heap 자료구조를 제공한다. min heap을 사용하면 원소들이 항상 정렬된 상태로 추가되고 삭제되며, min heap에서 가장 작은 원소의 값은 언제나 binary tree의 루트(인덱스 0)에 위치한다. 내부적으로 min heap 내의 모든 원소(k)는 항상 자식 원소들(2k+1, 2k+2) 보다 크기가 작거나 같도록 원소가 추가, 삭제된다. 아래의 그림으로 위의 조건을 만족시키는 간단한 min heap 구조를 보자. 우선 heapq를 사용하기 위해서는 다음과 같이 import 후 관련 함수를 사용할 수 있다. import heapq 파이썬에서는 보통..

🐍Python | Django 2022.06.03

[IntelliJ] IntellliJ 한글 깨짐 문제

IntelliJ를 사용하다 출력 메시지에서 한글이 깨지는 경우가 있어 ☹️ UTF-8 설정 방법을 찾아 정리해보고자 한다. 개발 시작 전 인코딩 설정을 먼저 적용한 후 개발을 시작하는 습관을 들이면 좋을 것 같다. 1. IntelliJ VM Encoding 설정 IntelliJ에서 사용할 가상 머신의 인코딩을 설정한다. 먼저, IntelliJ 설치 폴더로 이동하여, bin폴더 하위 확장자가 .vmoptions인 파일을 텍스트 에디터로 연다. 두 개의 vmoptions 파일 중 현재 운영체제 bit에 맞는 파일로 열면 된다. 맨 아래줄에 -Dfile.encoding=UTF-8 을 추가한 후 저장, IntelliJ를 다시 실행해본다. 파일을 찾기 힘들다면 IntelliJ 내부에서 VM 설정을 변경해보자. 상..

🛠️Tools 2022.06.02

[Java] String?

Java에서 문자열을 다루는 대표적인 클래스는 String, StringBuffer, StringBuilder가 있다. 연산이 많지 않은 경우 세 가지 중 어떤 클래스를 사용하더라도 상관없지만, 연산이 많거나 멀티스레드, Race condition 등의 상황이 자주 발생한다면 상황에 맞는 클래스를 사용하는 것이 성능에 이점이 있다. 어떤 상황에 어떤걸 쓰라는 말인가요..? 🙋‍♂️ 위의 세 가지 클래스에 대해 한번 알아보자. 먼저, String과 StringBuffer, StringBuilder의 가장 큰 차이점은 String은 immutable 하다는 것이다. String str = "Hello"; // String str = new String("Hello") str = str + " world!";..

🌱Java | Spring 2022.06.01

[Python] zip()

python에서 두 그룹의 데이터를 서로 엮어주는 내장 함수 zip()에 대해 알아보자. 기본적인 zip()의 사용법은 여러 개의 iterable한 객체를 인자로 받고, 각 객체가 담고 있는 원소를 짝지어 tuple형태로 반환한다. 아래의 예제를 보자. n_list = [1, 2, 3] s_list = ['A', 'B', 'C'] for z in zip(n_list, s_list): print(z) ''' (1, 'A') (2, 'B') (3, 'C') ''' 위와 같이 여러 그룹의 데이터를 하나씩 차례로 짝을 지어준다. 어떤 상황에서 zip을 유용하게 사용할 수 있나요? 🙋‍♂️ zip은 여러 그룹의 데이터를 한 번의 루프로 처리할 수 있다. 예를 들어 3개의 문자열 내의 글자를 하나씩 루프를 돌릴 필..

🐍Python | Django 2022.05.30

[Python] itertools

itertools란 효율적인 루핑을 위한 이터레이터를 만드는 라이브러리로 여러가지 함수들이 많이 있지만, 그 중 combinations(), combinations_with_replacement(), product(), permutations()에 대해 알아보자. - combinations(iterable, r) combinations는 iterable에서 원소의 개수가 r개인 조합을 뽑는 함수이다. 아래와 같이 사용할 수 있다. from itertools import combinations n_list = [1, 2, 3] print(combinations(n_list, 2)) ''' [(1, 2), (1, 3), (2, 3)] ''' - combinations_with_replacement(itera..

🐍Python | Django 2022.05.26

[Python] enumerate()

기본적으로 파이썬에서의 for 루프는 ' for 원소 in 목록: ' 형태로 작성된다. 목록 부분에는 리스트, 튜플, 문자열 등 iterable 한 데이터 타입을 사용할 수 있다. name = 'Mike' for s in name: print(s) # M # i # k # e 만약, 위와같은 코드에서 각 문자의 인덱스도 함께 출력하고 싶다면 어떤 방법을 사용할 수 있을까? 🤔 먼저 인덱스 변수를 따로 생성하여 인덱스와 함께 출력할 수 있다. strings = ['a', 'b', 'c'] i = 0 for s in strings: print(i, s) i += 1 # 0 a # 1 b # 2 c 위의 방법은 반복문이 끝난 뒤에도 i라는 변수가 그대로 남아있어 이상적인 방법은 아니다. 그렇다면 다음의 방법은..

🐍Python | Django 2022.05.25

[Python] Exception 추적

예외처리 예외가 발생했을 때, 아래와 같이 처리할 수 있다. try: ... except: ... else: ... finally: ... 위와 같이 try, except, else, finally 블록을 정의할 수 있고, try블록에서 예외가 발생하면 except블록에서 처리할 수 있다. else블록의 경우 try블록 하위에서 에러가 발생하지 않았을 때 실행되고, finally블록은 예외 발생 여부와 상관없이 실행된다. Stack trace 출력 예외가 발생하더라도 프로그램이 종료되는 것을 막기위해 아래와 같이 로그를 출력하고, 무시하도록 처리하였다고 해보자. try: A = 1 value = A[0] except: print("Index Error") 예외가 발생하더라도 프로그램이 종료되지는 않지만,..

🐍Python | Django 2022.05.23

[Python] Duck Typing?

파이썬은 덕타이핑을 지원하는 언어라는 말을 많이 들어봤는데 덕타이핑이 뭐지?? Duck Typing - If it walks like a duck and it quacks like a duck, then it must be a duck 해석해보면 "오리처럼 걷고, 오리처럼 꽥꽥거리면 그것은 틀림없이 오리다."라는 뜻이다. 🦆 파이썬에서 덕타이핑을 지원한다는 뜻은 동적 타입의 언어에서 본질적으로 다른 클래스라도 객체의 적합성은 실제 유형이 아니라 특정 메서드와 속성의 존재에 의해 결정된다는 말이다. 🤔 이렇게 들어서는 잘 이해가 되지 않으니 아래의 예시를 보자. class Duck(): def sound(self): print('꽥꽥') class Dog(): def sound(self): print('멍..

🐍Python | Django 2022.05.22
728x90