장점 
개발자간에 원활한 소통 
소프트웨어 구조 파악이 용이 
재사용을 통한 개발 시간을 단축 
설계 변경 요청에 대한 유연한 처리 

단점 
객체지향 설계 / 구현 
초기 투자비용에 대한 부담 


생성 패턴 : 객체를 생성하는 것과 관련된 패턴 
싱글톤 패턴, 빌더 패턴, 팩토리메서드 패턴 
구조 패턴 : 
프로그램 내의 자료구조나 인터페이스 구조 등을 설계하는데 활용 될 수 있는 패턴, 
복잡한 구조를 개발하기 쉽게 만들어 주고, 유지 보수 하기 쉽게 만들어 준다. 

어댑터 패턴, 데코레이터 패턴, 파사드 패턴, 프록시 패턴  

행위 패턴 : 
반복적으로 사용되는 객체들의 상호 작용을 패턴화한 것으로 클래스들 
간에 책임을 분산하는 방법을제공 
템플릿 메서드 패턴
Iterator 
옵저버 패턴 
스트래티지 패턴 (전략)

'자바' 카테고리의 다른 글

GUI 이벤트 리스너 예제  (0) 2023.02.21
GUI 이벤트 리스너  (0) 2023.02.21
GUI 이미지 겹치기  (0) 2023.02.21
try-catch 문  (0) 2023.02.21
예외 처리  (0) 2023.02.21

버튼을 누를때마다 7가지의 색상으로 변하도록 하여라

package ch06;

import java.awt.BorderLayout;
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;
import javax.swing.JPanel;

public class Ex extends JFrame implements ActionListener {

	private JButton button1;
	private JButton button2;
	private JButton button3;
	private JButton button4;
	private JButton button5;
	private JButton button6;
	private JButton button7;
	private JPanel panel1;
	private JPanel panel2;

	public Ex() {
		initDate();
		setIntiLayout();
		addEventListener();
	}

	private void initDate() {
		setTitle("무지게 패녈 연습");
		setSize(600, 400);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		panel1 = new JPanel();
		panel1.setBackground(Color.white);
		panel2 = new JPanel();
		// 버튼 초기화
		button1 = new JButton("버튼 1");
		button2 = new JButton("버튼 2");
		button3 = new JButton("버튼 3");
		button4 = new JButton("버튼 4");
		button5 = new JButton("버튼 5");
		button6 = new JButton("버튼 6");
		button7 = new JButton("버튼 7");

	}

	private void setIntiLayout() {
		add(panel1, BorderLayout.CENTER);
		add(panel2, BorderLayout.SOUTH);
		panel2.add(button1);
		panel2.add(button2);
		panel2.add(button3);
		panel2.add(button4);
		panel2.add(button5);
		panel2.add(button6);
		panel2.add(button7);
		panel2.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0));
		setVisible(true);
	}

	private void addEventListener() {
		button1.addActionListener(this);
		button2.addActionListener(this);
		button3.addActionListener(this);
		button4.addActionListener(this);
		button5.addActionListener(this);
		button6.addActionListener(this);
		button7.addActionListener(this);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		JButton targetButton = (JButton) e.getSource();
		if (targetButton.getText().equals("버튼 1")) {
			panel1.setBackground(Color.red);
		} else if (targetButton.getText().equals("버튼 2")) {
			panel1.setBackground(Color.orange);
		} else if (targetButton.getText().equals("버튼 3")) {
			panel1.setBackground(Color.yellow);
		} else if (targetButton.getText().equals("버튼 4")) {
			panel1.setBackground(Color.green);
		} else if (targetButton.getText().equals("버튼 5")) {
			panel1.setBackground(Color.blue);
		} else if (targetButton.getText().equals("버튼 6")) {
			panel1.setBackground(Color.GRAY);
		} else if (targetButton.getText().equals("버튼 7")) {
			panel1.setBackground(Color.PINK);
		}
	}

	public static void main(String[] args) {
		new Ex();
	}// main

}// class

 

