중간/기말 시험 결과입니다. 최종 등급은 종합정보시스템에서 확인 가능합니다.
본 게시물은 한달 후에 삭제예정입니다.
이 블로그는 사용하지 않습니다. jyheo.github.io나 github.com/jyheo로 방문해주세요. --- 한성대학교 컴퓨터공학부 허준영 교수 강의 블로그입니다. 강의 자료나 학생들이 참고할 문서, 웹 사이트 링크 등을 제공합니다.
2016년 6월 20일 월요일
2016년 6월 7일 화요일
Java 6/7 - 13장 스레드와 멀티태스킹
13장 스레드와 멀티태스킹
스레드
Thread, Runnable동기화
synchronized methodsynchronized block
wait(), notify()
notifyAll()
실습
예제 13-5 따라해보기2016년 6월 3일 금요일
기말 시험 시간/장소 공지
웹 프로그래밍 B반
6월 9일(목) 오후12시공학관 405호
자바 B반
6월 13일(월) 오후2시 탐구관 506호
임베디드OS A/N합반
6월 14일(화) 오전11시 탐구관 506호
2016년 5월 29일 일요일
Java 5/30 - 11장 기본적인 스윙 컴포넌트와 활용(실습)
11장 기본적인 스윙 컴포넌트와 활용(실습)
실습
예제 11-4
위의 소스를 수정하여 pull request할것
1. 과일의 종류를 다음과 같이 바꾸기.
String[] names = new String[] {"사과", "배", "귤", "오렌지", "포도"};
JCheckBox[] fruits = new JCheckBox[names.length];
2. 가격을 아래와 같이 배열로 만들어서 사용하기.
int[] prices = new int[] {2000, 5000, 500, 1000, 3000};
3. 아래 그림과 같이 선택된 과일의 이미지가 나타나도록 하기.
Layout과 Panel은 적절히 사용할 것
과일 이미지들은 GridLayout을 이용
2016년 5월 23일 월요일
Java 5/24 - 11장 기본적인 스윙 컴포넌트와 활용
11장 기본적인 스윙 컴포넌트와 활용
JButton, JLabel, JCheckbox, JRadioButton, JTextField, JTextArea, JList JComboBox, JSlider
2016년 5월 22일 일요일
Java 5/23 - 10장 자바의 이벤트 처리
10장 자바의 이벤트 처리
MouseAdapterKeyListener
실습
마우스로 클릭한 위치에 물고기 추가.https://github.com/jyheo/JavaExercise/blob/master/src/gui/LakeMouse.java
- 물고기를 클릭하면 물고기를 멈추게 하고, 멈춘 물고기를 클릭하면 다시 움직이게 만들기
- 물고기의 속도를 5-10 사이의 값으로 랜덤하게 지정하기
(5/23 첫시간) 실습
- JFrame에서 키를 입력받아 방향키에 따라 바위의 위치를 상하좌우로 5씩 이동하게 만들기
- 물고기가 바위에 부딛치면(겹치면) 물고기를 사라지게 하기
- 포식자 물고기 객체 하나 만들기. 일반 물고기 보다 크기를 크게 하거나 표시되는 글자를 다르게 하여 구분하도록 한다.
- 포식자 물고기와 일반 물고기가 부딛치면(겹치면) 일반 물고기를 사라지게 하기
2016년 5월 17일 화요일
Java 5/17 - 9장 자바 GUI 기초, 10장 이벤트 처리
9장 자바 GUI 기초, AWT와 SWING
실습
https://github.com/jyheo/JavaExercise/blob/master/src/gui/Lake_GUI.java1. Lake_GUI의 속성(필드) 중 width와 height를 제거한다.
MyObject의 속성(필드) 중 x와 y를 제거한다.
힌트: 그러면 x와 y, width, height 값은 어디에서 읽어 오는가?
JComponent의 getX()와 getY(), getWidth(), getHeight()를 사용한다.
JButton과 JFrame의 contentPane 모두 JComponent를 상속 한 것임
2. Lake_GUI의 속성(필드) 중 ArrayList<MyObject> objects를 제거한다.
힌트: JFrame의 contentPane에 속한 Component들을 어떻게 가져오는가?
JFrame의 getContentPane()이 리턴한 Container 객체의 getComponets()라는 메소드를 호출하면 JFrame의 contentPane에 속한 Component들의 배열을 가져올 수 있음.
즉,
getContentPane().getComponents()를 하면 Component 배열이 리턴됨. 이 배열을 사용!
단, 배열에 포함된 Component 중 MyObject 객체인 경우에만 new_move()를 부르도록 하시오.
3. MyFish의 경우 new_move()에서 x위치는 JFrame 경계에서 반대 방향으로 움직이도록 되어 있다. velocity_y 속성을 추가하여 y도 x와 동일하게 고쳐 보시오.
4. (추가 실습) MyFish에 velocity를 다르게 주는 방법을 만들고 속도가 다른 물고기를 두 마리 만들어 보시오.
10장 자바의 이벤트 처리
2016년 5월 16일 월요일
Java 5/16 - 9장 자바 GUI 기초, AWT와 SWING
9장 자바 GUI 기초, AWT와 SWING
- Container와 Component
- JFrame
- Layout
실습
예제 9-2 실습하기
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 를 주석처리하면 close 버튼 누를 때 어떻게 달라지는 확인해보기
- FlowLayout의 정렬 방식을 Right, Center로 하면 어떻게 달라지는, 프로그램 윈도우 크기를 변경하면 어떻게 바뀌는지 확인해보기
2016년 5월 10일 화요일
Java 5/10 - 8장 입출력 스트림과 파일 입출력(계속)
8장 입출력 스트림과 파일 입출력(계속)
버퍼 입출력
- BufferedInputStream
- BufferedReader
실습
예제 8-9, 8-10 파일 복사 예제
File 클래스
- File(File parent, String child)
- File(String pathname)
- File(String parent, String child)
- mkdir()
- String[] list()
- File[] listFiles()
- length()
- getPath()
- getName()
- isFile(), isDirectory()
- exists()
실습
예제 8-8 FIle 클래스를 활용한 파일 관리
long t = f.lastModified();
System.out.printf("\t수정한 시간: %tb %td %ta %tT\n",t, t, t, t);
이 부분을 Date() 클래스를 사용하도록 고쳐서 실습해볼것
2016년 5월 9일 월요일
Java 5/9 - 8장 입출력 스트림과 파일 입출력
8장 입출력 스트림과 파일 입출력
InputStream(바이트 스트림) 상속 받은 클래스:
- FileInputStream("파일명"):
- BufferedInputStream(InputStream)
- DataInputStream(InputStream):
Reader(문자(char) 스트림) 상속 받은 클래스
- InputStreamReader(InputStream)
- FileReader("파일명")
- BufferedReader(Reader)
예시)
new InputStreamReader( System.in )new FileInputStream( "파일이름" )
new BufferedInputStream( new FileInputStream("파일 이름") )
new BufferedReader( new InputStreamReader(System.in) )
new DataInputStream( new BufferdInputStream(System.in) )
실습
[예제 8-6 키보드 입력을 파일로 저장하기]에서, 파일에 쓰기 전에 무조건 대문자로 바꿔서 저장하기힌트 - Character.toUpperCase() 를 사용
2016년 5월 3일 화요일
Java 5/3 - 7장 제네릭과 컬렉션 (계속)
7장 제네릭과 컬렉션 (계속)
Collections
- ArrayList, Vector
- LinkedList
- HashMap
Collections static methods
Collections.sort, reverse, max, min, shuffle실습
예제 7-7, HaspMap을 이용한 학생 정보 저장마지막 while()문을 for (String name: names) 로 고쳐보시오.
2016년 5월 1일 일요일
Java 5/2 - 7장 제네릭(generic)과 컬렉션(collection)
7장 제네릭과 컬렉션(Generic and Collections)
Collections
- ArrayList, Vector
- LinkedList
- HashMap
언제 어떤 collection을 써야 하는가?
https://kaanmutlu.files.wordpress.com/2011/12/collections.png실습
Lake에서 배열을 썼던 것을 ArrayList로 바꾼 것.
https://github.com/jyheo/JavaExercise/blob/master/src/collections/LakeAL.javaLakeAL의 drawables와 movables 속성 두개를 아래와 같이 ArrayList<MyObject> 하나로 바꿔서 코드를 수정할 것.
private ArrayList<MyObject> myobjects = new ArrayList<MyObject>();
2016년 4월 25일 월요일
Java 4/26 - 6장 패키지 개념과 자바 기본 패키지(실습)
6장 패키지 개념과 자바 기본 패키지(실습)
java.util.Calendar
실습:
https://github.com/jyheo/JavaExercise/blob/master/src/javalang/javalang.javaJava 4/26 - 6장 패키지 개념과 자바 기본 패키지
6장 패키지 개념과 자바 기본 패키지
패키지(package)
멤버 접근 한정자(member access modifiers)
https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html| Modifier | Class | Package | Subclass | World |
|---|---|---|---|---|
public |
Y | Y | Y | Y |
protected |
Y | Y | Y | N |
| no modifier | Y | Y | N | N |
private |
Y | N | N | N |
Object 클래스와 Wrapper
Object 클래스 - http://hyeonstorage.tistory.com/178
Wrapper 클래스
java.lang.*
String, java.lang.StringBuffer
java.lang.Math
java.util.*
java.util.StringTokenizer
java.util.Calendar
2016년 4월 15일 금요일
2016년 1학기 중간시험 안내.
2016년 1학기 중간시험 안내.
Java B반: 4월19일 화요일 5교시(오후1시) 공학관A 405호
임베디드OS A반: 4월19일 화요일 3교시(오후11시) 수업 강의실(공학관A 403호)
임베디드OS N반: 4월19일 화요일 야2교시(오후6시55분) 수업 강의실(학과사무실 옆)
웹프로그래밍 B반: 4월21일 목요일 4교시(오후12시) 공학관A 405호
2016년 4월 10일 일요일
Java 4/11 - 5장 상속(추상 클래스와 인터페이스)
5장 상속(추상 클래스와 인터페이스)
추상 클래스
추상 메소드 - 선언은 했으나 내용이 정의되지 않은 메소드, 추상 메소드를 갖는 클래스는 무조건 추상 클래스가 되어야 함추상 클래스 - 바로 객체 생성할 수 없고, 상속을 해서 추상 메소드를 정의한 후에 객체 생성이 가능하도록 하는 클래스, 추상 메소드가 없는 경우에는 상속만 하면 객체 생성이 가능해짐
abstract class AbsClass {
public AbsClass () { }
public abstract void abs_method(); // 추상 메소드
}
abstract class AbsClass { // 추상 메소드는 없지만 추상 클래스로 선언됨
public AbsClass () { }
public void abs_method();
}
http://www.tutorialspoint.com/java/java_abstraction.htm
인터페이스
- 모든 메소드가 추상 메소드임- 상속 관계가 없는 객체에게 특정 동작(메소드)을 갖추도록 요구할 때 사용함.
예를 들어 호수에 물고기랑 플랑크톤, 다이버들 모두 '움직임'이란 메소드를 가질 수 있는데, 이들이 상속 관계라고 보기는 어렵다. 그런데, 공통 메소드를 갖는 객체들에 대해 처리하고 싶을때가 생긴다.
public interface AbsInterface {
public void abs_method();
}
인터페이스는 상속이 아니라 구현(implements)을 통해 사용
class AbsImpl implements AbsInterface {
public void abs_method() {}
}
한개 이상의 인터페이스를 상속하여 다른 인터페이스를 만들 수 있음
http://www.tutorialspoint.com/java/java_interfaces.htm
실습
다음 수업 첫 번째 시간 실습 내용(집에서가서 고민해보기)
2. 인터페이스 상속하기
Movable과 Drawable을 상속한 MoveDrawable interface를 만들고, 이를 이용하여 Lake_If에 addMoveDrawable(MoveDrawable md) 메소드를 추가하여 다음과 같이 main()이 가능하도록 해보자. 물론 MyFish도 약간 고쳐야 함.
Lake_If lake = new Lake_If(80, 20);
MyFish f = new MyFish("FIsh", "<#--<", 1, 1);
lake.addMoveDrawable(f);
lake.addDrawable(new MyRock("Rock", "(##)", 10, 10));
3. 메소드를 좀 더 심플하게!
Lake_If에 addObject(MyObject)라는 메소드를 추가한다. 그리고 인자로 받은 객체가 Moveable 인터페이스를 구현하고 있는지, Drawable 인터페이스를 구현하고 있는지 확인하여 해당 배열에 넣는 addDrawable()과 addMovable()을 적절히 호출한다.
힌트: instanceof 연산자 사용.
2016년 4월 4일 월요일
Java 4/5 - 5장 상속(계속)
5장 상속(계속)
이전 시간 실습
http://jylecture.blogspot.kr/2016/04/java-44-5.html누군가의 실습 내용:
https://github.com/amdjd/JavaExercise/blob/110d54c2e5d0ccbe184ee9a57bef1ddcf4b11e41/src/classes/Lake.javamoveFish() 함수
public void moveFish() {for (int i = 0; i < fish.length; i += 2) {
fish[i].move(width, height);
}
for (int i = 1; i < fish.length; i += 2) {
fish[i].move2(width, height);
}
}
상속을 이용해서 바꿔보기
https://github.com/jyheo/JavaExercise/blob/master/src/classes/Lake10.javaclass FoolFish extends Fish { // 상속
FoolFish(String name, String shape) {
super(name, shape); // 부모 클래스의 생성자를 부름, super는 부모 클래스를 가리킴
}
public void move(int width, int height) { // 메소드 오버라이딩(overriding), 원래 메소드는?
x++; // Fish의 x, y가 private int였다고 지금은 protected int로 바뀌어 있음. 왜?
y++;
if (x >= width)
x = 0;
if (y >= height)
y = 0;
}
}
public class Lake10 {
private int width;
private int height;
private Fish[] fishes;
public Lake10(int width, int height) {
this.width = width;
this.height = height;
fishes = new Fish[10];
for (int i = 0; i < fishes.length; i++) {
if (i % 2 == 0)
fishes[i] = new Fish("Even", "<#--<");
else
fishes[i] = new FoolFish("Odd", "<$--<"); // Fish 레퍼런스가 FoolFish를 가리킨다?
// 업 캐스팅(upcasting)
}
}
public void moveFish() {
for (Fish f : fishes) // f가 Fish 객체일 때도 있고, FoolFish일 때도 있는데,
f.move(width, height); // move()는 누구의 move()가 불리는가?
} // 동적 바인딩(dynamic binding)
2016년 4월 3일 일요일
Java 4/4 5장 상속
5장 상속
객체간의 관계
A has-a B: 객체 A가 객체 B를 가지고 있음, A가 B로 구성됨. A에 B가 포함됨. 자동차는 바퀴4개와 엔진을 가지고 있음.A is-a B: 객체 A는 객체 B이다. 학생은 사람이다. B가 더 일반화된 객체임.
A has-a B
- composition: 자동차는 엔진을 가지고 있음. 엔진이 없으면 자동차는 의미가 없음.- aggregation: 호수에 물고기가 있음. 물고기가 없어져도 호수는 존재함.
보통 B는 클래스 A의 필드(속성, 멤버 변수)로 표현됨.
Car has-a Engine
class Engine {}
class Car {
private Engine engine;
Car() {
engine = new Engine();
}
Car(Engine e) {
engine = e;
}
}
A is-a B
A는 B의 한정(전문, specialized)된 객체, B는 A의 일반(generalized)화된 객체Java와 같은 객체지향 언어에서는 상속(inheritance)를 통해 표현됨.
Student is a Person
class Person {private String id_card;
}
class Student extends Person {
private String student_id_card;
}
상속 받은 클래스를 서브클래스(subclass, 자식), 상속된 클래스를 슈퍼클래스(superclass, 부모)라고 함.
Person이 슈퍼클래스, Student가 서브클래스
실습
호수의 물고기 시뮬레이션
Lake has-a Fish
1. Lake의 Fish를 10마리로 늘려보자.
Fish를 배열로 만들 것!
Fish를 배열로 만들 것!
2. 10마리 Fish 중 홀수 인덱스는 원래 대로 랜덤하게 움직이게 하고, 짝수 인덱스 Fish는 x, y를 무조건 1씩 증가하도록 움직이게 해보자.
새로운 Fish2 클래스를 만들어도 되고, Fish 클래스에 새로운 움직임 메소드를 만들어도 됨.
2016년 3월 29일 화요일
Java 3/29 4장 클래스와 객체(객체 배열, 생성자, 오버로딩)
4장 클래스와 객체(객체 배열, 생성자, 오버로딩)
실습
사각형(Rectangle) 클래스 완성하기 - 교재 p.235 실습문제 2번 변형아래 소스에서 TODO로 되어 있는 부분의 내용을 채워서, main()이 적절히 동작하도록 만드시오. equals(), in(), overlap()은 모두 true를 리턴하게 됨
https://github.com/jyheo/JavaExercise/blob/master/src/classes/Rectangle.java
- setPoints() - 인자로 받은 x, y 좌표들이 모두 0보다 커야 함
- getWidth() - 가로 길이(x좌표 이용)
- getHeight() - 세로 길이(y좌표 이용)
- getArea() - 면적
- equals() - 인자로 받은 사각형과 위치와 크기가 동일하면 true리턴
- in() - 인자로 받은 사각형 내부에 위치한다면 true리턴
- overlap() -인자로 받은 사각형과 겹치는 부분이 존재한다면 true리턴
이론
https://github.com/jyheo/JavaExercise/blob/master/src/classes/Set.java- 객체 배열 -> 정확히는 객체 레퍼런스의 배열
- Set[] sets = new Set[5];
- this 레퍼런스
- 객체 자신을 가리키기 위한 레퍼런스
- this.array
- this.size
- 생성자(Constructor)
- Set()
- Set(int[] a)
- Set(Set s)
- 생성자에서만 사용 가능한 this()
- 메소드 오버로딩
- addElement(int )
- addElement(int[] )
- 생성자 3개도 오버로딩임
- Garbage collection
- 더이상 참조하는 레퍼런스 변수가 존재하지 않는다면, 즉 어떤 객체를 참조할 방법이 존재하지 않는다면, 쓰레기가 되어 자동으로 처리됨.
- 자바에서는 new로 만든 객체의 소멸에 대해 신경쓸 필요 없음.
실습2
- 앞의 예에서 System.arraycopy() 대신에 사용할 적당한 private 메소드를 만들어서 쓰시오.
- public static Set intersection(Set A, Set B)를 구현하시오.
- Set(int[]) 생성자의 내용에서 인자로 받은 배열을 그대로 복사하지 말고, 집합 원소 중복되지 않게 검사하면서 추가하도록 고치시오. addElement(int[])를 활용하면 됨
2016년 3월 27일 일요일
Java 3/28 4장 클래스와 객체(클래스, 객체 생성)
4장 클래스와 객체
객체지향의 3대 특징 (무조건 일단 외운다)
1. 캡슐화(encapsulation) - 클래스의 속성과 메소드(method), 접근지정자를 통해 실현2. 상속(inheritance) - 클래스 상속을 통해 실현
3. 다형성(polymorphism) - 메소드 overriding(재정의) overloading(중복)으로 실현
클래스
객체를 정의하기 위한 틀객체의 속성(상태, 필드, 멤버 변수)과 메소드(멤버 함수, 메시지, 행동, 액션)을 정의함
메소드는 객체의 속성을 변화시킴
예) 구구단 생성기
https://github.com/jyheo/JavaExercise/blob/master/src/classes/MultiplicationTable.java- 속성(필드):
- number 몇단?
- max_number 최대 단
- 메소드:
- setNumber() 단을 지정한다.
- setMaxNumber() 최대 단을 지정한다.
- printTable() 현재 단을 출력해라.
1. 캡슐화: 구구단 생성기를 사용하는 너는 구구단을 몰라도, 단을 입력하고 출력 명령만 내리면 구구단을 볼 수 있다.
2. 상속: 여기에서는 없음.
3. 다형성: 여기에서는 없음.
실습
구구단 예제를 2단부터 9단까지 출력하도록 고치시오.단, main() 함수 내용만 수정할 것.
2x2=4
2x3=6
...
9x9=81
피드 구독하기:
글 (Atom)
