레이블이 Java인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Java인 게시물을 표시합니다. 모든 게시물 표시

2016년 6월 20일 월요일

2016년 1학기 중간/기말 성적

중간/기말 시험 결과입니다. 최종 등급은 종합정보시스템에서 확인 가능합니다.
본 게시물은 한달 후에 삭제예정입니다.


2016년 6월 7일 화요일

Java 6/7 - 13장 스레드와 멀티태스킹

13장 스레드와 멀티태스킹

스레드

Thread, Runnable

동기화

synchronized method
synchronized 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장 자바의 이벤트 처리

MouseAdapter

KeyListener

실습

마우스로 클릭한 위치에 물고기 추가.
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.java

1. 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.java

LakeAL의 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.java

Java 4/26 - 6장 패키지 개념과 자바 기본 패키지

6장 패키지 개념과 자바 기본 패키지


패키지(package)

멤버 접근 한정자(member access modifiers) 

https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
Access Levels
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 

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

실습


1. Movable만 구현하는 Plankton 클래스와 Drawable과 Movable을 모두 구현하는 Diver 클래스를 만들어서 객체를 생성하여 Lake_If에 넣어보자.

다음 수업 첫 번째 시간 실습 내용(집에서가서 고민해보기)

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.java

moveFish() 함수

    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.java

class 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를 배열로 만들 것!

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