for문을 이용하여 코드양을 줄일수 있었지만 익숙해질때까지 다쳐서 확인해보기

'자바' 카테고리의 다른 글

디자인 패턴  (0) 2023.03.27
GUI 이벤트 리스너  (0) 2023.02.21
GUI 이미지 겹치기  (0) 2023.02.21
try-catch 문  (0) 2023.02.21
예외 처리  (0) 2023.02.21
package ch06;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ColorChange extends JFrame implements ActionListener {

	private JPanel panel;
	private JButton button1;
	private JButton button2;

	public ColorChange() {
		initDate();
		setInitLayout();
		addEventListener();
	}

	private void initDate() {
		setSize(500, 500);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		button1 = new JButton("버튼 1");
		button2 = new JButton("버튼 2");
		panel = new JPanel();
	}

	private void setInitLayout() {
		add(panel);
		panel.setBackground(Color.blue);
		panel.add(button1);
		panel.add(button2);
		setVisible(true);
	}

	private void addEventListener() {
		// this ->ColorChange->ActionListener 다형성 적용으로 이렇게도 볼수있다
		button1.addActionListener(this);
		button2.addActionListener(this);
	}

	// 테스트 코드
	public static void main(String[] args) {
		new ColorChange();

	}// end of main

	// 약속 되어진 메서드
	// 이벤트가 일어나면 운영체제가 actionPerformed를 불러준다
	@Override
	public void actionPerformed(ActionEvent e) {
		// e.getSource() -->
		// 다운 캐스팅 버튼
		JButton targetButton = (JButton) e.getSource();
		// targetButton.setText("눌러진 버튼입니다");
		System.out.println(targetButton.getText());

//		System.out.println(e.getSource());
//		if(e.getSource() == this.button1) {
//			panel.setBackground(Color.black);
//		}else {
//			panel.setBackground(Color.yellow);
//		}

		// 문제1
		// 문자열을 비교해서 색상을 변경 시키는 코드를 작성해주세요
		if (targetButton.getText().equals("버튼 1")) {
			panel.setBackground(Color.black);
		} else {
			panel.setBackground(Color.yellow);
		}

	}

}// end of class

 

 

'자바' 카테고리의 다른 글

디자인 패턴  (0) 2023.03.27
GUI 이벤트 리스너 예제  (0) 2023.02.21
GUI 이미지 겹치기  (0) 2023.02.21
try-catch 문  (0) 2023.02.21
예외 처리  (0) 2023.02.21
package ch05;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class MyFrame extends JFrame {

	// 그림 위에다가 그림 올리기
	// JLabel 을 이용하여 이미지 겹치기
	private JLabel backgroundMap;
	private JLabel player;

	public MyFrame() {
		initDate();
		setInitLayout();
	}

	private void initDate() {
		setTitle("이미지 겹치기 연습");
		setSize(500, 500);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// new ImageIcon("images/background2.png");
		Icon icon = new ImageIcon("images/background2.png");
		backgroundMap = new JLabel(icon);
		backgroundMap.setSize(500, 500);
		// null -> 좌표 -> 컴포먼트 사이즈 ,위치
		player = new JLabel(new ImageIcon("images3.png"));
		player.setSize(100, 100);
	}

	private void setInitLayout() {
		backgroundMap.setLocation(0, 0);
		player.setLocation(200, 200);
		add(player);
		add(backgroundMap);
		setLayout(null);
		setVisible(true);
	}

}

 

'자바' 카테고리의 다른 글

GUI 이벤트 리스너 예제  (0) 2023.02.21
GUI 이벤트 리스너  (0) 2023.02.21
try-catch 문  (0) 2023.02.21
예외 처리  (0) 2023.02.21
GUI를 이용한 이미지 출력 연습(Swing)  (1) 2023.02.21

● try 블록에는 예외가 발생할 가능성이 있는 코드를 작성하고 try 블록 안에서 예외가 발생하는 경우 catch 블록이 수행됨

코드로 알아보기

