Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

한자공/시즌3/20140807: Difference between revisions

From ZeroWiki
imported>healu1423
No edit summary
(Repair batch-0008 pages from live compare)
 
(63 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Describe 한자공/시즌3/20140807 here
__TOC__
== 일시 ==
== 일시 ==
 
8월 7일 폭파 인터넷 정리
8월 7일 인강
 
== 참가자 ==
== 참가자 ==
{| class="wikitable"
{| class="wikitable"
|-
|-
| 유재범
| 유재범
| 참석
| 참석(?)
|-
|-
| 이지수
| 이지수
| 참석
| 참석(?)
|-
|-
| 김용준
| 김용준
| 참석
| 참석(?)
|-
|-
| 김정민
| 김정민
| 참석
| 참석(?)
|}
|}
== 진행 상황 ==
== 진행 상황 ==
* 파일 입출력 정리
* I/O
=== 발표(할) 내용 ===
* 핵심 : 파일 입출력과 스트림
* 바이트 스트림 & 문자 스트림
 
'''I/O'''
input과 Output의 약자 -> 입출력
 
'''스트림(Stream)'''
  1. 데이터를 운반하는데 사용되는 연결통로
  2. 스트림은 FIFO(First In First Out)구조
  3. 단방향통신만 가능 -> 입력스트림(input stream)과 출력스트림(output stream) 2개의 스트림이 존재
  4. 바이트 스트림, 문자 스트림 두개로 나뉨
※ 다음에 나오는 그림들은 모든 스트림을 정리한 것이 아니므로 다른 스트림이 필요하면 API와 구글님께...
 
'''바이트스트림'''
                      ┌ FileInputStream
      ┌- InputStream ┼ FilterInputStream ┬ BufferedInputStream
      │              │                  └ DataInputStream 
      │              └ ObjectInputStream
Object┤
      │              ┌ FileOutputStream
      │              │                  ┌ BufferedOutputStream
      └- OutputStream ┼ FilterOutputSteam ┼ DataOutputStream
                      │                  └ PrintStream
                      └ ObjectOutputStream
* Buffered~ : 입출력의 효율을 높이기 위해 버퍼(바이트배열)를 사용하여 쓴다.
* Data~ : byte단위가 아닌, 다른 기본 자료형의 단위로 읽고 쓸수 있게했다.
* PrintStream : printf. println, print 메서드를 오버로딩해서 기능을 제공한다.(System.out.printf)
** PrintWriter이 다양한 언어의 문자를 처리하기 때문에 가능하면 PrintWriter를 권장한다.


=== 발표 내용 ===
'''문자 스트림'''
* 핵심 : 파일 입출력 스트림
                ┌ BufferedReader
** 문자
      ┌- Reader ┼ InputStreamReader - FileReader
Object┤
      │        ┌ BufferedWriter
      └- Writer ┼ OutputStreamWriter - FileWriter
                └ PrintWriter
 
※ java에서는 C언어와 달리 char형이 2 byte를 기본이기 때문에 문자를 처리하기 힘들다.
    그러므로 문자기반 스트림을 사용하자.
※ InputStream -> Reader
    OutputStream -> Writer
* YJB가 값을 입력 받을때 쓰고 있는 BufferedReader or BufferedInputStream보다 Scanner가 편리하고 용의하다.(JDK 1.5부터 추가)


'''표준입출력 - System.in(콘솔 입력), System.out(콘솔 출력), System.err(콘솔 출력)'''
  1. 표준입출력은 콘솔을 통한 데이터 입력과 콘솔로의 데이터 출력을 의미
  2. 자바에는 표준 입출력을 위해 3가지 입출력 스트림(System.in, System.out, System.err)을 제공
  3. 어플리케이션 실행과 동시에 사용할 수 있게 자동적으로 생성되므로 코드를 작성하지 않고 사용
try
{// 끝내려면 Enter나 ^Z
  int input = 0;
 
  while(input=System.in.read()) != =1)
    System.out.println("input : "+input+" (char)input : "+(char)input);
} catch(IOException e){}
특징
1. 콘솔입력은 버퍼를 가지고 있기 때문에 Backspace키를 이용해 편집이 가능
2. 크기는 버퍼 크기만큼 입력 가능
3. 입력을 계속 기다리는 상태(블러킹 상태)에 머무름
 
