- bubble - 10tjdudtnpackage bubble.test.ex10;public enum EnemyWay { LEFT, RIGHT}Enemy 클래스 설계package bubble.test.ex10;import javax.swing.ImageIcon;import javax.swing.JLabel;public class Enemy extends JLabel implements Moveable { BubbleFrame mContext; // 살아 있는 상태 0, 물방울에 같힌 상태 1 private int state; // 적군에 좌표값 위치 상태 private int x; private int y; private ImageIcon enemyR, enemyL; // 움직임의 상태 private boolean left; pri..
- 2024-09-16 16:51:07
- bubble - 9 (버블 생성 동작 수정)tjdudtnBubbleFrame - 컨텍스트 생성 , Player getter 생성package bubble.test.ex09;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JLabel;public class BubbleFrame extends JFrame { // 컨텍스트를 생성하는 방법 (셀프 참조) BubbleFrame mContext = this; private JLabel backgroundMap; // 포함관계 - 콤포지션 private Player player; public BubbleFrame() ..
- 2024-09-16 16:50:08
- bubble - 8 (물방울 벽 감지)tjdudtn물방울 벽 감지 ( 쓰레드 사용 안함) package bubble.test.ex08;import java.awt.Color;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;public class BackgroundBubbleService { private BufferedImage image; private Bubble bubble; // 연관 관계(생성자 의존 주입) // 생성자 public BackgroundBubbleService(Bubble bubble) { this.bubble = bubble; try { image = ImageI..
- 2024-09-16 16:48:25
- bubble - 7 (물방울 동작 처리)tjdudtnpackage bubble.test.ex07;public interface Moveable { // public abstract 생략 가능 public abstract void left(); public abstract void right(); public abstract void up(); // 인터페스트 추가 기능 default 사용해보기 // 인터페이스에 모든 메서드는 추상 메서드이어야 한다. // 단 default 메서드를 제외 하고 default void down() {}; // 마지막에 default 는 세미콜론 추가 해야 한다. }package bubble.test.ex07;public enum PlayerWay { LEFT, RIGHT}package bubble.test.ex0..
- 2024-09-16 16:46:34
- bubble - 6 (바닥, 층 감지 기능 추가)tjdudtn기본 코드 - 추후 수정 package bubble.test.ex06;import java.awt.Color;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;/** * 현재 메인 쓰레드는 너~무 빠쁨 백그라운드에서 계속 Player 에 움직임을 관찰할 예정 */public class BackgroundPlayerService implements Runnable { private BufferedImage image; private Player player; // 생성자 의존 주입 DI public BackgroundPlayerService(Player p..
- 2024-09-16 16:45:38
- Swing - 5 (이벤트 리스너)tjdudtnpackage ch05;import java.awt.Color;import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;// 이벤트 리스너를 사용하는 방법// 1. implements ActionListener 사용 하는 방법 // ActionListener --> 운영 체제가 제어하는 이벤트를 등록할 수 있다. public class ColorChangeFrame extends JFrame implements ActionListener { // 이벤트 리스너에 대한 개념을 이해하자. priv..
- 2024-09-16 16:44:05
- bubble - 4 (중복쓰레드 생성 방지)tjdudtnpackage bubble.test.ex04;import java.awt.Color;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;/** * 현재 메인 쓰레드는 너~무 빠쁨 백그라운드에서 계속 Player 에 움직임을 관찰할 예정 */public class BackgroundPlayerService implements Runnable { private BufferedImage image; private Player player; // 생성자 의존 주입 DI public BackgroundPlayerService(Player player) { this...
- 2024-09-16 16:42:24
- bubble - 3 (왼쪽 오른쪽 벽 감지)tjdudtnpackage bubble.test.ex03;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JLabel;public class BubbleFrame extends JFrame { private JLabel backgroundMap; // 포함관계 - 콤포지션 private Player player; public BubbleFrame() { initData(); setInitLayout(); addEventListener(); // Player 백그라운드 서비스 시작 new Thread(..
- 2024-09-16 16:40:15
- bubble - 2tjdudtnpackage bubble.test.ex02;import javax.swing.ImageIcon;import javax.swing.JLabel;public class Player extends JLabel implements Moveable { private int x; private int y; private ImageIcon playerR, playerL; // 움직임의 상태 private boolean left; private boolean right; private boolean up; private boolean down; // 플레이어 속도 상태 private final int SPEED = 4; private final int JUMPSPEED = 2; // setter p..
- 2024-09-16 16:38:28
- bubble - 1tjdudtnpackage bubble.test.ex01;public interface Moveable { // public abstract 생략 가능 public abstract void left(); public abstract void right(); public abstract void up(); public abstract void down(); }package bubble.test.ex01;import javax.swing.ImageIcon;import javax.swing.JLabel;public class Player extends JLabel implements Moveable { private int x; private int y; private ImageIcon playerR, player..
- 2024-09-16 16:37:06
- Swing - 8 (쓰레드 활용)tjdudtnpackage ch08;import java.awt.Graphics;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import javax.swing.JFrame;import javax.swing.JPanel;public class GameFrame extends JFrame { BufferedImage backgroundImage; BufferedImage player1; BufferedImage enemy1; ImagePanel imag..
- 2024-09-16 16:35:41
- Swing - 7 로또 게임 만들기tjdudtnpackage ch07;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;public class LottoFrame extends JFrame implements ActionListener { private JButton button; public LottoFrame() { initData(); setInitLayout(); addEventListener(); } private void initData() { setTitle("Lotto Game"); setSize(600..
- 2024-09-16 16:34:31
- Swing - 6 (Key Listener)tjdudtn시나리오 코드 1 package ch06;import java.awt.BorderLayout;import javax.swing.JFrame;import javax.swing.JTextArea;/** * 키 이벤트 리스너 사용해보기 */public class MyKeyEvent extends JFrame { private JTextArea textArea; public MyKeyEvent() { initData(); setInitLayout(); addEventListener(); } private void initData() { setSize(500, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setResizable(false); //..
- 2024-09-16 16:32:54
- Swing - 5 (이벤트 리스너)tjdudtnpackage ch05;import java.awt.Color;import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;// 이벤트 리스너를 사용하는 방법// 1. implements ActionListener 사용 하는 방법 // ActionListener --> 운영 체제가 제어하는 이벤트를 등록할 수 있다. public class ColorChangeFrame extends JFrame implements ActionListener { // 이벤트 리스너에 대한 개념을 이해하자. priv..
- 2024-09-16 16:30:56
- Swing - 4 (이미지 겹치는 방법)tjdudtn💡 JLable 을 이용한 이미를 다루는 방법 package ch04;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JLabel;/** * JLable 이용해서 이미지를 다룰 수 있다. * Jlable.add(); 메서드를 통해서 이지를 겹칠 수 있다 * 좌표 기준으로 이미지를 셋팅을 할려면 * 배치관리자를 null 값으로 셋팅 해야 한다. */public class MyFrame extends JFrame { private JLabel backgroundMap; private JLabel player; public MyFrame() { initData(); ..
- 2024-09-16 16:28:57
- Swing - 3 (이미지 올리기)tjdudtn💡 ImageIcon 을 활용한 이미지를 사용하는 방법 : 다운 로드 기본코드 확인package ch03;import java.awt.Graphics;import java.awt.Image;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JPanel;/** * 중첩 클래스 --> 외부,내부 클래스로 * 내부 클래스로 --> 인스턴스 클래스 , static 클래스 */public class MyImageFrame extends JFrame { // 내부 클래스로 정의한 데이터 타입 이다. private MyImagePanel myImagePanel; public MyImageFrame..
- 2024-09-16 16:27:43
- Swing - 2tjdudtn기본 컴포넌트를 확인해 보자.package ch02;import java.awt.FlowLayout;import javax.swing.JButton;import javax.swing.JCheckBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPasswordField;import javax.swing.JTextField;public class MyComponents extends JFrame { private JButton button; private JLabel label; private JTextField textField; private JPasswordField passwordField; private JChe..
- 2024-09-16 16:24:58
- Swing - 1tjdudtnpackage ch01;import java.awt.FlowLayout;import javax.swing.JButton;import javax.swing.JFrame;// Swinig -> 배치 관리자 : FlowLayout // 컴포넌트들을 (버튼, 라벨) 등을 수평, 수직으로 배치를 해주는 클래스 이다. public class FlowLayoutEx extends JFrame { private JButton button1; private JButton button2; // 4개더 만들어서 추가 하기 // 생성자 public FlowLayoutEx() { super.setTitle("FlowLayout 연습"); super.setSize(500, 500); super.setVisible(tru..
- 2024-09-16 16:23:44
- 템플릿 메서드 패턴tjdudtn추상 메서드나 구현 된 메서드를 활용하여 코드의 흐름(시나리오)를 정의하는 패턴을 말한다. ALT package useful.ch04;public abstract class Car { void startCart() { System.out.println("시동을 켭니다"); } abstract void drive(); abstract void stop(); void turnOff() { System.out.println("시동을 끈다"); } // 템플릿 메서드 패턴에 핵심 !! // 메서드 앞에 final 키워드를 사용하다면 : 하위 클래스에서 재정의 할 수 없다. final void run() { // 실행에 흐름 만들어 보기 startCart(); drive(); stop..
- 2024-09-15 17:43:39
- 싱글톤 패턴tjdudtnpackage useful.ch04;/** * 디자인 패턴 살펴 보기 * - 싱글톤 패턴이 뭘까? * * 1. 생성자를 priavte 으로 만든다. * 2. static 변수를 활용해서 내부에서 객체를 생성하고 주소값을 할당 * 3. 외부에서 유일하게 참조할수 있는 public 메서드를 제공한다. */public class Company { //2. static 변수 활용 데이터 타입 선언 private static Company company; // 1. 생성자에 접근제어 지시자를 private 로 변경하면 // 외부에서 기본 생성자를 호출 할 수 없다. private Company() { } //3. 외부에서 접근 가능한 메서드를 만들어 준다. public static Compa..
- 2024-09-15 17:42:01
- 람다식(Lambda expression)tjdudtn💡학습 목표1. 람다식의 기본 개념과 문법을 직접 말할 수 있다.2. 기존에 자바 코드를 람다식 표현법을 사용해서 작업할 수 있다.3. 함수형 인터페이스(Functional Interface)가 무엇인지 간단하기 말할 수 있다.4. 자바8 버전부터 제공해주는 interface Function 을 활용할 수 있다. 자바에서 람다식(Lambda expression)은 함수형 프로그래밍 개념을 도입한 것으로, 익명 함수(이름이 없는 함수)를 간결하게 표현할 수 있게 해 줍니다, 람다식은 자바 버전 8(2014년 출시)부터 사용할 수 있습니다. 추가로 자바 8은 함수형 프로그래밍을 지원하기 위한 여러 기능을 함께 도입했습니다즉, 람다식을 사용하면 코드가 간결해지고, 특히 컬렉션이나 스트림 API 을 처리할 때..
- 2024-09-15 17:40:11
- 래퍼 클래스tjdudtn프로그래밍을 하다 보면 기본 타입의 데이터를 객체로 표현해야 하는 경우가 종종 있습니다. 이럴 때에 기본 자료타입(primitive type)을 객체로 다루기 위해서 사용하는 클래스들을 래퍼 클래스(wrapper class)라고 합니다. package ch01;public class MainTest1 { public static void main(String[] args) { // 박싱, 언박싱 이라는 용어를 이해하자. int num1 = 3; // ---> Integer Integer num2 = new Integer(3); // 박싱 int num3 = num2.intValue(); // 언박싱 System.out.println(num2); System.out.println(n..
- 2024-09-15 17:34:13
- JSON 파싱 연습 2단계tjdudtn💡 JSON Object와 JSON Array의 타입을 반드시 구분하자.JSON Object (JSON 객체):JSON 객체는 { } 로 둘러싸인 키-값 쌍의 집합입니다. 키는 항상 문자열이고, 값은 문자열, 숫자, 객체, 배열, 불리언, 또는 null일 수 있습니다. { "name": "홍길동", "age": 21, "subjects": ["수학", "물리", "컴퓨터 과학"]} JSON Array (JSON 배열):JSON 배열은 **[ ]**로 둘러싸인 값의 순서 있는 목록입니다. 배열의 각 값은 모든 JSON 데이터 타입이 될 수 있습니다. [ { "name": "홍길동", "age": 21, "subjects": ["수학", "물리", "컴퓨터 과학"] }, { ..
- 2024-09-15 17:28:40
- 파싱이란 뭘까?( JSON 파싱 )tjdudtn💡 파싱(Parsing)이란 컴퓨터 과학에서 입력된 데이터를 해석하고 구조화하는 과정을 의미합니다. 일반적으로 파싱은 텍스트 데이터를 특정 형식으로 변환하거나, 텍스트 데이터에서 유용한 정보를 추출하는 데 사용됩니다. 파싱을 통해 원시 데이터를 컴퓨터가 이해하고 처리할 수 있는 구조로 변환할 수 있습니다.파싱의 주요 개념구문 분석(Syntax Analysis):텍스트 데이터를 구문 규칙에 따라 해석하는 과정입니다.주로 프로그래밍 언어의 컴파일러나 인터프리터에서 소스 코드를 구문 트리(Syntax Tree)로 변환할 때 사용됩니다.데이터 형식 변환:텍스트 데이터를 특정 형식(예: JSON, XML)으로 변환하여 구조화된 데이터를 생성합니다.예를 들어, JSON 형식의 문자열을 자바 객체로 변환하거나, X..
- 2024-09-15 17:17:11
- 공공데이터포탈 사용해 보기tjdudtn공공 데이터 포탈 사이트에서 API 키 발급회원 가입 및 로그인: 공공 데이터 포탈 사이트에 회원 가입 후 로그인합니다.API 키 발급: 원하는 API를 선택하고 사용 신청을 통해 API 키를 발급받습니다.package ch01;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;public class APIExplorer { public static void main(String[] args) throws IOException { // 순수 자바코드로..
- 2024-09-15 17:14:38
- 순수 자바코드로 HttpServer 만들기tjdudtnpackage ch01;import java.io.IOException;import java.net.InetSocketAddress;import com.sun.net.httpserver.*;public class SimpleHttpServer { public static void main(String[] args) { try { HttpServer.create(new InetSocketAddress(8080), 0); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}package ch01;import java.io.IOException;import java.io.Outp..
- 2024-09-15 17:06:33
- 소켓을 활용한 HTTP 통신이란tjdudtn💡 HTTP 통신은 소켓 통신 개념을 활용하여 데이터 전송을 수행합니다. HTTP는 TCP 소켓을 통해 클라이언트와 서버 간의 데이터를 주고받습니다HTTP 통신 개념HTTP(HyperText Transfer Protocol)는 웹 브라우저와 웹 서버 간의 데이터 전송을 위한 프로토콜입니다. HTTP는 요청-응답(request-response) 모델을 기반으로 하며, 클라이언트가 요청을 보내면 서버가 응답을 반환합니다. HTTP는 주로 텍스트 기반의 프로토콜로, 클라이언트와 서버 간에 데이터를 주고받는 형식을 명확하게 정의합니다.주요 HTTP 메서드GET: 서버에서 데이터를 요청합니다. 주로 데이터를 조회할 때 사용됩니다.POST: 서버에 데이터를 전송합니다. 주로 데이터를 생성하거나 업데이트할 때 사용..
- 2024-09-15 17:04:39
- 제네릭(Generic)tjdudtn💡 제네릭 프로그래밍은 자바에서 타입을 일반화하여 재사용 가능한 코드를 작성하는 기법입니다. 제네릭을 사용하면 클래스, 인터페이스, 메서드 등에 대해 특정 타입을 지정하지 않고, 다양한 타입에서 동작하도록 할 수 있습니다. 제네릭 프로그래밍의 주요 이점타입 안정성: 컴파일 시 타입을 검사하여 런타임 에러를 줄일 수 있습니다.코드 재사용성: 다양한 타입을 처리할 수 있는 일반화된 코드를 작성할 수 있습니다.유지보수성: 타입 캐스팅을 줄여 가독성과 유지보수성을 향상시킵니다.ch01package ch01;public class Plastic { @Override public String toString() { return "재료는 플라스틱 입니다"; }}package ch01;public class ..
- 2024-09-15 17:02:03
- 코드 분석 예제tjdudtn
- 2024-09-15 17:00:16
- 네트워크 프로토콜이란?tjdudtn네트워크 프로토콜이란?네트워크 프로토콜은 네트워크에서 데이터를 교환하기 위한 규칙과 절차의 집합입니다.프로토콜은 데이터 형식, 순서, 오류 제어 등을 정의하여 서로 다른 시스템 간의 통신을 가능하게 합니다.주요 프로토콜HTTP (HyperText Transfer Protocol): 웹 페이지를 전송하기 위한 프로토콜입니다.TCP (Transmission Control Protocol): 신뢰성 있는 데이터 전송을 보장하는 프로토콜입니다.UDP (User Datagram Protocol): 신뢰성보다는 빠른 전송을 중시하는 프로토콜입니다.FTP (File Transfer Protocol): 파일 전송을 위한 프로토콜입니다.SMTP: 이메일 전송을 위한 프로토콜입니다.프로토콜 각기 다른 목적을 가지고 있습니..
- 2024-09-15 16:58:03
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)