package ch08;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class FileExceptionHanding {

	public static void main(String[] args) {

		// 파일 <-- IO<--!!!
		FileInputStream fis = null;
//		try {
//			fis = new FileInputStream("temp");// <-- 예외가 발생할수있다라고 알려준다
//		} catch (FileNotFoundException f) {
//			System.out.println("temp 라는 파일이 없습니다");
//		}

//		try-catch-finally

		try {
			fis = new FileInputStream("test1.txt");
			return;
		} catch (FileNotFoundException e) {
//			e.printStackTrace();
			System.out.println("파일명 확인해주세용!! 힛");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 반드시 수행되는 코드
			// 심지어 return 키워드를 만나더라도 실행이된다 !! 아주 강력한 녀석
			System.out.println("finally 실행");
		}
		System.out.println("비정상 종료 되지않음");

	}// end of main

}// end class

package ch08;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class FileExceptionHanding2 {

	public static void main(String[] args) {
		Myfile file = new Myfile();
		try {
			file.inputData("하이~~");
		} catch (FileNotFoundException e) {
			System.out.println("파일이 없네요");
		}

	}// end of main

}// end class

class Myfile {
	// throws 던진다-->
	// 누군가가 내가만든 Myfile 를 사용 할때
	// inputData 오류가 날수 있으니 예외처리 흐름은 사용 하는 사람이
	// 알아서 구현해!!
	public void inputData(String str) throws FileNotFoundException {
		FileInputStream fis;

		fis = new FileInputStream("test1.txt");
	}
}

package ch08;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

public class MyException {
	public static void main(String[] args) {

		TxtFileInputManager inputManager = new TxtFileInputManager("test.txt");

		try {
			String result = inputManager.readTxrFileData();
			System.out.println("result " + result);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}// end main
}// end class

class TxtFileInputManager {

	// 외부 파일을 내 메모리 상으로 가져올수 있는 녀석
	private FileInputStream fis;
	private String fileName;

	public TxtFileInputManager(String fileName) {
		this.fileName = fileName;
	}

	public String readTxrFileData() throws IOException {
		// IOException 부모!
		// FileNorFoundException 보다 부모
		fis = new FileInputStream(fileName);
		Properties prop = new Properties();
		prop.load(fis);
		// KEY=VALUE <-- 데이터를 읽어주는녀석
		// name=홍길동 --> 홍길동 --> 추출
		String name = prop.getProperty("name");
		return name;
	}

}

예제풀이

package ch08;

public class MainTest2 {

	public static void main(String[] args) {

		// 예외 처리 구문작성
		// 10 /0 연산 시키고 예외 처리까지 작성해주세여
		// try
		// 클래스 설계
		int ten = 10;
		int zero = 0;

		try {
			int result = ten / zero;
			// int result = zero/ten;
			System.out.println("수식 결과는 : " + result);
		} catch (Exception e) {
			System.out.println("수식이 맞지 않습니다");
		} finally {
			System.out.println("finally 실행");
		}
		System.out.println("비정상 종료 되지않았습니다");
	}// end of main

}// end of class

package ch08;

public class MainTest2 {

