Difference between r1.41 and the current
@@ -545,3 +545,4 @@
* 오 자바반이다ㅋㅋ - [kero]
* 이름도 내용도 강려카다! - [원준연]
* JArVAn - [강민승]
* 이름도 내용도 강려카다! - [원준연]
* JArVAn - [강민승]
* 나도 무언가를 했다 - [김준완]
진행 ¶
- JAVA합니다 JAVA.
- 목요일 오후 2시 30분 6층 학회실
- 준비물: 몸, 멘탈, 노트북은 있으면 좋음.
- 수업 - 실습을 번갈아 가면서 할 예정이나, 2시간으로 되려나...?
수업 일지 ¶
3월 13일 ¶
- 참가자: 조영준, 강민승, 김영현, 김윤성
- 첫 번째 미팅!
- 시간과 장소를 정하고 - 목요일 2시 6P
- 주제를 정하고 - JAVA!
- 이름을 정하고 - 자르반!
- 아이스크림을 먹었습니다.
- 시간과 장소를 정하고 - 목요일 2시 6P
3월 20일 ¶
진행 ¶
- 이론
- 우리의 목표 / 원하는 것 생각하기
- 위키 사용법 안내
- 자바가 돌아가는 방법
및 자바 자랑
- 자바 개발 환경 구축
- http://www.oracle.com/technetwork/java/javase/downloads/index.html (jdk1.8)
- java / javac 이용
- java / javac 이용
- http://www.eclipse.org/downloads/ (Eclipse Standard)
- eclipse 사용 방법 안내
- eclipse 사용 방법 안내
- http://www.oracle.com/technetwork/java/javase/downloads/index.html (jdk1.8)
- 우리의 목표 / 원하는 것 생각하기
- 실습 - 일단 무작정 짜보기
- 짜다 보면 C와 유사한 점과 C와 다른 점을 몸으로 느낄 수 있다!
- 별 찍기 (System.out.println())
- 이름과 나이 입력받기 (Scanner input = new Scanner(System.in), String 클래스)
- 별 찍기 (System.out.println())
- 알아본 것들
- 파일 명과 클래스 명은 같아야 한다.
- 패키지-클래스-(매서드 / 필드) 구조로 되어있다.
- 매서드와 필드 옆에 이상한게 붙어있다.
- 이 외에는 대부분 C랑 비슷하나, C보다 개발자에게 친근하다.
- 파일 명과 클래스 명은 같아야 한다.
- 짜다 보면 C와 유사한 점과 C와 다른 점을 몸으로 느낄 수 있다!
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new java.util.Scanner(System.in); String name = input.nextLine(); int a = input.nextInt(); System.out.println("제 나이는" + a + "살입니다."); System.out.println("제 이름은" + name + "입니다."); System.out.println(sum(3, 4)); } public static int sum(int a, int b) { return a + b; } }
3월 27일 ¶
예정 ¶
- C와 다른 부분들 간락하게 추가 설명
- 클래스와 인스턴스
진행 ¶
- 메모리 구조
- 기본형 변수와 참조형 변수
- 기본형 변수와 참조형 변수
- 클래스와 객체
- 살펴본 클래스들 : System, String, Math, Scanner, ...
- 간단하게 클래스 및 객체를 만들어보기
- static? private?
- 살펴본 클래스들 : System, String, Math, Scanner, ...
샘플 ¶
public class Main { public static void main(String[] args) { TV tv1 = new TV(); tv1.turnOn(); tv1.setChannel(30); tv1.setVolume(3); TV tv2 = new TV(5, 10); tv2.turnOn(); tv2.channelUp(); tv2.channelUp(); tv2.volumeUp(); System.out.println("tv1's channel is " + tv1.getChannel() + " and volume level is " + tv1.volumeLevel); System.out.println("tv2's channel is " + tv2.getChannel() + " and volume level is " + tv2.volumeLevel); } } class TV { private int channel; // Default channel is 1 int volumeLevel; // Default volume level is 1 boolean on; // By default TV is off public TV() { channel = 5; volumeLevel = 3; on = false; } public TV(int newChannel, int newVolume) { channel = newChannel; volumeLevel = newVolume; } public void turnOn() { on = true; } public void turnOff() { on = false; } public void setChannel(int newChannel) { if (on && newChannel >= 1 && newChannel <= 120) channel = newChannel; } public void setVolume(int newVolumeLevel) { if (on && newVolumeLevel >= 1 && newVolumeLevel <= 7) volumeLevel = newVolumeLevel; } public void channelUp() { if (on && channel < 120) channel++; } public void channelDown() { if (on && channel > 1) channel--; } public void volumeUp() { if (on && volumeLevel < 7) volumeLevel++; } public void volumeDown() { if (on && volumeLevel > 1) volumeLevel--; } public int getChannel() { return channel; } }
후기 ¶
4월 3일 ¶
미니 프로젝트 ¶
- '난 정말 JAVA를 공부한 적이 없다구요' 기반
1단계 ¶
- PhoneInfo Class 정의하기
- 필요한 Field
- 이름 / name / String
- 전화번호 / phoneNumber / String
- 생년월일 / birthday / String
- 이름 / name / String
- 필요한 method
- 연락처 정보 출력 / showPhoneInfo() / void
- 연락처 정보 출력 / showPhoneInfo() / void
- 단 생년월일 정보는 저장을 할 수도, 저장하지 않을 수도 있게끔 생성자를 정의
- 정의된 클래스의 확인을 위한 main 메소드도 간단히 정의
- 필요한 Field
2단계 ¶
- 사용자로부터 데이터 입력받기
- 다음과 같은 과정이 반복적으로 이루어 져야 함
- 프로그램을 계속 실행할 것인지 종료할 것인지 확인
- 키보드로부터 데이터 입력
- 입력 받은 데이터로 PhoneInfo의 인스턴스 생성
- 생성된 인스턴스의 showPhoneInfo() 메소드 호출
- 프로그램을 계속 실행할 것인지 종료할 것인지 확인
3단계 ¶
- 배열을 이용해서 사용자가 입력하는 정보가 최대 100개까지 유지되도록 프로그램을 변경.
- 다음과 같은 기능을 수행하는 클래스(PhoneBookManager)를 만들어야 함:
- field
- PhoneInfo[] infoStorage
- PhoneInfo[] infoStorage
- method (기능)
- 새로운 연락처 저장하기
- 단, 동명이인이 있으면 안 됨.
- 단, 동명이인이 있으면 안 됨.
- 이름으로 데이터 검색하고 정보 출력하기
- 이름으로 데이터 검색하고 그 데이터 삭제하기
- 만약 배열의 0 ~ 10번 인덱스에 연락처 정보가 있는데 3번 인덱스의 자료를 지울 경우, 4 ~ 10번 인덱스의 자료를 한 칸씩 앞으로 이동시켜 결과적으로 0 ~ 9번 인덱스에 연락처 정보가 있도록 해야 함.
- 만약 배열의 0 ~ 10번 인덱스에 연락처 정보가 있는데 3번 인덱스의 자료를 지울 경우, 4 ~ 10번 인덱스의 자료를 한 칸씩 앞으로 이동시켜 결과적으로 0 ~ 9번 인덱스에 연락처 정보가 있도록 해야 함.
- 새로운 연락처 저장하기
- field
- 다음과 같은 과정이 반복적으로 이루어 져야 함
- 메뉴 선택 (입력, 검색, 삭제, 종료)
- 메뉴에 맞는 작업 수행
- 메뉴 선택 (입력, 검색, 삭제, 종료)
4월 10일 ¶
- 훑고 지나갔던 배열에 대해서 다시 살펴보기
- JAVADOC 존재 및 읽는 방법 소개
5월 8일 ¶
진행 ¶
- 주제: 상속 ~
I'm your father~
- 왜 쓰는가 - 재활용? 구성!
- 어떻게 쓰는가 - 문법 살펴보기
- 어떻게 돌아가는가 - 예제 코드를 보며
- 접근지시제어자 다시 보기 - public? private? protected?
- 사실은 모든 class는 무언가를 상속받고 있다! - Object
- Overloading 아니고 OverRiding - Object의 toString
- 사람은 동물이지만 동물은 사람이 아닙니다. - 상속의 관계
- 왜 쓰는가 - 재활용? 구성!
실습 코드 ¶
public class Man { private String name; private int age; public Man(String name, int age) { this.name = name; setAge(age); } public void tellYourInfo() { System.out.println("My name is " + name); System.out.println("Age is " + age); } public void setAge(int newAge) { if (newAge < 0) { newAge = 0; } age = newAge; } public String toString() { return name + ", " + age + "세"; } }
public class BusinessMan extends Man { private String company; private String position; public BusinessMan(String name, int age, String company, String position) { super(name, age); this.company = company; this.position = position; } public void tellYourInfo() { super.tellYourInfo(); tellYourBusiness(); } public void tellYourBusiness() { System.out.println("My company is " + company); System.out.println("My position is " + position); } public void business() { System.out.println("안녕하세요?"); } public String toString() { return super.toString() + " / " + company; } }
class Main { public static void main(String[] args) { Man[] people = {new Man("사람", -4), new Man("사람1", 5), new Man("사람2", 5), new BusinessMan("비지니스맨", 10, "중앙대", "잉여")}; for (int i = 0; i < people.length; i++) { System.out.println(people[i]); people[i].tellYourInfo(); } ((BusinessMan) people[3]).business(); } }
5월 22일 ¶
프로젝트 진행 ¶
4단계 ¶
- 이전에 만든 class 에서 birthday field와 관련 메서드 제거/변경
class PhoneInfo { String name; String phoneNumber; String birthday; ...
9월 14일 ¶
- 복습
9월 24일 ¶
- exception handling
10월 1일 ¶
- interface, abstract
10월 29일 ¶
- 실습
개요 ¶
class Point implements Comparable<Point> Point(double x, double y) { this.x = x; this.y = y;} double x; double y; int compareTo(Object); String toString(); -> "(x, y)"꼴로 리턴 class Graph Point[] points = new Point[100]; void addPoint(Point); void printAll(); -> 모든 점 위치 출력 double getLength(); class Main 1. import java.util.Random Random random = new Random(); random.nextDouble() (0~1사이의 실수) 을 이용, 임의의 점 10개(좌표는 0~ 10)를 생성하고 printAll과 getLength 결과 출력 2. Math.sin(double)을 통해 0도, 5도, 10도, ... , 180도의 점을 추가, printAll과 getLength 결과 출력 (주의) 입력받는 값은 radian값이므로 Math.PI를 이용 90 / 180 * Math.PI = 90도 (hint) Math.pow(4, 0.5) => 2 Math.pow(3, 4) => 81 Arrays.sort(Obejct[]) for (Class objectName : arrayName) { }
조 1 ¶
package assignment; import java.util.Random; public class Main { public static void main(String[] args) { makePoints(); System.out.println("--------------------------------------------------------"); getCircleLength(); } public static void makePoints() { Random random = new Random(); Graph graph = new Graph(); for(int i = 0 ; i < 10 ; i ++ ) { graph.addPoint(new Point(10.0 * random.nextDouble(), 10.0 * random.nextDouble())); } System.out.println(graph.getLength()); graph.printAll(); } public static void getCircleLength() { Graph circleGraph = new Graph(181); for( int i = 0 ; i < 181 ; i ++) { Point graphPoint = new Point(Math.cos((double) i / 180.0 * Math.PI), Math.sin((double) i / 180.0 * Math.PI)); circleGraph.addPoint(graphPoint); } System.out.println(circleGraph.getLength()); circleGraph.printAll(); } }
package assignment; class Point implements Comparable<Point> { private double x; private double y; public Point () { this.x = 0; this.y = 0; } public double getX() { return x; } public double getY() { return y; } public Point (double x, double y) { this.x = x; this.y = y; } public String toString() { return ("(" + x + ", " + y + ")" ) ; } @Override public int compareTo(Point arg0) { if(x > arg0.x) return 1; else if (x == arg0.x) return 0; else return -1; } }
package assignment; import java.util.Arrays; public class Graph { private int end = 0; private double length = 0.0; public Point[] points; public Graph () { this(100); } public Graph (int leng) { points = new Point[leng]; } public void addPoint(Point p) { points[end] = new Point(p.getX(),p.getY()); end++; } public void printAll() { for(int i = 0 ; i < end ; i++) { System.out.println(points[i]); } } public double getLength() { Arrays.sort(points, 0, end); for (int i = 1 ; i < end ; i++) { length += Math.sqrt(Math.pow((points[i].getY() - points[i-1].getY()), 2) + Math.pow((points[i].getX() - points[i-1].getX()), 2)); } return length; } }
11월 5일 ¶
- generic
package practice; import java.util.ArrayList; import java.util.Random; public class Main { public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<Integer>(); Random mola = new Random(); int i; for(i=0;i<1000;i++) list.add(i); list.remove(945); for(i=0;i<list.size();i++){ System.out.println(list.get(i)); } } }
package practice; public class MyStack<T> { private int index; private Object[] stack; public MyStack() { index = 0; stack = new Object[100]; } public void push(T o) { stack[index] = o; index++; } public T pop() { index--; return (T)stack[index]; } }
package practice; public class Person { public String name; public int age; public Person(int a, String b) { name = b; age = a; } public String toString(){ return "이름은"+name+"나이는"+age; } }