== 다음 진행 ==
== 다음 진행 ==
* [[김용준]] 학우의 File I/O
* [[김용준]] 학우의 File I/O 보충 및 발표(파일 스트림,직렬화)
== 과제 ==
== 과제 ==
=== 유재범 ===
=== 유재범 ===
   
   
Line 35: Line 90:
   
   
=== 김용준 ===
=== 김용준 ===
package Calculator_140728;
   
   
import java.awt.BorderLayout;
=== 김정민 ===
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import Calculator_140728.base;
public class gui_v1 {
public static void main( String [] args){
new Calculator("계산기");
}
}
class Calculator extends JFrame{
String[] strOpt = { "/", "*", "-", "+", "C", "="};
String strFm = ""; //수식라벨을 위한 스트링
String strTf = ""; //텍스트 필드를 위한 스트링
String strCal = ""; //계산을 위한 스트링
String result = "0"; //결과값을 위한 스트링
//=을 위한 변수
Boolean countE = false;// 연속 = 기능 비활성화
int tmpE;
String strE;
//연속 연산을 위한 변수
Boolean countO = false;// 연속 연산 기능 비활성화
Boolean countP = false;// 연산자 변경
String tmpO;//이전 입력받은 수
JButton[] num = new JButton[10];
JButton[] opt = new JButton[strOpt.length];
   
   
JLabel fm = new JLabel(); //현재 계산식 보는 라벨
JTextField tf = new JTextField("0");//숫자와 연산
JPanel see = new JPanel();
JPanel input_num = new JPanel();
JPanel input_opt = new JPanel();
private void compose() {
Container container = this.getContentPane();
container.setLayout(new BorderLayout(4,7));
//연산자
input_opt.setLayout(new GridLayout(4,1,10,10));
for(int i = 0; i < opt.length; i++)
{
opt[i] = new JButton(strOpt[i]);
opt[i].setFont(new Font("굴림", Font.BOLD, 15));
if(i < 4) input_opt.add(opt[i]);
}
container.add("East",input_opt);
//라벨과 텍스트박스
see.setLayout(new GridLayout(2,1,0,2));
see.add(fm);
see.add(tf);
fm.setFont(new Font("굴림", 0, 12));
tf.setFont(new Font("굴림", Font.BOLD, 21));
container.add("North",see);
//숫자 부분
input_num.setLayout(new GridLayout(4,3,3,10));
for(int i = 0 ; i <= 9 ; i++)
{
num[i] = new JButton(Integer.toString(i));
num[i].setFont(new Font("굴림", Font.BOLD, 19));
}
for(int i = 2 ; i >= 0 ; i--)
for(int j = 1 ; j <= 3 ; j++) input_num.add(num[3*i+j]);
input_num.add(num[0]);
input_num.add(opt[4]);
input_num.add(opt[5]);
container.add("Center",input_num);
}
public Insets getInsets()
{//여백을 주기 위한 메소드 오보라이딩
Insets i = new Insets(30,15,15,15);
return i;
}
private void setevent() {
for(JButton e : num) e.addActionListener(new MyAction());
for(JButton e : opt) e.addActionListener(new MyAction());
}
class MyAction implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
Object who = e.getSource();
for(int i = 0; i < num.length; i++){
if(who == num[i]){
strTf += i;
tf.setText(strTf);
countE = false;// 연속 = 기능 비활성화
countP = false;// 연산자 변경 비활성화
}
}
for(int i = 0; i< opt.length; i++)
if(who == opt[i]) operation(i);
}
private void operation(int nowOpt){
switch(nowOpt)
{
default: // 연산자들 기능 구현
if (tf.getText().equals("0"))
{// 초기 0값
strFm = "0 "+strOpt[nowOpt]+" ";
fm.setText(strFm);
}
else if(tf.getText().equals(result) && countP)
{// 이전 값과 같을 때 연산자 변경
try{
strFm = fm.getText().substring(0, fm.getText().length()-2) + strOpt[nowOpt]+ " ";
} catch (StringIndexOutOfBoundsException e)
{// =을 한 후 연산 결과에서 다시 연산할 때
strFm = tf.getText() + " " + strOpt[nowOpt] + " ";
strTf = "";
}
fm.setText(strFm);
}
else
{// 연산
tmpO = tf.getText();
if(countO){// 연속 연산
strCal = result + strFm.substring(strFm.length()-3,strFm.length()) + tf.getText();
result = base.Calculation(strCal);
tf.setText(result);
countP = true;
}
else {// 첫 연산
countO = true;// 연속 연산 기능 활성화
result = tf.getText();
}
strFm += tmpO + " " + strOpt[nowOpt] + " ";
fm.setText(strFm);
strTf = "";//처음 버튼 입력을 받기 위한 텍스트 필드 초기화
}
break;
case 4: // C 기능 구현
strFm = "";
strTf = "";
result = "0";
countE = false;// 연속 = 기능 비활성화
countO = false;// 연속 연산 기능 비활성화
countP = false;// 연산자 변경 비활성화
fm.setText(strFm);
tf.setText("0");
break;
case 5:// = 기능 구현
if(countE){// 연속 = 기능
strCal = result + strE + tmpE;
result = base.Calculation(strCal);
} else {// 일반 = 기능
try{
tmpE = Integer.parseInt(tf.getText());//마지막 연산한 숫자
strE = strFm.substring(strFm.length()-3,strFm.length());//마지막 연산자
if(strFm.length() == 4) strCal = strFm + tf.getText();// 단순 수식 인 경우
else strCal = result + strFm.substring(strFm.length()-3,strFm.length()) + tmpE;//복합 수식인경우
result = base.Calculation(strCal);
countE = true;// 연속 = 기능 활성화
countO = false;// 연속 연산  기능 비활성화
countP = false;// 연산자 변경 비활성화
} catch (StringIndexOutOfBoundsException e)
{//아무런 연산하지 않고 숫자 = 했을때 예외처리
result = tf.getText();
strTf = "";
}
}
strFm = "";//수식라벨 리셋
fm.setText(strFm);
tf.setText(result);
}
}
}
public Calculator (String title){
super.setVisible(true);
super.setTitle(title);
super.setSize(218,313);
super.setResizable(false);
//화면 중앙 배치
Dimension d = super.getToolkit().getScreenSize();
super.setLocation(d.width/2 - super.getWidth()/2, d.height/2 - super.getHeight()/2);
//종료
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.compose();
this.setevent();
}
}
=== 김정민 ===
//다들 열심히 하는 모습이 보기 좋네요 굳굳
//네?
== 후기 ==
== 후기 ==
* 이상한 과제에 고통 받는 동기들의 원한이 들리지 않느냐!!!
* 하드 트롤링 - [[유재범]]
* 물론 안하셔도 됩니다. - [[김용준]]
** AWT 컴포넌트 설명 했는데 그것도 정리해서 올려줘 - [[유재범]]
----
----
[[한자공/시즌3]]
[[한자공/시즌3]]

