<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=JavaStudy2003%2F%EB%91%90%EB%B2%88%EC%A7%B8%EA%B3%BC%EC%A0%9C%2F%EA%B3%BD%EC%84%B8%ED%99%98</id>
	<title>JavaStudy2003/두번째과제/곽세환 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=JavaStudy2003%2F%EB%91%90%EB%B2%88%EC%A7%B8%EA%B3%BC%EC%A0%9C%2F%EA%B3%BD%EC%84%B8%ED%99%98"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=JavaStudy2003/%EB%91%90%EB%B2%88%EC%A7%B8%EA%B3%BC%EC%A0%9C/%EA%B3%BD%EC%84%B8%ED%99%98&amp;action=history"/>
	<updated>2026-05-15T03:12:10Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=JavaStudy2003/%EB%91%90%EB%B2%88%EC%A7%B8%EA%B3%BC%EC%A0%9C/%EA%B3%BD%EC%84%B8%ED%99%98&amp;diff=33240&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:23, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=JavaStudy2003/%EB%91%90%EB%B2%88%EC%A7%B8%EA%B3%BC%EC%A0%9C/%EA%B3%BD%EC%84%B8%ED%99%98&amp;diff=33240&amp;oldid=prev"/>
		<updated>2021-02-07T05:23:31Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= ToyProblems 를 자바로 =&lt;br /&gt;
