자바 Swing: for문으로 만든 컴포넌트에 접근 + 예제: 틱택토(Tic Tac Toe)

이전 글: Java Swing 예제: 다차원 배열 표시하기 (기초 설정 방법, for문으로 swing 요소 반복 등) for문으로 생성한 컴포넌트에 대한 접근 방법은 다음과 같습니다. 1. 컴포넌트들의 배열을 뽑아 인덱스 번호로 접근하는 방법 JPanel nineRoom = new JPanel(); (…) for(int i = 0; i < 9; i++) { JButton tempButton = new 더보기…

Java 예제: 배열 회전

배열을 회전하여 아래 그림과 같이 나타는 예제입니다. 행렬의 번호가 [1, 1] ~ [5, 5]라고 할 경우, 행과 열의 위치가 바뀌는 것을 [a, b] → [b, a] 로 나타냅니다. 아래 그림처럼 바꾸려면 바뀐 열의 번호는 6 – a 가 되야 하므로 [a, b] → [b, (6-a)] 의 형태로 바꾸는 알고리즘이 필요합니다. PrintArray는 Java Swing 예제: 다차원 더보기…

JSP, Spring: URL을 입력하면 파일이 바로 다운로드되게 하기

주소를 입력하고 엔터를 치면 바로 다운로드가 진행되는 컨트롤러 예제입니다. 만들어진 주소창에 입력해도 되고 자바스크립트의 location.href = 주소 를 사용할 수도 있습니다. This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode 더보기…

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로 기록해야 한다는 점이었습니다. 혹시 이런 점을 모르고 일반적인 상식으로 코드를 작성했다가 더보기…

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을 넣는다. 이어서 다음과 같은 규칙으로 숫자를 채운다. 다음 숫자를 대각선 방향으로 오른쪽 더보기…

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[] 더보기…

Java 예제: ATM

scanner, if, while, switch ~ case 문 등의 기초 문법을 활용한 간단한 ATM 프로그램입니다. 어린이들이 은행 놀이 할 때 사용하면 좋겠네요. import java.util.Scanner; public class ATM { public static void main(String[] args) { long deposit = 0; while(true) { System.out.println(“<< ATM >>”); System.out.println(“1. 입금”); System.out.println(“2. 출금”); System.out.println(“3. 조회”); System.out.println(“4. 종료”); 더보기…