	public static void main(String[] args) {

		// 예외 처리 구문작성
		// 10 /0 연산 시키고 예외 처리까지 작성해주세여
		// try
		// 클래스 설계
		int ten = 10;
		int zero = 0;

		try {
			//int result = ten / zero;
			int result = zero/ten;
			System.out.println("수식 결과는 : " + result);
		} catch (Exception e) {
			System.out.println("수식이 맞지 않습니다");
		} finally {
			System.out.println("finally 실행");
		}
		System.out.println("비정상 종료 되지않았습니다");
	}// end of main

}// end of class

'자바' 카테고리의 다른 글

GUI 이벤트 리스너  (0) 2023.02.21
GUI 이미지 겹치기  (0) 2023.02.21
예외 처리  (0) 2023.02.21
GUI를 이용한 이미지 출력 연습(Swing)  (1) 2023.02.21
외부 클래스를 이용한 집만들기!  (1) 2023.02.21

예외 처리는 왜 해야 하나? 자바에서 제공되는 클래스들

 

프로그램에서의 오류

● 컴파일 오류(compile error)

프로그램 코드 작성 중 발생하는 문법적 오류

최근에는 개발 환경(eclipse)에서 대부분의 컴파일 오류는 detection 됨

● 실행 오류(runtime error)

실행 중인 프로그램이 의도 하지 않은 동작(bug)을 하거나 프로그램이 중지 되는 오류

실행 오류는 비정상 종료가 되는 경우 시스템의 심각한 장애를

예외 처리의 중요성

● 프로그램의 비정상 종료를 피하여 시스템이 원할이 실행되도록 함

● 실행 오류가 발생한 경우 오류의 과정을 재현하는 것은 현실적으로 힘들다

● 오류가 발생한 경우 log를 남겨서 추후 log 분석을 통해 그 원인을 파악하여 bug를 수정하는 것이 중요

오류와 예외 클래스

● 시스템 오류(error) : 가상 머신에서 발생, 프로그래머가 처리 할 수 없는 오류임

동적 메모리가 없는 경우, 스택 메모리 오버플로우등

● 예외(Exception) :프로그램에서 제어 할 수 있는 오류

읽어들이려는 파일이 존재하지 않거나, 네트웍이나 DB연결이 안되는 경우등

자바는 안전성이 중요한 언어로 대부분 프로그램에서 발생하는 오류에 대해 문법적으로 예외 처리를 해야함

예외 클래스들

● 모든 예외 클래스의 최상위 클래스는 Exception 클래스

● 자바에서는 다양한 예외들에 대해 그 처리를 위한 클래스가 제공되고 있음

Arithmetic Exception : 정수를 0 으로 나눈 경우 발생

NullPointerException : 초기화 되지 않은 Object를 사용하는 경우

ArrayIndexOutOfBoundsException : 배열의 크기를 넘어선 위치를 참조하려는 경우

FileNotFoundException : 참조하는 파일이 지정된 위치에 존재하지 않는 경우

 

'자바' 카테고리의 다른 글

GUI 이미지 겹치기  (0) 2023.02.21
try-catch 문  (0) 2023.02.21
GUI를 이용한 이미지 출력 연습(Swing)  (1) 2023.02.21
외부 클래스를 이용한 집만들기!  (1) 2023.02.21
외부 클래스 내부클래스를 이용 GUI  (0) 2023.02.21
package ch04;

import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

// JLable <-- String,Image()
public class MyImageFrame extends JFrame {

	imagePanel imagePanel;

	// JPanel안에 이미지를 넣는 방법!!
	// 내부클래스 이용해보기
	class imagePanel extends JPanel {

		private Image image;

		public imagePanel() {
			image = new ImageIcon("images.png").getImage();
		}

		@Override
		public void paint(Graphics g) {
			super.paint(g);
			// 대상 x,y,가로,세로,널
			g.drawImage(image, 0, 0, 400, 400, null);
		}

	}// end of inner class

	public MyImageFrame() {
		initDate();
		setInitLayout();
	}

	private void initDate() {
		setTitle("이미지연습");
		setSize(400, 400);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		imagePanel = new imagePanel();
	}

	private void setInitLayout() {
		add(imagePanel);
		setVisible(true);
	}
}
package ch04;

public class MainTest1 {

	public static void main(String[] args) {
		new MyImageFrame();
	}

}

package ch04;

import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MyImageFrame2 extends JFrame {

	ImagePanel imagePanel;// 내부클래스 맴버 변수로 선언

	public MyImageFrame2() {
		initData();
		setIntiLayout();
	}

	private void initData() {
		setTitle("이미지연습");
		setSize(600, 600);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		imagePanel = new ImagePanel();
	}

	private void setIntiLayout() {
		add(imagePanel);
		setVisible(true);
	}

	// 정적 내부클래스
	static class ImagePanel extends JPanel {
		private Image image1;
		private Image image2;
		private Image image3;
		private Image image4;

		public ImagePanel() {
			image1 = new ImageIcon("images3.png").getImage();
			image2 = new ImageIcon("images4.png").getImage();
			image3 = new ImageIcon("images5.png").getImage();
			image4 = new ImageIcon("images6.png").getImage();
		}

		@Override
		public void paint(Graphics g) {
			super.paint(g);
			g.drawImage(image1, 220, 100, 70, 70, null);
			g.drawImage(image2, 130, 150, 70, 70, null);
			g.drawImage(image3, 150, 200, 200, 200, null);
			g.drawImage(image4, 250, 300, 200, 200, null);
		}
	}// end of inner class
}// end of outer class
package ch04;

public class MainTest1 {