RandomWalk&lt;br /&gt;
== Board.java ==&lt;br /&gt;
 import javax.swing.JOptionPane;&lt;br /&gt;
 &lt;br /&gt;
 public class Board {&lt;br /&gt;
 	private int array[][]; //판의 배열&lt;br /&gt;
 	private int max_x;	   //판의 가로크기&lt;br /&gt;
 	private int max_y;	   //판의 세로크기&lt;br /&gt;
 	&lt;br /&gt;
 	//판을 생성&lt;br /&gt;
 	public Board(int x, int y) {&lt;br /&gt;
 		max_x = x;&lt;br /&gt;
 		max_y = y;&lt;br /&gt;
 		array = new int[max_y][max_x];&lt;br /&gt;
 		for (int i = 0; i &amp;amp;lt; max_y; i++)&lt;br /&gt;
 			for (int j = 0; j &amp;amp;lt; max_x; j++)&lt;br /&gt;
 				array[i][j] = 0;&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	//발자국이 가득 채워졌니?&lt;br /&gt;
 	public boolean IsStepFull() {&lt;br /&gt;
 		for (int i = 0; i &amp;amp;lt; max_y; i++)&lt;br /&gt;
 			for (int j = 0; j &amp;amp;lt; max_x; j++)&lt;br /&gt;
 				if (array[i][j] == 0)&lt;br /&gt;
 					return false;&lt;br /&gt;
 		return true;&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	//주어진 위치가 벽이니?&lt;br /&gt;
 	public boolean IsPostionWall(int x, int y) {&lt;br /&gt;
 		if (x == -1 || x == max_x || y == -1 || y == max_y)&lt;br /&gt;
 			return true;&lt;br /&gt;
 		else&lt;br /&gt;
 			return false;&lt;br /&gt;
 		&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	//발자국을 찍는다&lt;br /&gt;
 	public void PutStep(int x, int y) {&lt;br /&gt;
 		array[y][x]++;&lt;br /&gt;
 		&lt;br /&gt;
 		//아래주석표시를 지우면 발자국을 찍을때마다 보여줌&lt;br /&gt;
 		//ShowStep();&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	//발자국을 보여준다&lt;br /&gt;
 	public void ShowStep() {&lt;br /&gt;
 		String output = &amp;quot;&amp;quot;;&lt;br /&gt;
 		for (int i = 0; i &amp;amp;lt; max_y; i++)&lt;br /&gt;
 		{&lt;br /&gt;
 			for (int j = 0; j &amp;amp;lt; max_x; j++)&lt;br /&gt;
 				output += array[i][j] + &amp;quot;    &amp;quot;;&lt;br /&gt;
 			output += &amp;#039;\n&amp;#039;;&lt;br /&gt;
 		}&lt;br /&gt;
 		JOptionPane.showMessageDialog(null, output);&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
== Roach.java ==&lt;br /&gt;
 public class Roach {&lt;br /&gt;
 	private int p_x; // 바퀴의 현재 x 위치&lt;br /&gt;
 	private int p_y; // 바퀴의 현재 y 위치&lt;br /&gt;
 &lt;br /&gt;
 	//바퀴의 이동&lt;br /&gt;
 	public void Move(Board bo, int x, int y) {&lt;br /&gt;
 		p_x = x;&lt;br /&gt;
 		p_y = y;&lt;br /&gt;
 		bo.PutStep(p_x, p_y);		&lt;br /&gt;
 &lt;br /&gt;
 		while (!bo.IsStepFull()) {&lt;br /&gt;
 			int c_x; // 바퀴가 이동할 x 위치	&lt;br /&gt;
 			int c_y; // 바퀴가 이동할 y 위치&lt;br /&gt;
 			do&lt;br /&gt;
 			{&lt;br /&gt;
 				c_x = p_x; &lt;br /&gt;
 				c_y = p_y; 			 &lt;br /&gt;
 				int dir = (int)(Math.random() * 8);&lt;br /&gt;
 				switch (dir)&lt;br /&gt;
 				{&lt;br /&gt;
 					case 0: &lt;br /&gt;
 							c_y--; &lt;br /&gt;
 							break; &lt;br /&gt;
 					case 1: &lt;br /&gt;
 							c_x++; &lt;br /&gt;
 							c_y--; &lt;br /&gt;
 							break; &lt;br /&gt;
 					case 2: &lt;br /&gt;
 							c_x++; &lt;br /&gt;
 							break; &lt;br /&gt;
 					case 3: &lt;br /&gt;
 							c_x++; &lt;br /&gt;
 							c_y++; &lt;br /&gt;
 							break; 						&lt;br /&gt;
 					case 4: &lt;br /&gt;
 							c_y++; &lt;br /&gt;
 							break; &lt;br /&gt;
 					case 5: &lt;br /&gt;
 							c_x--; &lt;br /&gt;
 							c_y++; &lt;br /&gt;
 							break; 						&lt;br /&gt;
 					case 6: &lt;br /&gt;
 							c_x--; &lt;br /&gt;
 							break; 						&lt;br /&gt;
 					case 7: &lt;br /&gt;
 							c_x--; &lt;br /&gt;
 							c_y--; &lt;br /&gt;
 							break; &lt;br /&gt;
 				}&lt;br /&gt;
 			} while (!SeeNextPos(bo, c_x, c_y));&lt;br /&gt;
 			p_x = c_x;&lt;br /&gt;
 			p_y = c_y;&lt;br /&gt;
 			bo.PutStep(p_x, p_y);&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	//이동할 자리를 살핀다&lt;br /&gt;
 	//벽이면 false 벽이 아니면 true&lt;br /&gt;
 	public boolean SeeNextPos(Board bo, int x, int y) {&lt;br /&gt;
 		if (bo.IsPostionWall(x, y))&lt;br /&gt;
 			return false;&lt;br /&gt;
 		else&lt;br /&gt;
 			return true;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
== Human.java ==&lt;br /&gt;
 import javax.swing.JOptionPane;&lt;br /&gt;
 &lt;br /&gt;
 public class Human {&lt;br /&gt;
 	// 바퀴를 놓는다&lt;br /&gt;
 	public void PutRoach (Roach ro, Board bo, int x, int y) {&lt;br /&gt;
 		ro.Move(bo, x, y);&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	// KillRoach를 어떻게 사용할까???&lt;br /&gt;
 	public void KillRoach (Roach ro) {&lt;br /&gt;
 		//생명을 보호합시다 ^^&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	// 판을 본다&lt;br /&gt;
 	public void SeeBoard (Board bo) {&lt;br /&gt;
 		bo.ShowStep();&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	public static void main(String[] args) {&lt;br /&gt;
 		int start_x, start_y; // 바퀴의 시작위치 받을 변수&lt;br /&gt;
 		int board_x, board_y; // 판의 크기 받을 변수&lt;br /&gt;
 		Human sehwan = new Human();&lt;br /&gt;
 		Roach roach = new Roach();&lt;br /&gt;
 		&lt;br /&gt;
 		board_x = Integer.parseInt(JOptionPane.showInputDialog(null, &amp;quot;격자의 가로크기&amp;quot;));&lt;br /&gt;
 		board_y = Integer.parseInt(JOptionPane.showInputDialog(null, &amp;quot;격자의 세로크기&amp;quot;));&lt;br /&gt;
 		start_x = Integer.parseInt(JOptionPane.showInputDialog(null, &amp;quot;바퀴의 가로위치&amp;quot;));&lt;br /&gt;
 		start_y = Integer.parseInt(JOptionPane.showInputDialog(null, &amp;quot;바퀴의 세로위치&amp;quot;));&lt;br /&gt;
 		// 시작위치 맨왼쪽위가 (0,0)&lt;br /&gt;
 								&lt;br /&gt;
 		Board board = new Board(board_x, board_y);&lt;br /&gt;
 		&lt;br /&gt;
 		sehwan.PutRoach(roach, board, start_x, start_y); // 바퀴를 놓는다&lt;br /&gt;
 		sehwan.SeeBoard(board); 						 // 다 돌면 판을 본다&lt;br /&gt;
 &lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= 내용요약 =&lt;br /&gt;
== 1.객체지향 개념과 자바 ==&lt;br /&gt;
가.객체지향개념&lt;br /&gt;
상태:객체가 가지고 있는 속성 또는 특성&lt;br /&gt;
행동:객체가 가지고 있는 기능 또는 할 수 있는 행동&lt;br /&gt;
예)	자동차 - 객체&lt;br /&gt;
	색,바퀴,핸들,배기량,속도,기어 - 상태&lt;br /&gt;
	달린다,기어를 바꾼다,속도를 높이거나 낮춘다, 경적을 울린다 - 행동&lt;br /&gt;
&lt;br /&gt;
실세계 객체	-&amp;gt;	소프트웨어 객체&lt;br /&gt;
상태		-&amp;gt;	변수&lt;br /&gt;
행동		-&amp;gt;	메소드(함수)&lt;br /&gt;
&lt;br /&gt;
객체지향방법의 특징&lt;br /&gt;
 캡슐화(Encapsulation):&lt;br /&gt;
	변수와 메소드를 하나의 소프트웨어 묶음으로 만든다.&lt;br /&gt;
	캡슐화는 모듈성(modularity)과 정보은닉(information hiding)을 제공한다.&lt;br /&gt;
	모듈성은 각각의 객체를 위한 소스코드가 서로 무관하게 유지될 수 있다는 것이다.&lt;br /&gt;
	정보은닉은 객체가 가지는 정보에 접근 권한을 주어 다른 객체로 부터의 접근을 제한할 수 있다.&lt;br /&gt;
 메시지(Message):&lt;br /&gt;
	객체와 객체가 통신을 하는데 이용된다.&lt;br /&gt;
	메시지를 받을 객체, 수행을 요청한 메소드의 이름, 메소드에 의해 필요한 매개변수 등 세가지 구성요소를 가진다.&lt;br /&gt;
 클래스(Class):(벽돌틀)&lt;br /&gt;
	특정 종류의 객체들에 대해 일반적으로 적용할 수 있는 변수와 메소드를 정의하고 있다.&lt;br /&gt;
 인스턴스(Instance):(찍어낸 벽돌)&lt;br /&gt;
	클래스를 실제로 사용할 수 있도록 선언하는 것&lt;br /&gt;
 객체(Object)&lt;br /&gt;
	&lt;br /&gt;
 상속(Inheritance)&lt;br /&gt;
	상위클래스가 가지고 있는 특성들을 하위클래스에서 사용할 수 있다.&lt;br /&gt;
 다형성(Polymorphism)&lt;br /&gt;
	여러개의 클래스가 같은 메시지에 대해서 각자의 방법으로 작용할 수 있는 능력이다.&lt;br /&gt;
	연산자 다중 정의(overloading),함수 다중 정의,함수 재정의(overriding)등이 있다.&lt;br /&gt;
&lt;br /&gt;
나.클래스정의 및 인스턴스(객체) 생성&lt;br /&gt;
클래스 정의&lt;br /&gt;
 class 클래스이름 {&lt;br /&gt;
 &lt;br /&gt;
    // 변수 선언부&lt;br /&gt;
 &lt;br /&gt;
       …&lt;br /&gt;
 &lt;br /&gt;
    // 메소드 선언부&lt;br /&gt;
 &lt;br /&gt;
       …&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
인스턴스 생성&lt;br /&gt;
 클래스이름 클래스인스턴스이름 = new 클래스이름();&lt;br /&gt;
 &lt;br /&gt;
 또는&lt;br /&gt;
 &lt;br /&gt;
 클래스이름 클래스인스턴스이름;&lt;br /&gt;
 &lt;br /&gt;
 클래스인스턴스이름 = new 클래스이름();&lt;br /&gt;
다.변수 및 메소드의 접근제어&lt;br /&gt;
public:같은 클래스, 하위클래스, 같은 패키지내에 있는 클래스에서 접근가능&lt;br /&gt;
private:같은 클래스에서만 접근가능&lt;br /&gt;
protected:같은 클래스, 하위클래스, 같은 패키지내에 있는 클래스에서 접근가능&lt;br /&gt;
friendly(생략):같은 클래스, 같은 패키지내에 있는 클래스에서 접근 가능&lt;br /&gt;
&lt;br /&gt;
라.메소드의 다중정의&lt;br /&gt;
함수다중정의:같은 이름의 함수가 여러개 존재하는 것&lt;br /&gt;
연산자다중정의:같은 이름의 연산자가 클래스에 따라 다른 연산을 수행할 수 있도록 하는 것&lt;br /&gt;
-&amp;gt;자바에서 제공하지 않음&lt;br /&gt;
&lt;br /&gt;
== 2.객체 생성자와 객체 생성 과정 ==&lt;br /&gt;
가.객체생성자&lt;br /&gt;
 클래스이름(형식매개변수 리스트) { … }&lt;br /&gt;
 &lt;br /&gt;
 클래스이름(형식매개변수 리스트) {&lt;br /&gt;
 &lt;br /&gt;
 다른 객체 생성자 호출; // 반드시 첫번째 줄에서 이루어져야 함.&lt;br /&gt;
 &lt;br /&gt;
  …&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 클래스이름 변수이름 = new 클래스이름(실매개변수 리스트);&lt;br /&gt;
나.this&lt;br /&gt;
다.클래스멤버와 인스턴스 멤버&lt;br /&gt;
클래스 변수와 클래스 메소드의 선언)&lt;br /&gt;
 [접근권한] static 변수 선언;&lt;br /&gt;
 &lt;br /&gt;
 [접근권한] static 메소드 선언;&lt;br /&gt;
 &lt;br /&gt;
 클래스 변수와 클래스 메소드의 접근)&lt;br /&gt;
 &lt;br /&gt;
 클래스이름.클래스메소드()&lt;br /&gt;
 &lt;br /&gt;
 클래스메소드()&lt;br /&gt;
 &lt;br /&gt;
 객체참조값.클래스메소드()&lt;br /&gt;
&lt;br /&gt;
라. 클래스 초기화 및 객체의 생성 과정&lt;br /&gt;
클래스 변수의 초기화 및 초기화 블록&lt;br /&gt;
 static 변수선언=초기값;&lt;br /&gt;
 &lt;br /&gt;
 또는&lt;br /&gt;
 &lt;br /&gt;
 static 배열형변수선언=new 배열형;&lt;br /&gt;
 &lt;br /&gt;
 static {&lt;br /&gt;
 &lt;br /&gt;
 여러 개의 변수들의 초기화&lt;br /&gt;
 &lt;br /&gt;
 또는&lt;br /&gt;
 &lt;br /&gt;
 배열의 초기화;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
== 3.상속 ==&lt;br /&gt;
... 계속 읽는중 ...&lt;br /&gt;
&lt;br /&gt;
= OOP의 특성 =&lt;br /&gt;
캡슐화, 메시지, 클래스, 인스턴스, 객체, 상속, 다형성&lt;br /&gt;
위에 간단하게 설명이 있습니다&lt;br /&gt;
&lt;br /&gt;
= 질문 =&lt;br /&gt;
* 인스턴스와 객체가 비슷한 의미인것 같은데 차이는?&lt;br /&gt;
    차이는 없습니다. 같은 의미입니다^^;&lt;br /&gt;
* public과 protected의 차이는?&lt;br /&gt;
    아직 상속을 읽고 있는 중이기 때문에 모르는 것이지요^^. private 과 protected 는 상속이 이루어지지 않으면 똑같이 사용이 됩니다. 하지만 상속이 이루어진다면 의미는 틀려지죠. 만약 &amp;#039;&amp;#039;&amp;#039;자동차&amp;#039;&amp;#039;&amp;#039; 라는 객체가 있다고 봅시다. 그런데 이것은 굉장히 추상적인 개념이지요. 이 &amp;#039;&amp;#039;&amp;#039;자동차&amp;#039;&amp;#039;&amp;#039; 의 하위 개념인 &amp;#039;&amp;#039;&amp;#039;트럭&amp;#039;&amp;#039;&amp;#039; 과 &amp;#039;&amp;#039;&amp;#039;버스&amp;#039;&amp;#039;&amp;#039; 와 &amp;#039;&amp;#039;&amp;#039;승용차&amp;#039;&amp;#039;&amp;#039; 를 &amp;#039;&amp;#039;&amp;#039;자동차&amp;#039;&amp;#039;&amp;#039;에서 상속받아 만들었다고 합시다. 그랬을 때 &amp;#039;&amp;#039;&amp;#039;자동차&amp;#039;&amp;#039;&amp;#039; 가 가지는 어떠한 상태는 &amp;#039;&amp;#039;&amp;#039;트럭&amp;#039;&amp;#039;&amp;#039; 과 &amp;#039;&amp;#039;&amp;#039;버스&amp;#039;&amp;#039;&amp;#039; 와 &amp;#039;&amp;#039;&amp;#039;승용차&amp;#039;&amp;#039;&amp;#039;도 역시 가지고 있을 수도 있습니다. 이런 경우 protected 로 선언해 주면 그 상태를 상속받을 수 있다는 것이지요. 하지만 외부에서 접근은 불가능하다는 사실은 변함이 없습니다. 하지만 public 은 외부에서 접근이 가능하게 되는 것이지요. 한번 직접 코드로 만들어보세요. 어떻게 다른지 채험하는게 가장 이해가 쉬울겁니다.&lt;br /&gt;
&lt;br /&gt;
= 과제 추가 내용 =&lt;br /&gt;
* 와우~ 벌써 저정도로 설계가 가능하다니 놀라운데요? ^^; 정말 실력이 뛰어난거 아님 어디서 참고를 했을 가능성이 있겠군요. 직접 하셨나요? 아니면 다른 소스를 참고하셨나요?&lt;br /&gt;
* 이 소스를 이렇게 바꿔보세요. 가는 방향을 입력받아 움직임 -&amp;gt; 바퀴벌래 두마리를 올려놓음 -&amp;gt; 바퀴벌래를 장기에서 차가 가는 방법으로 바꿈.&lt;br /&gt;
* 자바에서 메소드는 처음 시작할 때 소문자입니다. 대문자로 시작하는 것은 클래스이지요.&lt;br /&gt;
* 내용을 1페이지 이내로 줄어보세요.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[JavaStudy2003/두번째과제]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>