Java 예제: URL로부터 파일 다운로드(ReadableByteChannel 이용)

웹브라우저를 통하지 않고 자바 자체에서 파일 다운로드를 하는 예제입니다. Channels는 유틸리티 메소드로 Channel과 Stream에 필요한 작업들을 제공합니다. new Channel(InputStream in)은 인풋스트림(InputStream)을 새로운 ReadableByteChannel(채널)로 만들어주는데, Channel이란 하드웨어 장치, 파일, 네트워크 소켓 또는 하나 이상의 고유 한 I/O 작업을 수행 할 수 있는 프로그램 구성 요소와 같은 엔터티에 대한 열린 연결을 나타내는 것이라고 합니다. 더보기…

Java: 주소에 의한 참조(Call-by-reference)

주소에 의한 참조는 무슨 말일까요? 메모리에 어떤 값을 저장했다면 그 값이 담긴 방(room)과 그 방을 가리키는 주소가 있습니다. Call-by-reference는 주소를 참조(reference)해서 값들을 조작합니다. 메소드 간 통신(값이나 주소를 주고받는 행위)을 한다고 할 때 주소만 넘겨서 서로 주소를 공유하고 값들을 공유해서 조작하는 방법을 뜻합니다. C 언어에서 다루는 포인터(Pointer)에서 연장된 개념이라고 볼 수 더보기…

Java: LocalDate, LocalTime, ChronoUnit을 이용해 시간 나타내고 구하기 (Java 8) + 예제(바이오리듬)

JDK 8에서 등장한 새로운 LocalDate, LocalTime, ChronoUnit을 이용해 시간을 나타내고 계산을 해보겠습니다. 이전에는 Date, Calendar 이런 애들이 쓰였는데요, 자바 초기에 등장한 것이라 문제가 많았다고 합니다. 여러 문제를 다 열거할 수 없지만 가장 큰 문제는 Calendar는 특이하게 월을 0 ~ 11로 기록해야 한다는 점이었습니다. 혹시 이런 점을 모르고 일반적인 상식으로 코드를 작성했다가 더보기…

JSP: 페이지 포함 방법 중 include 액션 태그와 디렉티브의 차이점

JSP: 페이지 포함 방법 중 include 액션 태그와 디렉티브의 차이점 비교 1. 액션 태그 사용법: <jsp:include page=”페이지 주소” flush=”false> <jsp:param name=”변수 이름” value=”변수 값”></jsp:param> </jsp:include> 액션 태그는 독립된 모듈을 구성할 때 사용합니다. 컴파일 시 클래스 파일이 별도로 생성되며 포함되는 페이지와 포함하는 페이지와는 별개로 취급됩니다.. 리퀘스트 값들은 전달되지 않으며 파라미터도 별도로 더보기…

Spring Boot: mariadb 연결하기 (JDBC-Maven 기준)

Spring Boot에 JDBC를 통해 mariadb(mysql) 연결하는 방법입니다. 1. pom.xml의 <dependencies>에 다음을 추가합니다. <!– mariaDb –> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.mariadb.jdbc</groupId> <artifactId>mariadb-java-client</artifactId> </dependency> 혹시 디펜던시 목록에 다른  mysql, Jdbc 과 관련된 게 있다면 충돌이 발생하므로 삭제하는 것이 좋습니다.   2. applications.properties (또는 기타 프로퍼티 파일)에 다음을 추가합니다. spring.datasource.driverClassName=org.mariadb.jdbc.Driver spring.datasource.url=jdbc:mariadb://127.0.0.1:3306/test (본인 더보기…

Java 예제: 마방진(Magic Square)

마방진의 정의는 다음과 같습니다. 마방진(魔方陣)은 n2개의 수를 가로, 세로, 대각선 방향의 수를 더하면 모두 같은 값이 나오도록 n × n 행렬에 배열한 것이다. (…) n이 홀수일 때에는 마방진을 간단한 방법으로 만들 수 있다. 첫 번째 행의 가운데 칸에 1을 넣는다. 이어서 다음과 같은 규칙으로 숫자를 채운다. 다음 숫자를 대각선 방향으로 오른쪽 더보기…

자바스크립트: for문 안에 setTimeout 함수 사용하는 방법 (IIFE, 재귀함수)

만약에 var ducks = ["첫째 오리", "둘째 오리", "셋째 오리", "넷째 오리", "다섯째 오리"] 이런 배열이 있고 이걸 1초 간격으로 하나씩 화면에 뿌리는 페이지를 만드는 상황이라고 가정합니다. 시간을 지연시키는 함수로 setTimeout(function(){…}, delayMillisecond)가 있습니다. 콜백 함수와 지연할 시간을 밀리세컨드 단위로 입력해서 사용합니다. 1초 간격으로 반복하고 싶다면 이 기능을 for문으로 돌리면 될까요? var ducks 더보기…

PHP: cURL 기초 (정적 웹 페이지에서 정보 가져오기)

웹사이트에서 POST를 통한 로그인을 한 뒤 정보를 가져오는 예제입니다. 만약 로그인이 필요한 웹 페이지라면, 로그인 정보를 POST로 보내고 쿠키로 저장하는 과정이 추가로 필요합니다. <?php $html_brand = “[리퀘스트를 보낼 주소]”; $ch = curl_init(); // cURL 생성 $options = array( CURLOPT_URL => $html_brand, CURLOPT_POSTFIELDS => “param1=value1&param2=value2&…”, // Post로 보낼 값들을 Get 방식처럼 더보기…

PHP: 배열 생성 / 배열을 JSON으로 만들기

배열을 JSON으로 변환하려면 다음 함수를 사용합니다. json_encode($배열)   빈 배열을 생성하려면 array()를 사용합니다. $arr = array();   원소가 있는 배열을 생성하는 방법입니다. $arr2 = array(“A”, “B”, “C”);   연관 배열(associative array)을 만드는 방법입니다. 연관 배열은 다른 언어의 Map, 자바스크립트의 객체(Object) 등과 유사한 자료형입니다. $arr3 = array(1 => “http//google.com”, 2 = > “http://yahoo.com”); 더보기…

Java 예제: 로또 (중복없이 배열에서 값 추출, 배열 원소 스왑) + HashSet 이용

HashSet 이용 (2020년 4월 24일 추가) Set 자료형은 중복을 허용하지 않는다는 특성을 이용한 코드입니다. import java.util.HashSet; import java.util.Set; public class SetTest { public static void main(String[] args) { Set<Integer> lotto = new HashSet<>(); while(lotto.size() < 6) { lotto.add((int)(Math.random() * 45 + 1)); } System.out.println(lotto); // Optional: Set to array Integer[] 더보기…