U E D R , A S I H C RSS

새싹교실/2014/자르반 (rev. 1.42)

새싹교실/2014/자르반

참여자

진행

  • JAVA합니다 JAVA.
  • 목요일 오후 2시 30분 6층 학회실
  • 준비물: 몸, 멘탈, 노트북은 있으면 좋음.
  • 수업 - 실습을 번갈아 가면서 할 예정이나, 2시간으로 되려나...?

수업 일지

3월 13일

  • 참가자: 조영준, 강민승, 김영현, 김윤성
  • 첫 번째 미팅!
    • 시간과 장소를 정하고 - 목요일 2시 6P
    • 주제를 정하고 - JAVA!
    • 이름을 정하고 - 자르반!
    • 아이스크림을 먹었습니다.

3월 20일

진행

  • 이론
  • 실습 - 일단 무작정 짜보기
    • 짜다 보면 C와 유사한 점과 C와 다른 점을 몸으로 느낄 수 있다!
      • 별 찍기 (System.out.println())
      • 이름과 나이 입력받기 (Scanner input = new Scanner(System.in), String 클래스)
    • 알아본 것들
      • 파일 명과 클래스 명은 같아야 한다.
      • 패키지-클래스-(매서드 / 필드) 구조로 되어있다.
      • 매서드와 필드 옆에 이상한게 붙어있다.
      • 이 외에는 대부분 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;
	}
}

후기

  • 내용내용 - 조영준
  • 자바 신기하고 재밋네요!
    c랑 멀어질듯… 1학년인데 ㄷㄷ - 영현
  • 비슷한것도 많으면서 다른것도많고 멘붕x_x 강민승

3월 27일

예정

  • C와 다른 부분들 간락하게 추가 설명
  • 클래스와 인스턴스

진행

  • 메모리 구조
    • 기본형 변수와 참조형 변수
  • 클래스와 객체
    • 살펴본 클래스들 : System, String, Math, Scanner, ...
    • 간단하게 클래스 및 객체를 만들어보기
    • static? private?

샘플

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
    • 필요한 method
      • 연락처 정보 출력 / showPhoneInfo() / void
    • 단 생년월일 정보는 저장을 할 수도, 저장하지 않을 수도 있게끔 생성자를 정의
    • 정의된 클래스의 확인을 위한 main 메소드도 간단히 정의
2단계
  • 사용자로부터 데이터 입력받기
  • 다음과 같은 과정이 반복적으로 이루어 져야 함
    • 프로그램을 계속 실행할 것인지 종료할 것인지 확인
    • 키보드로부터 데이터 입력
    • 입력 받은 데이터로 PhoneInfo의 인스턴스 생성
    • 생성된 인스턴스의 showPhoneInfo() 메소드 호출
3단계
  • 배열을 이용해서 사용자가 입력하는 정보가 최대 100개까지 유지되도록 프로그램을 변경.
  • 다음과 같은 기능을 수행하는 클래스(PhoneBookManager)를 만들어야 함:
    • field
      • PhoneInfo[] infoStorage
    • method (기능)
      • 새로운 연락처 저장하기
        • 단, 동명이인이 있으면 안 됨.
      • 이름으로 데이터 검색하고 정보 출력하기
      • 이름으로 데이터 검색하고 그 데이터 삭제하기
        • 만약 배열의 0 ~ 10번 인덱스에 연락처 정보가 있는데 3번 인덱스의 자료를 지울 경우, 4 ~ 10번 인덱스의 자료를 한 칸씩 앞으로 이동시켜 결과적으로 0 ~ 9번 인덱스에 연락처 정보가 있도록 해야 함.
  • 다음과 같은 과정이 반복적으로 이루어 져야 함
    • 메뉴 선택 (입력, 검색, 삭제, 종료)
    • 메뉴에 맞는 작업 수행

4월 10일

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;
...
  • PhoneInfo를 상속받는 PhoneUnivInfo, PhoneCompanyInfo class 추가
    • PhoneUnivInfo의 field: name, phoneNumber, major, year
    • PhoneCompanyInfo의 field: name, phoneNumber, company

  • 해당 class들을 이용하도록 Manager class를 수정
    • 데이터 입력 진입시 어느 데이터를 입력할 것인지 (일반/대학/회사) 사용자에게 물어봄
    • 데이터 조회시 이름과 번호 뿐만이 아니라 관련 정보도 모두 출력
    • searchData와 deleteData method는 수정이 없는 것이 정상.

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;
	}

	

}


  • 뭐지, 왜 여긴 자바지?! ㅋㅋ - 김태진
    • 이미 C를 좀 알고 있음 + 자바에 관심있어함 상태라 :Q - 조영준
  • 오 자바반이다ㅋㅋ - kero
  • 이름도 내용도 강려카다! - 원준연
  • JArVAn - 강민승
  • 나도 무언가를 했다 - 준완
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:29:54
Processing time 0.0383 sec