ProgrammingLanguage
-
자바(Java) 싱글턴 패턴(Singleton Pattern)ProgrammingLanguage/Java 2021. 1. 23. 12:28
*싱글턴 패턴 ->객체가 1개의 인스턴스만 가져야 하는 경우 사용하는 자바의 디자인 패턴 중 하나이다. ->장점 : 인스턴스가 1개만 생성되기 때문에 효율적인 메모리 관리가 가능하다. ->단점 : 동시에 해당 인스턴스를 공유하는 환경(특히, Multithread 환경)에서 동시성(Concurrency) 문제 고려로 인하여 프로그램의 유연성이 감소한다. ※이러한 동시성의 문제를 해결한 것을 Thread-safe하다 라고 한다. 여러가지 싱글턴 패턴(이른 초기화 방식, 게으른 초기화 방식...)이 존재하는데, 이 글에서는 이른 초기화 방식만 다룬다. *싱글턴 패턴 : 이른 초기화(Eager Initialization) ->이른 초기화는 static 예약어를 사용하여 정적 바인딩(Static binding)을..
-
자바(Java) BufferedReader 클래스ProgrammingLanguage/Java 2021. 1. 18. 23:53
자바의 BufferedReader 클래스를 사용하기 전에, 먼저 스트림(Stream)의 개념과, Scanner 클래스에 대해 먼저 간단히 이해 하는 것이 좋다. 잘 모른다면 아래 글을 참고하여 이해하도록 하자. sskl660.tistory.com/44 스트림(Stream)과 자바(Java)의 Scanner 클래스 *입출력 스트림(Stream) ->컴퓨터 공학에서 스트림은 연속적인 데이터의 흐름 혹은 데이터를 전송하는 소프트웨어 모듈을 말한다. 이름의 의미와 마찬가지로 스트림은 도착한 순서대로 데이터 sskl660.tistory.com *vs. Scanner ->BufferedReader 와 Scanner 클래스는 대표적인 Java의 문자열을 입력받는 클래스이다. 특히 알고리즘 문제 풀이시 대용량 데이터를..
-
스트림(Stream)과 자바(Java)의 Scanner 클래스ProgrammingLanguage/Java 2021. 1. 14. 21:22
*입출력 스트림(Stream) ->컴퓨터 공학에서 스트림은 연속적인 데이터의 흐름 혹은 데이터를 전송하는 소프트웨어 모듈을 말한다. 이름의 의미와 마찬가지로 스트림은 도착한 순서대로 데이터를 흘려 보낸다. ->스트림을 통해 흘러가는 데이터의 기본 단위는 바이트(Byte)이다. ->입력 스트림(Input Stream) : 입력 장치(마우스, 키보드, 네트워크...)와 프로그램이 연결되어, 입력된 데이터가 프로그램으로 순서대로 흘러간다. ->출력 스트림(Output Stream) : 프로그램과 출력 장치(모니터, 프린터, 네트워크...)가 연결되어, 출력 데이터가 출력 장치로 순서대로 흘러간다. ※위의 그림을 통해 스트림은 단방향이며, 선입선출(FIFO) 구조임을 알 수 있다. ->자바는 바이트 스트림과 문..
-
깊은 복사(Deep Copy)와 얕은 복사(Shallow Copy)ProgrammingLanguage/Java 2021. 1. 13. 23:15
깊은 복사와 얕은 복사를 이해하기 위해서는 값 복사와 주소 복사를 이해해두어야 한다. 잘 모른다면 아래 글을 참고하여 이해하도록 하자. sskl660.tistory.com/37?category=866784 메서드 Overloading과 매개변수 *변수의 중복 선언 ->변수의 경우는 데이터의 타입이 달라도 변수 이름이 동일한 경우를 허용하지 않는다. Ex) 다음과 같은 경우는 컴파일 에러가 발생한다. class Employee { String name; // age 변수가 in sskl660.tistory.com *얕은 복사(Shallow Copy) ->얕은 복사는 쉽게 말해 주소가 복사되는 것을 말한다. public class ShallowCopy { public static void main(Strin..
-
시간 복잡도 측정ProgrammingLanguage/Python 2020. 9. 20. 00:47
알고리즘 문제를 푸는 경우, 시간 복잡도를 분석해야하는 경우가 많다. 기본적으로 시간 복잡도를 항상 생각하며 문제를 푸는 것을 우선으로 하고, 만일 직관적으로 자신의 코드가 어느정도 성능을 가지고 있는지 파악하고 싶다면 아래와 같은 코드를 활용해보자. import time # 시간 라이브러리 함수 start = time.time() # 시간 측정 함수 # 측정하고자 하는 code end = time.time() print("time :", end - start) # 수행 시간 출력
-
딕셔너리(dictionary) 자료형ProgrammingLanguage/Python 2020. 9. 19. 23:10
딕셔너리는 키(Key)와 값(Value)의 쌍을 데이터로 가지는 자료형이다. 이름 그대로 사전을 생각하면 이해하기 쉽다. 예를 들어 평일을 딕셔너리 자료형을 이용하여 영어 사전 처럼 저장하고 싶은 경우, 다음과 같은 코드를 작성할 수 있다. week = dict() week['월'] = 'Monday' week['화'] = 'Tuesday' week['수'] = 'Wednesday' week['목'] = 'Thursday' week['금'] = 'Friday' 다음과 같이 바로 초기화 할수도 있다. week = {'월' : 'Monday', '화' : 'Tuesday', '수' : 'Wednesday', '목' : 'Thursday', '금' : 'Friday'} 딕셔너리 자료형이 중요한 이유는, 파이썬..
-
리스트 컴프리헨션/2차원 배열 초기화ProgrammingLanguage/Python 2020. 9. 19. 22:30
파이썬은 컴프리헨션(Comprehension)을 이용하여 반복 되거나 특정 조건을 만족하는 리스트를 쉽게 만들어낼 수 있다. 이것을 리스트 컴프리헨션(List Comprehension)이라고 한다. 이 외에도 딕셔너리 컴프리헨션, 셋 컴프리헨션이 있으니 참고하도록 하자. 리스트 컴프리헨션은 특히 파이썬에서 다차원 리스트를 초기화 하는 경우 유용하게 사용되므로 익숙해지도록 하자. 예를 들어, 0부터 9까지의 수를 1차원 리스트에 담고 싶은경우 일반적으로 다음과 같은 방법을 생각할 수 있다. arr = [0] * 10 for i in range(10): arr[i] = i 하지만 컴프리헨션을 이용한다면, 다음과 같이 한 줄의 코드 만으로 1차원 리스트를 초기화 할 수 있다. arr = [i for i in ..