	public static void main(String[] args) {
		new MyImageFrame2();
	}

}

저는 녹색 친구가 제일 귀옆다고 생각합니다 >< (찡긋)

'자바' 카테고리의 다른 글

try-catch 문  (0) 2023.02.21
예외 처리  (0) 2023.02.21
외부 클래스를 이용한 집만들기!  (1) 2023.02.21
외부 클래스 내부클래스를 이용 GUI  (0) 2023.02.21
Swing 을 이용한 GUI  (0) 2023.02.21
package ch03;

import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

import ch03.MyFrame1.MyDrawPanel;

public class MyFrame2 extends JFrame {

	// 내부클래스를 활용해서
	// JPanel 를 상속 받고 paint 메서드로 집 그림을 그려주세요
	MyDrawPanel drawPanel;

	class MyDrawPanel extends JPanel {

		@Override
		public void paint(Graphics g) {
			super.paint(g);
			g.drawRect(350, 350, 300, 300);
			g.drawRect(500, 400, 50, 50);
			g.drawRect(550, 450, 50, 50);
			g.drawRect(550, 400, 50, 50);
			g.drawRect(500, 450, 50, 50);
			g.drawLine(350, 350, 500, 200);
			g.drawLine(650, 350, 500, 200);
			g.drawString("★", 100, 50);
			g.drawString("★", 120, 70);
			g.drawString("★", 200, 80);
			g.drawString("★", 100, 100);
			g.drawString("★", 120, 120);
			g.drawString("★", 200, 130);
			g.drawString("★", 220, 90);
			g.drawString("★", 270, 80);
			g.drawString("★", 300, 70);
			g.drawString("★", 330, 144);
			g.drawString("★", 450, 92);
			g.drawString("★", 510, 132);
			g.drawString("★", 450, 62);
			g.drawString("★", 520, 71);
			g.drawString("★", 350, 92);
			g.drawString("★", 410, 132);
			g.drawString("★", 350, 62);
			g.drawString("☆", 420, 71);
			g.drawOval(800, 30, 150, 150);
			g.drawString("달", 870, 80);
			g.drawLine(750, 80, 550, 150);
			g.drawLine(750, 100, 580, 180);
			g.drawLine(750, 120, 610, 210);
			g.drawLine(780, 140, 650, 250);
			g.drawString("☆", 550, 150);
			g.drawString("☆", 580, 180);
			g.drawString("☆", 610, 210);
			g.drawString("☆", 650, 250);
		}
	}

	public MyFrame2() {
		initDate();
		setInitLayout();
	}

	private void initDate() {
		setTitle("외부클래스를 이용하여 집 모양 만들기");
		setSize(1000, 1000);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		drawPanel = new MyDrawPanel();
	}

	private void setInitLayout() {
		add(drawPanel);
		setVisible(true);
	}

}
package ch03;

public class MainTest2 {

	public static void main(String[] args) {
		new MyFrame2();
	}

}

생성한 클래스 파일들을 출력해주는 메인 코드는 따로 만들어주는게 좋다!

'자바' 카테고리의 다른 글

예외 처리  (0) 2023.02.21
GUI를 이용한 이미지 출력 연습(Swing)  (1) 2023.02.21
외부 클래스 내부클래스를 이용 GUI  (0) 2023.02.21
Swing 을 이용한 GUI  (0) 2023.02.21
GUI 프로그램  (0) 2023.02.20

+ Recent posts