Latest revision as of 01:40, 27 March 2026

일시

8월 7일 폭파 인터넷 정리

참가자

유재범 참석(?)
이지수 참석(?)
김용준 참석(?)
김정민 참석(?)

진행 상황

  • I/O

발표(할) 내용

  • 핵심 : 파일 입출력과 스트림
  • 바이트 스트림 & 문자 스트림

I/O

input과 Output의 약자 -> 입출력

스트림(Stream)

 1. 데이터를 운반하는데 사용되는 연결통로
 2. 스트림은 FIFO(First In First Out)구조
 3. 단방향통신만 가능 -> 입력스트림(input stream)과 출력스트림(output stream) 2개의 스트림이 존재
 4. 바이트 스트림, 문자 스트림 두개로 나뉨

※ 다음에 나오는 그림들은 모든 스트림을 정리한 것이 아니므로 다른 스트림이 필요하면 API와 구글님께...

바이트스트림

                     ┌ FileInputStream
      ┌- InputStream ┼ FilterInputStream ┬ BufferedInputStream
      │              │                   └ DataInputStream  
      │              └ ObjectInputStream
Object┤
      │               ┌ FileOutputStream
      │               │                   ┌ BufferedOutputStream
      └- OutputStream ┼ FilterOutputSteam ┼ DataOutputStream
                      │                   └ PrintStream
                      └ ObjectOutputStream
  • Buffered~ : 입출력의 효율을 높이기 위해 버퍼(바이트배열)를 사용하여 쓴다.
  • Data~ : byte단위가 아닌, 다른 기본 자료형의 단위로 읽고 쓸수 있게했다.
  • PrintStream : printf. println, print 메서드를 오버로딩해서 기능을 제공한다.(System.out.printf)
    • PrintWriter이 다양한 언어의 문자를 처리하기 때문에 가능하면 PrintWriter를 권장한다.

문자 스트림

                ┌ BufferedReader
      ┌- Reader ┼ InputStreamReader - FileReader
Object┤
      │         ┌ BufferedWriter
      └- Writer ┼ OutputStreamWriter - FileWriter
                └ PrintWriter
 
※ java에서는 C언어와 달리 char형이 2 byte를 기본이기 때문에 문자를 처리하기 힘들다.
   그러므로 문자기반 스트림을 사용하자.
※ InputStream -> Reader
   OutputStream -> Writer
  • YJB가 값을 입력 받을때 쓰고 있는 BufferedReader or BufferedInputStream보다 Scanner가 편리하고 용의하다.(JDK 1.5부터 추가)

표준입출력 - System.in(콘솔 입력), System.out(콘솔 출력), System.err(콘솔 출력)

 1. 표준입출력은 콘솔을 통한 데이터 입력과 콘솔로의 데이터 출력을 의미
 2. 자바에는 표준 입출력을 위해 3가지 입출력 스트림(System.in, System.out, System.err)을 제공
 3. 어플리케이션 실행과 동시에 사용할 수 있게 자동적으로 생성되므로 코드를 작성하지 않고 사용

try 
{// 끝내려면 Enter나 ^Z
  int input = 0;
 
  while(input=System.in.read()) != =1)
    System.out.println("input : "+input+" (char)input : "+(char)input);

} catch(IOException e){}
특징
1. 콘솔입력은 버퍼를 가지고 있기 때문에 Backspace키를 이용해 편집이 가능
2. 크기는 버퍼 크기만큼 입력 가능
3. 입력을 계속 기다리는 상태(블러킹 상태)에 머무름
 

다음 진행

  • 김용준 학우의 File I/O 보충 및 발표(파일 스트림,직렬화)

과제

유재범

이지수

김용준

김정민

후기


한자공/시즌3