프로그래밍/Java 9

[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일로 조건에 따라 날짜가 들어가도..