프로그래밍/Java 10

[Java] Timer의 Fixed-rate Execution의 함정

앱에서 정확한 시간마다 작업을 수행해야할때 Timer.scheduledAtFixedRate를 사용하던 중, 기이한 로그가 발견되었다. 바로 아주 짧은 시간에 여러번 호출되는 현상! 문서를 보면 메소드에 대한 대략적인 설명은 이렇다. scheduleAtFixedRate(TimerTask task, Date firstTime, long period)Schedules the specified task for repeated fixed-rate execution, beginning at the specified time.지정된 시간부터 고정된 간격으로 반복적으로 작업을 수행하도록 예약한다. 이 "Fixed-rate execution"에는 함정이있다.메소드를 눌러 문서를 더 자세히 살펴보면 다음과 같은 문단을 발..

[Java] Buffer의 구조와 주요 메소드 다루기

Java NIO Buffer는 Channel과 상호작용할때 사용된다. Channel에서 Buffer로 데이터를 읽어들일 수 있고, 다시 Channel로 쓰여질 수 있다. Channel을 통하지 않고 Buffer를 직접 다룰 수도 있는데, Buffer의 구조와 주요 메소드들을 살펴보면서 알아보도록 하겠다. Buffer의 구조 Buffer는 데이터를 읽고, 쓸 수 있는 메모리 블록이다. 그리고 커서 역할을 하는 다음 3개의 속성 값들을 가지고 있다. capacity: 버퍼의 사이즈 position limit Buffer는 읽기, 쓰기 모드로 나뉘어지는데 각 모드에 따라 커서가 하는 일을 살펴보자. 쓰기 모드 (Write Mode) [ ][ ][ ][ ][ ]. ⭡ ⭡ position limit, capaci..

Java/Kotlin에서의 예외처리에 관하여

Java Exception Hierarchy Throwable은 모든 Exception 객체들의 부모 클래스다. 크게는 Error와 Exception으로 구분할 수 있고, Exception은 또 다시 Checked Exception과 Unchecked(Runtime) Exception으로 구분 된다. Error Error는 회복불가능한(non-recoverable) 오류다. 런타임에 Error가 발생하면 핸들링할 수 없다. 대표적으로는 메모리 부족(Out of Memory), 네트워크 포화(Network Saturation), 하드웨어 결함 등이 있다. Error를 인스턴스화 하거나 상속하거나, 직접 예외를 던지거나, 처리를 하려해서는 안된다. 위로 전파하는 것이 가장 좋다. Exception - Che..

Javadoc 알고 쓰기

Java 수업때 가장 등한시했던 부분이 바로 Javadoc이었는데 이제 정말 필요한 상황이 왔다. 코드를 작성하는 시간보다 코드를 다시 보고, 다른사람에게 설명하는데 쓰는시간이 배로 많다. 잘 작성된 Javadoc은 이런 비효율적인 일을 줄여줄 수 있다. 기계인간 Johngrib님의 포스팅과 javadoc 문서를 참고했다. 예시 코드는 Android Source Code다. 작성 원칙 코드의 역할을 3초안에 파악할 수 있도록하는 것이 목적이다. 가독성이 중요하다. 세부 구현은 언제든지 바뀔 수 있으므로 구현에 대한 내용은 적지 않는다. 루프를 돌아서 반환한다던가 하는 설명 @deprecated /** * Main Sidecar interface definition that will be used by t..

Stream의 개념을 설명할 수 있나요? (의역)

"Stream"이라는 단어는 실제로 그걸 사용할때 전달하고자하는 의미와 비슷해서 선택된 것입니다. 그냥 다 잊어버리고, 물줄기(Water stream)에 대해서 생각해봅시다. 강에 흐르는 물처럼, 우리는 흐르는 데이터를 받을 수 있습니다. 이 데이터가 어디서 왔는지 알 필요는 없죠. 이게 파일에서 오든, 소켓에서 왔든, 다른 어떤 것이든...정말 알 필요가 없습니다. 뭐 물을 받을 때도 마찬가지입니다. 이 물이 호수에서 오든, 분수에서 왔든간에 알 필요가 없습니다. 즉, 이 데이터가 어디서 왔는지 관계없이 데이터를 받는데에만 신경을 쓰게된다는 겁니다. 데이터의 흐름이 추상화된 것이 "Stream"이라는 것이죠. int ReadInt(StreamReader reader) { return Int32.Pars..

[Java] 문자열에서 URL만 추출하기

어떤 문자열에서 URL이 있으면 그것만 뽑아내고 싶을 때가있다. 그럴때 사용하면된다~ 만약에 문자에 URL이 없으면 빈 스트링 ""을 리턴한다. ftp, file 프로토콜도 포함하고있다. public static String extractUrl(String content){ try { String REGEX = "\\b(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"; Pattern p = Pattern.compile(REGEX, Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(content); if (m.find()) { return m.group(); } return ""; } ca..

Java 사다리 게임 소스

Java로 만들어본 간단한 사다리 게임 소스다.사다리는 랜덤하게 만들어지며, 대각선 길은 없다. (넘복잡 ㅎㅎ) STRAIGHT ( ㅣ )TURN_RIGHT( ㅏ )TURN_LEFT( ㅓ ) 라고 생각하면 된다. 주석으로 달아놓은 visit() 함수를 이용해서 해당 칸의 이미지를 업데이트해서 사다리를 타는 것처럼 효과를 내 볼 수도 있겠다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071public class main { public static final int STRAIGHT = 1; public static f..

객체 지향 프로그래밍, 자바

한 학기 동안 학교에서 Java강의를 들으면서 정리한 내용이다.간단히 자바에대해 파악하기 좋다. 00 Introduction 없음 01 Basic Concepts and a Sample 1. 언어의 분류- 기계어 (machine language)- 어셈블리어 (assembly language)- 절차적 언어 / 비절차적 언어 (procedural / nonprocedural language) 2. 자바의 특징- 1991년 SUN 마이크로 시스템즈의 James Gosling에 의해 탄생- 플랫폼 독립적, 적은 메모리 사용- Write Once, Run Everywhere- 소형 기기, 인터넷의 발달과 함께 성장- JVM 상에서 동작- 객체 지향, 객체를 기본 단위로 디자인 3. 클래스- Java에서 객체를..

Java 요일 구하기 계산 예제 / 소스 코드

1900년 1월 1일은 월요일이라는 점을 이용하여 요일 을 계산하는 프로그램이다. 아래 소스코드를 보면1) 연/월/일을 입력 받는 main()2) 구한 요일을 출력하는 PrintDay()3) 그 달은 총 몇일인지 계산하여 리턴하는 MonthDays()4) 그 날이 어떤 요일인지 계산하여 'X'요일을 리턴하는 DayofDate() 로 이루어져있다는 것을 알 수 있다. 계산 방법은 기준일자인 1900년 1월 1일로 부터 입력 받은 날짜까지 총 몇일 지났는지 알아낸다음,그 날짜를 7로 나눈 나머지에 따라 일/월/화/수/목/금/토 요일을 계산하는 것이다.일자 계산에는 1/3/5/7/8/10/12 월이라면 31일, 아니라면 30일, 평년 2월달이라면 28일, 윤년 2월달이라면 29일로 조건에 따라 날짜가 들어가도..