'개발개발/자바'에 해당되는 글 15건

  1. 2013.09.10 12일차
  2. 2013.09.10 11일차
  3. 2013.09.10 10일차
  4. 2013.09.10 9일차
  5. 2013.09.10 8일차
  6. 2013.09.10 7일차
  7. 2013.09.03 6일차
  8. 2013.09.03 5일차
  9. 2013.08.29 4일차
  10. 2013.08.28 3일차
  11. 2013.08.28 2일차
  12. 2012.05.16 초보 Java 웹 개발자들을 위한 학습 로드맵 프로그래밍
  13. 2012.04.16 변수
  14. 2012.04.13 생각하고 코딩하기
  15. 2012.04.13 HashMap 정의, 예제 1

12일차

개발개발/자바 2013. 9. 10. 17:24

12일차(super의 개요,생성자호출방법,
                           접근지정자,추상클래스)

과제)OpTest.java로 저장
실행결과)
Scanner클래스

첫번째수 입력? 4 (nextInt)
두번째수 입력?7 (nextInt)
연산자[+,-,*,/]+ //nextLine(),next()
4+7=11

next()의 경우
문자를 입력하세요?
fkffkf gggag
s=fkffkf

nextLine()
문자를 입력하세요?
dada ddagag
s=ㅇ아dada ddagag

next()
첫수를 입력?->nextInt()
12
두번째수를 입력?->nextInt()
45
연산자[+,-,*,/]?->next()
+
12+45=57
===============
두번째방법

 입력받은값을 nextLine()으로 입력
 =>적절하게 숫자,소수점형으로 변환->저장

        System.out.println("첫수를 입력?");
        //a=input.nextInt(); 방법1
        a=Integer.parseInt(input.nextLine());//"34"->34
       
        System.out.println("두번째수를 입력?");
        //b=input.nextInt(); 방법1
        b=Integer.parseInt(input.nextLine());
       
        //"+"->'+'
        System.out.println("연산자[+,-,*,/]?");
        String s=input.nextLine();/

"50.3"->50.3
->Double.parseDouble(input.nextLine());
===========================
  j0910->SuperTest.java
   
상속->오버라이딩->파일덮어쓰기
==================
상속과 생성자와의 관계=>생성자 호출매카니즘
=========================
super=>부모클래스의 객체를 가리키는 예약어
            <->this
super()->부모클래스의 기본생성자를 호출
             <->this()->자식클래스의 기본생성자호출
super(1)
super("홍길동")

  A
   |
   B
    |
   C==>A,B의 기능
 
super();
=>생략이 가능
=>기본생성자를
    없으면 만들어서호출

 super(1)
 super("홍길동")

->인수가 있는 부모클래스
의 생성자를 호출할 경우
=>인수에 맞는 생성자가
반드시 부모클래스에
 존재해야 호출이 가능하다
(생략이 불가능)

=>생성자의 기본기능->데이터에 다양한 방법을 값을
                                 저장
 =>부모,자식간의 클래스->객체를 생성=>데이터를
             
==========   
    j0910                                         저장
 Employee.java
 Company.java

super->부모클래스의 객체를 가리키는
             예약어

super.멤버변수=>부모클래스가 가지고있는
                         멤버변수의 값을 불러올때
super.메서드명()=>부모클래스가 가지고있는
                         메서드를 호출하라.
=========================
=>중복된 코드를 줄이는 기법

상속과 접근지정자
=>접근권한=>도표

==============
추상클래스와 인터페이스=>설계(모델2->spring)
==============
 접근권한자=>영업부,관리부,개발부
                =>서로 각각 다른 폴더에 저장된
                    자바프로그램(클래스)=>어떻게
                    연결-->실행
==========================
1.private접근권한자

 j0910
    |
     -private

j0910.jprivate
   class A,   class B(main)
================
두클래스 사이에서
A<---B
  ----->

A클래스에서 B클래스에 접근을 할수없다
=>객체를 생성할 수가 없어서
     접근하고자하는 멤버변수에 데이터를
     저장할수 없거나,,,메서드를 호출불가

private접근권한자

같은 패키지
다른 패키지,상속을 받든 다 접근불가
같은 클래스내부에서만 멤버변수와 메서드를
호출이 가능하다.
========================

default접근권한

1.같은 클래스내부에서는 접근이 가능
2.같은 패키지내부에서는 접근이 가능
=====================
3.다른 패키지내부에서는 접근불가
4.상속을 받은 자식클래스의 객체를
   통해서도 접근이 불가


 j0910.jdefault.packageA
               |
                -A.java,<--- B.java

 j0910.jdefault.packageB
               |
                -C.java(외부패키지),  Sub_A.java(상속)

1.접근하고자하는 자바클래스가 어디에
   있는지 모를때 발생하는 에러메세지
  ->import구문을 줘서 위치

A cannot be to resolved to a type

2.위치는 알고 있지만 접근권한때문에
   접근하지못하는 경우

The Type A is not Visible
======================

protected접근권한

1.같은 클래스내부에서는 접근이 가능
2.같은 패키지내부에서는 접근이 가능
=====================
3.다른 패키지내부에서는 접근불가
4.예외조항)
   상속을 받은 자식클래스의 객체를
   통해서도 접근이 가능하다.(default차이점)
  =>public 권한과 연관이 있기때문

public class A { //일단 외부에서 접근을 하기위해서
                        public class로 작성해야 된다.
 
 protected int i;//멤버변수=>외부에서 접근차단
 protected void protected_method(){
   System.out.println(" protected i="+i);
  }
==========================
  
    j0910.jprotected.packageA
               |
                -A.java,<--- B.java==>default패키지복사
            (protected)

    j0910.jprotected.packageB
               |
                -C.java(외부패키지),  Sub_A.java(상속)
==============================
public 접근권한

전제조건)반드시 public class로 작성을 해야 된다.
 개발시에 작성한 클래스들을 다른 부서에서
 자유롭게 사용하기위해서는 반드시
 public class로 작성하고, 멤버변수,와메서드는
 public권한을 줘야 된다.

public class A {//외부패키지에서 접근이 가능하다
 
 public int i;
 public void public_method(){
   System.out.println(" public i="+i);
  }

같은 클래스내부에서 접근이 가능
같은 패키지내부에서 접근이 가능
상속을 받은 자식클래스내부에서도 접근이 가능
다른 패키지내부에서도 접근이 가능
=========================

  j0910.jpublic.packageA->A.java<--B.java

  j0910.jpublic.packageB->B.java
===========================

  추상클래스와 인터페이스=>예습

 

'개발개발 > 자바' 카테고리의 다른 글

11일차  (0) 2013.09.10
10일차  (0) 2013.09.10
9일차  (0) 2013.09.10
8일차  (0) 2013.09.10
7일차  (0) 2013.09.10
Posted by 공돌공돌
,

11일차

개발개발/자바 2013. 9. 10. 17:23

11일차(문제풀이,상속의 개요및
                        오버라이딩개요,생성자호출방법)
============================
 
  j0909

=>1)추상화->2)캡슐화->3)다형성->배열

과제>문자열을 입력받아서->대->소,소->대
 ConvertTest2.java
1.문자열을 입력? aabG===>for(;;),while(true)
                        AABg
   문자열을 입력?=>문자열의 내용을  비교해주는 메서드?
   ...
  E or e을 입력->System.exit(0);//프로그램 종료
                       adab123Ggg
     =>숫자는 입력하면 안됩니다.->강제종료(return)
          =>isXXXX =>문자인지,숫자인지를 체크해주는
                               메서드를 찾기
 
  ->Character클래스->isDigit('2')->true
                                 isDigit('a')->false
  ->
isSpace(char ch) ==>공백이 있는지를 체크?

 "aba dga"   ->'a  '
Deprecated.  --->앞으로 이메서드 사용하지
                          마세요
Replaced by isWhitespace(char).

 

2.Repeat.java로 저장
===============
<실행 결과>
1.반복할 문자를 입력? a=>nextLine()->String
 "a"->charAt(0)='a'
===========================

2.반복할 횟수를 입력? 3
       ->nextInt().
   aaa
 =>caller,worker=>문자,횟수->매개변수
     ->메서드작성
========================
  StringTest.java=>중요메서드를 정리
========================
문자열을 입력?
agGAdgag
s.concat('test')=agGAdgagtest
s.replace('a','c')=cgGAdgcg
s.endsWith('gag')true
s.length()=8
s.indexOf('G')=2
s.trim()=agGAdgag
===>substring(첫번째인덱스번호)
         =>첫번째인덱스번호부터 끝까지 문자열을
         =>뽑아낼때 사용
    0123
  "abcd" ->substring(2)="cd"
-->substring(첫번째인덱스번호,두번째인덱스번호)
     =>첫번째인덱스번호는 포함하고
          두번째인덱스번호 앞번호까지 포함
   "abcd"->substring(2,3)="c"

s.substring(2)=GAdgag
s.substring(2,5)=GAd

=>상속의 개요->상속의 오버라이딩의 개요
========================
=>상속=>재산(돈,부동산)=>소유권이전
=>자바의 상속=>멤버변수,메서드

추상화,캡슐화,다형성,상속성

상속=>개발시간이 단축
===>전에 개발한 내용을 다시 한번 반복해서
                                     사용
 =>회원로그인(회원가입),방명록,게시판,
      파일업로드,다운로드,
========================
 =>다음번 사이트개발->재활용
========================
=>회사에 입사->전산->부서에 배치=>급여

  사원에 대한정보->class Employee
=======================
  팀장에 대한 정보=>class Manager
                             public class Company (main())
  =================
 
class A=>1000 라인 ,
    class B=>중복되는 700라인 (복사)
                           +
                   새로운 코딩 300라인
======================1000라인
                   상속기법
                         +300라인

중복된 데이터를 코딩=>재활용->코딩양이줄어듬
                                         ->개발시간이 단축

class 자식클래스 extends 부모클래스
       (=서브클래스)         (=슈퍼(Super)클래스)
===========================

1.상속배제
   private 멤버변수->멤버변수명앞에 private붙어
                             있어서 상속불가
   private 메서드명->상속불가->자기 클래스내부
                                             에서만 사용
   생성자=>접근권한자와 무관하게 상속이 안된다.
    public Employee(){}

2.상속->단일상속(하나의 부모클래스), 만 지원
           =>인터페이스(다중상속을 흉내)
=======================
            다중상속(동시에 부모클래스 2개로부터,,,)

   class Child extends Father,Mother
                                (sub(),   sub())
   =>프로그램이 복잡->지원불가(C++은 지원가능)

 메서드의 호출유형

1.정적(main())->일반메서드->객체명.일반메서드()
2.정적->정적메서드->클래스명.정적메서드
                           ->정적메서드
3.생성자->생성자->this(),this(1),,,,
=======================
4.일반메서드->일반메서드=>객체명.일반메서드명()
                                        객체명을 생략
                                        this.일반메서드명();
                                      
 =>상속기법을 사용할려면
  class 자식클래스명 extends 부모클래스명

==========================
   부모,자식사이에 is a관계가 성립이 되는것만
   extends예약어를 사용=>상속

ex) p->q=>p이면 q이다(참)
                  q이면 p이다(참 또는 거짓이 나오면)
                                    거짓
             p                         q
class Manager extends Employee
=>팀장은 그회사의 직원이다.(참)
     직원은 그회사의 팀장이다.(거짓)

    class 무선전화기 extends 전화기(일반,보편)
             (특별)
    class 노트북 extends 컴퓨터

관리자의 정보
이름=박길수
부서명=영업부
보너스=4500.0
부하직원수=3
=========
이름=홍길동
나이=25
=========
직원의 이름=홍길동
나이=25
성별=남
주소=서울시 강남구
급여=1500
=========
이름=이길수
나이=32
=========
직원의 이름=이길수
나이=32
성별=남
주소=서울시 강북구
급여=1700
=========
이름=이기자
나이=28
=========
직원의 이름=이기자
나이=28
성별=여
주소=대전시 중구
급여=2000

class NotebookComp extends Computer
   //Owner,
  //calculate(){~}

   this.calculate();

=>상속은 누적제==>기능이 많아진다.(메서드)
06)oop4대-상속-super.ppt->1일차(javapp)
  =>owner(Computer),battery(NotebookComp)

상속의 개요,
오버라이딩=>부모로부터 물려받은 메서드가
                   자식클래스에 맞지않을때 자식클래스에
                   맞게 내용을 수정하는 기능
(Overridding)==>ex) 파일 덮어쓰기
============================
상속과 생성자와의 관계=>캡슐화(private,public)
                                           protected,default
                                    추상클래스,인터페이스

1.자바에서는 클래스를 새로 작성하면
   무조건 java.lang.Object클래스를 상속을 받게
   되어있다.

2.상속을 받은 상태(부모,자식관계)에서
   자식클래스의 객체를 생성->부모클래스의 생성자를
    호출==>나중에 자식클래스의 생성자가 호출
    (=>상속과 생성자와의 관계)
   =>생성자 호출 매카니즘


   ==>InheriTest.java
Father객체생성
난 Father기본생성자호출
f=j0909.Father@2a163765

child객체생성

난 Father기본생성자호출
난 Child기본생성자호출
c=j0909.Child@4b6e3f87

this->현재 생성된 객체를
         가리키는 예약어
      (자식클래스의 객체)

<->super->부모클래스
              객체를 가리키는
              예약어

this()->기본생성자호출
<->super()
  부모클래스의 기본생성자
  호출
============
=>super와super() 예습
=>접근권한자(p387)
 p379,상속과 생성자
 p381 super
=>매개변수가 있는경우
==============
=>추상클래스
==============
과제)OpTest.java로 저장
실행결과)
Scanner

첫번째수 입력? 4 (nextInt)
두번째수 입력?7 (nextInt)
연산자[+,-,*,/]+ //nextLine()
4+7=11
==================

 

 

'개발개발 > 자바' 카테고리의 다른 글

12일차  (0) 2013.09.10
10일차  (0) 2013.09.10
9일차  (0) 2013.09.10
8일차  (0) 2013.09.10
7일차  (0) 2013.09.10
Posted by 공돌공돌
,

10일차

개발개발/자바 2013. 9. 10. 17:23

10일차(중간점검(문제풀이)=>12장 콘솔로 입력->처리,
                2차원배열,상속의 개요 및 작성법)
==>j0906
           |
            -SaveAs ArgTest->ArgTest2

1.int tot=(int)str+(int)str2+(int)str3;
 ->String(참조형)->int(기본형)==>형변환이 안됨.

2.public static void main(int [] args)

=>main()의 매개변수는 수정할 수가 없기때문에
오류: j0906.ArgTest2 클래스에서 기본 메소드를 찾을 수 없습니다. 다음 형식으로 기본 메소드를 정의하십시오.
   public static void main(String[] args)

=============================
 자바 API문서를 이용해서 문자열->숫자로 변환
  하는메서드를 찾아서 코딩?

 http://java.sun.com
Java SE 7 Documentation
=>로컬로 압축풀어서 볼 경우

Download

 Documentation

61.2 MB 

 jdk-7u25-apidocs.zip=>index.html을 실행

자바프로그래밍 기본
=>java.lang패키지(폴더)

 =>문자열->String
 =>숫자->Integer=>문자->숫자
 ->소수점->Double
  ...

  Field Summary=>멤버변수
  Constructor Summary=>생성자
  Method Summary=>메서드

public static int parseInt(String s)
                    throws NumberFormatException

Parses the string argument as a signed decimal integer
문자열->10진수
                         10=Integer.parseInt("10")
                         "10"=?(10)

1.java.lang패키지를 찾음
2.관련된 클래스중에서 메서드를 찾을때
    매개변수의 갯수,반환형을 고려해서 찾을것.
3.메서드의 용도->예제를 볼것.
4.정적메서드->클래스명.정적메서드명
   일반메서드->객체명.일반메서드
========================
     10=Integer.parseInt("10")
     10.3=String.valueOf("10.3")->Double.parseDouble("10.3")

5.이클립스에서 자바의 API문서를 찾는방법
  찾는 클래스를 입력->shift+f2(단축키)->탭제공

6.찾고자하는 메서드-->데이터를 수정?
                 setXXX으로 시작하는 메서드를 찾을것
   저장된 데이터를 조회?--->getXXX으로 찾을것.
   반환형이 boolean인 경우->isXXX로 시작하는경우

=>ex)창의 확대를 금지시켜주는 메서드?
    java.awt패키지
                 Frame

7.새로운 클래스를 찾을때 ->생성자를 먼저 봐서
         객체를 생성

  ->메서드 찾기
Scanner(InputStream source) //키보드(System.in)
String,Integer=>기본 패키지(java.lang->자동인식)

java.lang패키지를 제외한 나머지 무조건
불러올때 import 최상위패키지명.하위패키지명...참조할 클래스명

=>#include <stdio.h>
import java.lang.String;

  자동정렬->ctrl+shift+f
  자동import->ctrl+shift+o

public int nextInt()

 숫자를 입력->nextInt()
 문자열을 입력->nextLine()
===========================
<문제1>키보드로 숫자를 입력을 받아서 구구단을
             출력하시오.(GuTest.java)

<실행결과>
   몇단을 입력할까요?7
   7*1=7
    ...
   7*9=63

<문제2>키보드로 입력을 받아서 별을 출력하시오.
<실행결과> =>StarPrint.java

   별을 출력할 수를 선택?[1-3] 3
   ***
    **
   *
   다른 수입력->숫자입력에서 오류발생!
출력할 별의수?[1-3]
7
숫자입력오류

<문제3>InputTest.java(Scanner)
<실행결과>
     1.이름을 입력?
        홍길동
     2.국어점수?
         90

   홍길동:수
===================
<문제4>배열과 키보드입력문제->ArrayCalc.java
 연속해서 5과목을 입력을 받아 총합,평균을 구하시오.
5과목 점수를 입력?
45
78
90
34
56
총합=303
평균=60.6

====================
제어문,메서드문제,배열,키보드입력,
String클래스에 대한 메서드
StringBuffer,,,
Eclipse사용법
====================
....2문제(인터넷검색)+2문제
============================
<문제5>키보드로 문자열을 입력을 받아서
소문자->대문자로,대문자->소문자로 출력하시오.

 ConvertTest.java->ConvertTest2.java(과제)

실행결과

문자를 입력?
                   0123456789
                  "abDadkadAg"-->문자열 길이
                      |
                     'a'=>대,소문자인지 판별?
                             'a'->'A'
                             'A'->'a'

                문자열의 길이=>length()->10
                문자열에서 문자->charAt(인덱스번호)
                  ABdADKADaG

   Character클래스

 1.문자->대문자인지 소문자인지를 체크해주는 메서드
                     isUpperCase(char ch)=>대문자인지
static boolean isLowerCase(char ch)=>소문자인지

             true=Character.isLowerCase('a')

   소문자->대문자로 변환=>toUpperCase(char)
                소문자로 변환=>tuLowerCase(char)

     type mismatch  convert String to int
              소->대문자,대->소문자
=======================
   Adb
   aDB

  B
  b
문자열을 입력?
dadkGadgAgaGa
DADKgADGaGAgA
==================================
2차원배열->DoubleArrayTest
자바의 2차원배열.ppt

과제>문자열을 입력받아서->대->소,소->대
 ConvertTest2.java
1.문자열을 입력? aabG===>for(;;),while(true)
                        AABg
   문자열을 입력?=>문자열의 내용을  비교해주는 메서드?
   ...
  E or e을 입력->System.exit(0);//프로그램 종료
                       adab123Ggg
     =>숫자는 입력하면 안됩니다.->강제종료(return)
          =>isXXXX =>문자인지,숫자인지를 체크해주는
                               메서드를 찾기

2.Repeat.java로 저장
===============
<실행 결과>
1.반복할 문자를 입력? a

2.반복할 횟수를 입력? 3
       ->nextInt().
   aaa
 =>caller,worker=>문자,횟수->매개변수
     ->메서드작성
==========================
===>문제
주말동안 ->2문제->제어문,배열,String클래스
 ->String클래스(subString(),trim(),concat()...예제)
   메서드문제...=>2문제
=============================

 

'개발개발 > 자바' 카테고리의 다른 글

12일차  (0) 2013.09.10
11일차  (0) 2013.09.10
9일차  (0) 2013.09.10
8일차  (0) 2013.09.10
7일차  (0) 2013.09.10
Posted by 공돌공돌
,

9일차

개발개발/자바 2013. 9. 10. 17:23

9일차(생성자 오버로딩과 메서드호출방법,this,배열)
    ==>오버로딩 문법(추가->배열,확장 for문)
=>자바 API문서를 참조->Math,String클래스,,,
=============================
 j0905
    |
     -PersonTest.java
      PrintTest.java 복사

  (),(name),(age),(sex),
    (name,age),(age,sex),(name,sex),
    (name,age,sex)==>이상적
===========================
p289 =>추상화(설계도)->캡슐화(올바른값 저장?)
        =>다형성(메서드의 오버로딩)
        ====================
         this->메서드의 호출방식

        업무=>팀장(과장)--->보고서작성->동료
                  caller              worker---->worker
                                         (caller)

1.main()(caller)--->일반메서드 호출
   (정적)==>객체를 생성->객체명.일반메서드명()

2.main()---------->정적메서드 호출
   (정적)====>클래스명.정적메서드명()
                        정적메서드명()
===========================
3. this를 이용하는 경우
=================
   Student.java(학생)

자동으로 정렬=>ctrl+a(전체복사)
                   =>ctrl+shift+f

 this의 용도
 
  (1)
  메서드를 호출해서 멤버변수에 값을 저장할때
   멤버변수와 매개변수가 같으면 멤버변수를 구분
  하기위해서 멤버변수앞에 this를 써서 구분해준다.

  public void setName(String name){
          name=name;
  }

  (2)현재 생성된 객체를 가리키는 예약어
       =>p2,p4==>this로 대신사용이 가능하다.
===========================
  this=>멤버변수와 매개변수를 구분하기위해 사용
            현재 생성된 객체 대신용도

  this()=>매개변수가 없는 기본생성자를 호출하라
 생성자->일반메서드

 메서드 호출 방식의 3 번째
 3. 일반메서드->일반메서드 호출
      생성자---->일반메서드 호출

 4.생성자-->자기 클래스 내부에 존재하는
                   다른 생성자를 호출
    this()=>매개변수가 없는 기본생성자를 호출
    this(1);==>매개변수가 1개면서 정수형
    this("홍길동")=>매개변수 1개,문자열
    this(2,"이길수")-->매개변수 2개
    .....==>다양한 방법으로 데이터를 저장하기위해서
 
    Person p5=new Person()
                  -->new Person("임시2",27,"여자")
  
              public  Person(){
  this("임시2",27,"여자");//맨앞에 코딩
  System.out.println("난 기본생성자호출됨!");
 }

             public Person(String name,int age,String sex){
  //p4.name="테스트임시";
  this.name=name;
  this.age=age;
  this.sex=sex;
  System.out.println("인수 3개짜리");
 }


    main()--->new Person()---->Person("~",27,"여")
              <---                   <----

인수 3개짜리
난 기본생성자호출됨!
이름=임시2
나이=27
성별=여자 
 
  추상화->캡슐화->다형성==>중간점검
 =>p291->p292=>String클래스
 =>배열까지->API문서
=========================
->ArrayTest

성적처리 프로그램

과목수->3,5,
점수,==총점,평균,석차==>1.변수
                                       2.자료형
  int score=0,tot=0,avg=0,,,
==========================
메서드 오버로딩+배열의 의미+확장 for문
 =>새로운 JDK문법
==========================
 다음중 성격이 다른 것은?

1. char c='A';
2. int a=23;
3. int su[]; //참조형
4. boolean b=false;

객체=레퍼런스변수=인스턴스=참조변수
                   배열명.length
for(int i=0;i<strArr.length

 ArrayTest2.java=>JDK6.0이상부터 지원

//매개변수의 자료형 ... 배열명
 public void print(String ... names){
                    //동적으로 배열의 크기가 자동설정
                    //String names[]={"자바"}
                    //String names[]={"자바","다형성"}
   for(String su:names){
  System.out.print(su);
    }
  System.out.println();
 }
========================
  at.print("자바");
           at.print("자바","다형성");

==>ArgTest.java

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
 at j0905.ArgTest.main(ArgTest.java:8)

자바 배열 연습
============
 10  20  30 =>apply->run

'개발개발 > 자바' 카테고리의 다른 글

11일차  (0) 2013.09.10
10일차  (0) 2013.09.10
8일차  (0) 2013.09.10
7일차  (0) 2013.09.10
6일차  (0) 2013.09.03
Posted by 공돌공돌
,

8일차

개발개발/자바 2013. 9. 10. 17:22

8일차(메서드작성연습=>다형성(생성자,오버로딩)
추상화->캡슐화->다형성->배열->상속성
=>p187->
        ->
        public void buyApple(int money){

         FruitSeller seller=new FruitSeller();
          numofApple+=seller.saleApple(money);
           myMoney-=money;
        }

====================================
44->buyer.buyApple(2000);//buyer.buyApple(seller,2000)
====================================
==>멤버변수가 존재하는 경우
 1.매개변수 X , 반환형 X->단순,반복
 2.매개변수 O,  반환형 X->Setter Method=>데이터저장목적,출력(계산)
 3.매개변수 O,  반환형 O->계산목적->합계를 구하기...

=>j0904
       =>CalcTest.java
       =>SaveAs AbsTest.java

 5,10=>-5=5
 10,5->5

   j0903->NemoHandling.java
   j0904->NemoHandling복사
===================
=>다형성->다양하게 메서드를 호출할 수가 있다
=>오버로딩 기법
=========================
1.메서드의 종류->정적메서드
                        StaticTest.java

 커피자판기(클래스)
 컵,밀크,프림,물,,,->private
 =>돈을 입력(객체를 생성)->4byte
 밀크커피버튼 클릭->메서드 호출
=======================
 무료자판기->정적메서드(무료게임)
 ->객체를 생성하지 않고도 호출이 가능한
    메서드
 ->자주 사용이되고(계산) 반복적인 기능을 가진
     메서드
 =>Math->최대값,최소값,평균값,지수,,,,
 ->정적메서드를 이용해서 사용
========================
    hiEveryone(12);
   MethodDefAdd.hiEveryone(12);

=>생성자,메서드 오버로딩==>배열=>중간점검
                                                  (문제풀이)->상속
2.생성자개요
3.메서드의 오버로딩 기법
=================>
Overloadding(오버로딩)
클래스내부에 정적,일반메서드
            ====>서로 비슷한 기능을 가진 메서드를 여러개
                        작성?==>각각의 메서드이름을 다 다르게
                                       작성->구분어렵다.(불편)
                      =>이름을 통일=>매개변수의 갯수,자료형
                                               을 서로 다르게줌으로써
                  구분

   StaticTest.java=>추가
   PrintTest.java=>생성자,메서드오버로딩


System.out.println("ddd");
System.out.println(234);
System.out.println(true);
====================
 PersonTest=>main()

생성자(=Constructor)

1.객체생성시 딱 한번 자동으로
   호출이 되는 메서드=>default Contstructor
                                 (기본생성자)
  =>ex)신용카드 결재-->폰(거래내역)

 2. 형식) public 클래스명과 동일(){

             }
   =>반환형을 사용하지 않는다

=>C++(생성자함수)
 3.생성자의 용도=====>데이터 저장목적
========================
  =>Setter Method와 기능이 같다
 
=>맨처음 데이터를 저장할 공간생성=>
     처음으로 값을 저장--->한꺼번에 여러개의데이터
                                     를 저장(생성자)
                                       |
                                      수정하는 데이터만
                                      Setter Method사용

<과제>NemoHandling.java->x,y
  생성자를 이용->public Nemo(){
                       
                        }
 생성자 오버로딩 기법->배열==>자바 API문서
                                               보는 방법
===========================
 

 

 

 

 


 

'개발개발 > 자바' 카테고리의 다른 글

10일차  (0) 2013.09.10
9일차  (0) 2013.09.10
7일차  (0) 2013.09.10
6일차  (0) 2013.09.03
5일차  (0) 2013.09.03
Posted by 공돌공돌
,

7일차

개발개발/자바 2013. 9. 10. 17:21

7일차(추상화 정리,메서드 작성방법2,캡슐화)
==========================
하나의 파일->클래스작성은 하나
                  여러개 작성가능

=>매개변수가 있고,반환값(리턴값)=계산값
=>계산목적

 ==>직사각형의 면적을 구하는 프로그램 작성
                           j0903
 =>Nemo.java, NemoHandling.java
                            (main())
  /*
   int addResult=num1+num2;
   return addResult; */

  return (num1+num2);
======================
메서드를 이용해서 전의 만들예제를 내용수정
========================
1.j0830->WhileTest2.java
   j0829->IFTest2.java

    =>j0903에 복사할것.

     j0903
          WhileTest2.java
          IFTest2.java
========================
추상화->클래스 작성,,,
캡슐화->추상화의 단점을 보완
         ->올바른 데이터값만 입력을 받아서 저장할 수있도록
             설계하는 기법

  j0902->Car.java,CarHandling.java
                 |
             j0903
=========================
=>Car.java,CarHandling->캡슐화 기법
========================
=>Nemo.java,NemoHandling.java
=======================
=>1.객체명.멤버변수=저장할값;=>금지
접근지정자=>1.private멤버변수==>외부에서 접근차단
                   2.각각의 멤버변수에 값을 따로 저장할 수있는
                      메서드를 하나씩 작성
                      
                    =>데이터저장=>매개변수 존재한개
                                           반환형은 없다.
                    =>public void setXXX(자료형 매개변수명){
                                 멤버변수=매개변수명;
                        }
                    =>저장된 데이터를 꺼내오는 방법->getXXX
                    형식)public 반환형 getXXX(){
                                return 멤버변수명;
                        }                   
===================================
다형성->생성자의 개요,기능,메서드 오버로딩?
상속성
==========================
  public void accessAAA(){
      AA inst=new AA();
     //inst.num=20;
     inst.setNum(20);
  }

<과제>NemoHandling.java
->캡슐화기법을 적용시키시오.=>x,y->private
                                            setX(int a),setY(int b)
                                    =>음수는 입력불가입니다.
                                            getX(),getY()
=================================
p156->문제6-1
문제1)
문제2)
=================================
예습) 정적메서드->p152~
  ==>07장 p190->생성자의 개요,기능읽어오기
  ==>->p286~291=>메서드 오버로딩
=================================

 

 

 

 

 

 

 

'개발개발 > 자바' 카테고리의 다른 글

9일차  (0) 2013.09.10
8일차  (0) 2013.09.10
6일차  (0) 2013.09.03
5일차  (0) 2013.09.03
4일차  (0) 2013.08.29
Posted by 공돌공돌
,

6일차

개발개발/자바 2013. 9. 3. 09:10

6일차(중첩제어문,탈출문,객체지향프로그래밍(6,7장)

   c:\webtest
          java
              6일차(중첩제어문,탈출문,객체지향프로그래밍)
p131->p137->중첩제어문
 j0902
    |
     -ForTest2

=>탈출문(continue,break,return)
    (=분기문)

break->주로 반복문(while,do~while,for)에서
            특정한 조건이 만족->이 break문과 가장
            가까운 제어문을 탈출

 이클립스가 익숙하지않으면
 원래상태로 전환=>window->reset perspective

 break->1.레이블이 없는 break문(ForTest2.java)
             2.레이블이 있는 break문->p142
             =>특정 레이블(책갈피)가 있는 부위의 제어문을
                 탈출하고 싶을때 사용하는 방법(BreakTest.java)

 continue문=>skip문
                 =>특정조건에 만족하는 continue문을
                     만나게 되면 continue구문이하의 문장을
                     수행하지 않고(skip)
                 =>continue문과 가장 가까운 루프로 이동
                 =>for문의 경우->증감식으로 이동
                     while문의 경우->조건식으로 이동
================================
  =>BreakTest.java->Save As->ConTest.java
continue문
a=1,b=1
a=1,b=3
a=1,b=4
a=1,b=5
=======
a=2,b=1
a=2,b=3
a=2,b=4
a=2,b=5
=======
a=3,b=1
a=3,b=3
a=3,b=4
a=3,b=5
=======
a=4,b=1
a=4,b=3
a=4,b=4
a=4,b=5
=======
a=5,b=1
a=5,b=3
a=5,b=4
a=5,b=5
=======
for반복문 종료!

<문제>=>SumBreak.java저장

조건1:1~100까지의 합계를 구하시오.(int sum,int i)
조건2:3의 배수 또는 5의 배수의 경우에만 합계를 구하시오
                       ||  (for문 if문 사용)
조건3:->3의배수 또는 5의 배수값을 출력(i값을 출력)
             합계가 200이 넘어가는 i값의 최소값을 구하시오
            =>if(sum > 200) break;

   while(true){
        ...
   }

<문제>->Star1.java
--->별을 체크->j
--->행증가--->i

package j0902;

public class Star1 {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
       System.out.println("1.별을 출력");
      for(int i=1;i<=5;i++){ //행
         for(int j=1;j<=i ;j++){
     //  for(int j=5;j>=i;j--){
           System.out.print("*");//*****
         }
         System.out.println();//줄바꿈
      }//outer for
 }//main
}
==================
  *
  **
  ***
  ****
  *****

  *****
  ****
  ***
  **
  *
================
A
AA
AAA
AAAA
AAAAA

package j0902;

public class Alpha {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
       System.out.println("1.별을 출력");
       char mun='A';
      
      for(int i=1;i<=5;i++){ //행
         for(int j=1;j<=i ;j++){
           System.out.print(mun);//*****
         }
         System.out.println();//줄바꿈
      }//outer for
 }//main
}

======
A
BC
DEF
GHIJ
KLMNO

package j0902;

public class Alpha {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
       System.out.println("1.별을 출력");
       char mun='A';
      
      for(int i=1;i<=5;i++){ //행
         for(int j=1;j<=i ;j++){
           System.out.print(mun);//*****
           mun++;//65->66->67...
         }
         System.out.println();//줄바꿈
      }//outer for
 }//main
}

=============================
객체지향 프로그래밍->Java,C#,Delphi,PowerBuilder,,,
=>윈도우에서 프로그램작성법

1.추상화->p176~190 클래스의 개요,작성,구성요소
                               메서드작성방법(6장~7장)
2.캡슐화->메서드작성방법(09장)
               접근제어 지시자,정보은닉
3.다형성=>p190 생성자,오버로딩(11장),메서드작성방법(6장)
4.상속성=>14~16장(클래스의 상속)

도스->C
======================================
p184
하나의 파일에 클래스가 한개만 작성된 예제->ConTest.java
==========================
하나의 파일에 클래스가 한개이상인 경우의 예제

class A(main())------->A.java
class B            B.java
class C            C.java
....=>갯수는 제한이 없다.

=============
1.하나의 파일에 클래스 여러개가 있어도->main()메서드를 가진 클래스를
                                                         파일명으로 부여

2.public class로 시작하는 클래스를 파일명으로 부여한다.
                                ->main()를 가진다
  하나의 파일에 public class로  시작하는 것은 하나만 가능
=================================
public class A(main())------->A.java
public class B            B.java
class C

3.class A
   class B
   class C
======================
  ->main()메서드도 없고,public class로 시작하는 클래스는 없는경우
=>1)A.java 2)B.java 3)C.java 4)그날의 컨디션 A,B,C.java부여
-----------------------------------------------------------------
 추상화->ppt자료
            현실세계에 존재하는 모든 사물(객체)의 공통적인 상태,특징과

            행동양식을 유추(->잘 생각해서) 클래스를 만들어내는
            일련의 과정들

   ex)  자동차(종류,회사별,이름,,키보드,연필,,,
   ===>8가지 자료형으로도 도저히 저장할 수 없는 대상->공통의특징,
                                                                               행동양식

  =>자동차,사람,컴퓨터,자판기,....
========================================
   자동차->Car.java,==>운전->CarHandling.java

//1.main()메서드 있는 클래스->실행목적
//2.main()메서드가 없는 클래스->데이터저장 목적

1.단순하고,반복적인 기능을 가진경우->메서드작성

  형식) 접근지정자 반환형(void) 메서드명(){

       }
=>클래스의 구성요소 메서드작성.ppt

 2.매개변수가 존재하고 반환형이 없는 메서드
=>데이터를 저장하거나 출력
    =============================

클래스-->새로운 자료형을 만들기위한 설계도(빵틀)
           ->자동차===================>공장
                                                                   대량생산
                                                                   사물(객체)

객체를 생성====>자동차를 저장하기위한 공간을 메모리상에
                           만들어라
===================================
Car.java->CarHandling.java->

 

'개발개발 > 자바' 카테고리의 다른 글

8일차  (0) 2013.09.10
7일차  (0) 2013.09.10
5일차  (0) 2013.09.03
4일차  (0) 2013.08.29
3일차  (0) 2013.08.28
Posted by 공돌공돌
,

5일차

개발개발/자바 2013. 9. 3. 09:09

5일차(제어문2(switch,while,do~while,for~))

=>p118
              ->다중if문 대용
              switch~case=>다중 if문==>속도가 느림
                                if(조건식)
                                   문장1
                                else if(조건식2)
                                    문장2
                                ...
           형식)                                 조건의 결과->숫자
                              su%2==0
                    switch(조건식){ //수식,변수==>상수

                    case 값1: 실행문장;
                                    break;
                    case 값2: 실행문장2;
                                    break;
                            ..
                     default:->조건에 만족하는것이 없을때
                     }
         j0830
     =>SwitchTest
================
          SwitchTest3

=>반복문=>특정조건이 거짓이 될때까지
                  계속해서 실행이 되는 구문

 for,while,do~while
==================
 while->do~while->for문

변수가 필요로하는 경우

1.계산하는 문제->ex)1~100합계

             1+2+3+....100=? int sum
               반복할 횟수->int repeat

// ======================
2.입력을 받아서 처리해주는 프로그램
3.현재 프로그램의 상태를 기억할 필요가 있을때->변수
=>ex)=>그림판
    boolean mouseclicked=false;
    if(mouseclicked==true){ // if(mouseclicked){
      그림그리는 코딩...
    }                                         }
=============================
      while(조건식) //조건식이 참인동안
        실행할 문장;=>하나이상 실행시 블럭처리

       do{
           반복해서 실행할 구문;//(1)먼저 무조건 실행
          }while(조건식)//(2)조건체크
 =>먼저 실행할 문장부터 구현하고 나서 나중에 조건식체크
 =>누적의 개념->게시판의 글목록보기에서 실행
 
 =>WhileTest2.java

1.반복할 횟수가 정해져있는 경우=>for,while
 =>WhileTest.java

2.반복할 횟수가 정해져있지 않은 경우
   =>while,do~while
   =>ex)파일메뉴->외부에서 파일불러오기
   =>파일입출력
============================
<문제>WhileTest2.java

1)변수 2개를 이용해서
   int start=20,end=40
        //시작      종료값
2)결과)
           start=20
           start=21
           start=22
           ...
           start=40

   int start=40, end=20
   ->첫번째수는 두번째수보다
       클수가 없습니다.
=============================
형식)=>ForTest

  ex)for(초기값 설정;조건식;증감식)
                반복해서 실행할 구문;
            (1)      (2)(5)
     for(int i=0;i<3;i++)(4)
                (3)->실행문장(6)

for문->초기값은 생략가능
      ->for문 밖에 선언가능
      ->증감식은 생략이 가능
      =>for문 안쪽에 코딩
 
i=1=>sum=sum+i;
                     0+1=1
          gop=gop*i;
                    1*1=1
===============
i=2일때 sum=sum+i
                       1+2=3
            gop=gop*i;
                      1*2=2
================
i=3일때  sum=sum+i(3+3)
             gop=gop*i(2*3)
================
i=4일때  sum=sum+i(6+4)
             gop=gop*i(6*4)
=================
<문제>=>짝수들의 합을 구하기
1~100까지 합계->5050

2의 배수이면서 7의 배수들의
합계를 구하기

for(int i=0;i<=100;i+=2){ //0,2,4,6,,,
   //짝수인 경우에만 합계를 구하기
     //if(i%2==0)//2,4,6,8,10
 sum+=i;//sum=sum+i;
 gop*=i;//gop=gop*i;
  }
   
1.참조형 변수와 같은 자료형의 크기
->int,float
=====================
2. byte b=10;
    char ch='A';
     int i=100;
    long l=1000L

==>자동형변환
a) b=(byte)i;//4->1byte->생략
                                        불가
b)ch=(char)b;//1byte->2byte
 -128~127==>0~65535
   =>양수때문에 생략불가
c)short s=(short)ch;
 -32768~32767<--0~65535
==================
d,e

d)float f=(float)l; //long->float
=>float f=l;
e)i=(int)ch;//2byte->4byte
=>생략가능
==================
4번.
a,b,c,d
================
byte b=256;//-128~127
char c='';//에러유발
char c=' '//빈문자->가능
char answer="no";
float f=3.14F; //(float)3.14;
double d=1.4e3f;//->float->double

 

'개발개발 > 자바' 카테고리의 다른 글

7일차  (0) 2013.09.10
6일차  (0) 2013.09.03
4일차  (0) 2013.08.29
3일차  (0) 2013.08.28
2일차  (0) 2013.08.28
Posted by 공돌공돌
,

4일차

개발개발/자바 2013. 8. 29. 16:29

4일차(배정연산자,캐스트연산자,제어문개요)
캐스트연산자=> (  )

자동형변환
 1.데이터를 저장->자동으로 형이 변환->저장
   ex) byte b=23;
 2.계산하면 작은데이터->큰쪽 데이터
   ex) 2(int)+3.4(double)=2.0+3.4=5.4
===========================

 명시적인 형변환(=강제형변환)

byte s2=12; short s3=45;
       //int result=s2+s3; 기본
       short result=(short)(s2+s3);//수식은 소괄호
       System.out.println("result="+result);

p95 비트연산자,쉬프트연산자


논리연산자->&,|,^
  논리적인 데이터  & 논리적인 데이터
       (2>3)                  (5<7)


비트연산자->정수값->2진수로 변환->계산
 &,|,^,~ =>이진화된 데이터 & 이진화된 데이터
                           14 & 9
===========================
=>&(and)
     |(or)
     ^(xor)
     ~(not)

ex)  14 & 9==>2진수
  byte b=14,c=9

 양수->1,2,4,8,16,,,

1->true, 0->false

   00001110=>14
   00001001==>9   &
==============
   00001000==>10진수로 변환->8
=====================
 | ->or ->(둘중에 하나가 참이면 ->참)

   00001110=>14
   00001001==>9   |
==============
   00001111=>1+2+4+8=15

  ^->xor연산자->1 1, 0 0->0 ,1,0,0,1->1

   00001110=>14
   00001001==>9   ^
==============
   00000111->1+2+4=7
===============
 ~ ->not===>1->0   0->1로 변환
===============
 ~14
 
  00001110=>14
  ==========
  11110001->-?==>보수
  ===============
  10-3=7+3
================
 =>양수->음수로 변환

      1)reverse->1->0,0->1
      2)+1
==================
 ex)byte a=2;
      00000010->2=>-2
      =========
      11111101
      +           1
==================
      11111110===>-2
===============
      음수->양수로 변환

      1)-1
      2)reverse->1->0,0->1
      ============
       11111110-->-2
       -           1
    ============
       11111101
===========
       00000010==>2
======================
       BitTest.java
  ~14 =>00001110->14
              11110001->-?=>음수->양수
              -            1
              =========
              11110000
              =======
              00001111->1+2+4+8=>15=>-15
============================
비트연산자->비트를 오른쪽,왼쪽으로 이동시키는 연산자
                  shift연산자

     >>>=>데이터전송과 연관(데이터입출력)
============================
1) 피연산자 >> n(이동시키는 비트수)
  ->  14 >> 1->7,    14 >> 2=>3
             00001110
               0000111=>왼쪽에 공백->양수->0을채움
                                                    음수->1을채움
             00000111->1+2+4->7
=======================
       -14 >> 1
 공식)  14(x)  >> 1(n)=>14(x)/2의n=7
         -14(x)  >> 1(n)=>-14/2=>-7
=======================
       14 << 1(n)->왼쪽으로 비트수를 이동
       00001110
       0001110  ====>오른쪽공백->0을 채움
       14(x) << 1(n)->x*2의 n->14*2=28
===========================
       00011100=>4+8+16=28
       -14(x) << 1=>-14*2=-28

     -8 >> 1=>-8/2=-4
     -8 >> 2=>-8/4=-2
===========================
      >>>=> >>와 기능이 거의 유사
          ->왼쪽에 공백=>양수,음수 상관없이 무조건
                                  0을 채운다
             ->데이터를 전송할때 내부적으로 >>>
                 을 이용 ->양수로 만들어서 전달
            byte->-128~127=>0~255
===========================
복합대입연산자=>배정연산자=>
 int num=10;
  num=num+5;//=>num+=5; //권장
  ===========>실행속도가 더 빠르다
  num=num*10;//->num*=10;
  num=num-10;//->num-=10;
  num=num/10;//=>num/=10;

 System.out.println("num="+num);
 p79
  e+=2.1;//e=e+2.1;
  e*=2;//e=e*2;
  n*=2.2=>n=n*2.2;
==================
주의)==>a++,++a
             =>a=a+1;//a+=1; a++
              a--=>a=a-1; //a-=1;
=====================
 netbeans 개발툴
 ==========
 제어문=>실행흐름의 컨트롤
==================
 자바의 명령어->순차문->코딩순서대로 실행이 되는
                                   문장.
                       제어문->특별한 조건에 따라서 실행
                                    될수도 실행이 되지않을
                                    수도 있는 문장
                       주석문-->컴파일러가 번역하지 않는
                                    문장
=============================
 제어문 종류

 1.p110~117->if문,삼항연산자->조건문
 2.switch문->선택문->JDK버전에서 추가된 문법
 3.p124~ 반복문(for,while,do~while)
-------------------------------------------------

 조건문->if문->특정조건에 따라서 참,거짓(둘중의
                      하나값을체크할때)

 변수,수식,true
 형식1)  if(조건식)==>p111
              문장1;

 형식2)  if(조건식)
                문장1;
            else
                문장2;


   IFTest2.java
======================
  형식3)if(조건식) { //if문내부에 또 다른 if문
              if조건식--->참인경우
          }else{
              if조건식--->거짓인경우
          }
======================
  형식3)=>if(조건식) {
                    문장1;
              }else if(조건식2){
                    문장2;
              }else if(조건식3){
                    문장3;
              }
               ...
              else{

              }

 삼항연산자->IFTest3.java

=>if문 대신사용하는 연산자
형식)변수명=(조건식)? 참인문장:거짓인문장
 
   int num1=50,num2=100;
=================

             50       100       50     100
=>big=(num1>num2)?num1:num2;
               50     100         50 -100            100-50
     diff=(num1>num2)?(num1-num2):(num2-num1)
==>제어문->조건문


 

 

'개발개발 > 자바' 카테고리의 다른 글

6일차  (0) 2013.09.03
5일차  (0) 2013.09.03
3일차  (0) 2013.08.28
2일차  (0) 2013.08.28
초보 Java 웹 개발자들을 위한 학습 로드맵 프로그래밍  (0) 2012.05.16
Posted by 공돌공돌
,

3일차

개발개발/자바 2013. 8. 28. 15:48

3일차(연산자의 개요및 연산자종류)

  c:\webtest
        java
           |
          3일차(연산자의 개요및 연산자종류)->3일차.txt
================================
1장 프로그램설치-->2장 변수,자료형->Eclipse
        Editplus

 package(패키지)->탐색기의 폴더처럼->예제를 관리->0828

 PrefixTest

  bin->
     |
      -j0828
           PrefixTest.class
  src->소스파일
    |
     -j0827
          OpTest.java
     -j0828
           PrefixTest.java
            ...

1.패키지를 따로 작성->우리가 예제를 하나씩 추가=>그래픽
2. j0827.aa.bb=> jo827
                               aa
                                  bb->OpTest.java
===========================
산술연산자(+,-,*,/,%->나머지를 구해주는 연산자)
증감연산자

 앞에 있으면(prefix)->먼저 계산이 되고
 뒤에 있으면(postfix)->나중에 계산이 된다.

int b=a++;
int b=a;//int b=
a=a+1;
===========
관계연산자
=>대소비교를 해주는 연산자
<,>,>=,<=

==(변수에 저장된 값이 서로 일치하는지 확인)
!=(변수에 저장된 값이 서로 같지 않은지 확인)

ex) int a=5;
      int b=10;
==========>변수(집)

<주의 할점>
 1.a==b=>a의 값과 b의 값이 같은지 확인
 2.a!=b=>두개의 변수값이 서로 같지 않은지 확인
 3.a=b==>b의 값을 a에 저장하라
========================
논리연산자=>참과 거짓을 판별할 수 있는 연산자

&&(and)=>그리고->두개의 값이 참이 되는 경우
||(or)->또는-->둘중에 하나라도 참이 있으면 T
   ==>조건평가->첫항의 결과에 따라서 두번째항을 체크할지
                         말지 결정해주는 계산방식

 (2>3) && (5<7)
     F            T--->F
                  F---->F
    T------->T----->T
                 F----->F
============================
 !(not)=>부정 =>!T-->F   !F->T

=>명제
          &&(and)   ||(or)     !   xor
T    T        T        T ---->F      F
T    F        F        T         F      T
F    T        F        T         F       T
F    F        F        F         T       F

============
 &(and)==>모두평가방식->양쪽항을 무조건 체크해서 결과
 | (or)
 ^(xor)->배타적인 결합->두개의 값이 같으면 False
                                     두개의 값이 다르면 참
================
 LogicalTest.java
 
boolean result=(num1==10) && (num2==20)

(3+5)*7==>3+5*7
==============
비트연산자
쉬프트연산자
=========
배정연산자
=========
삼항연산자=>제어문과 연관(if)
big=(num1>num2)? num1:num2;

형식)
변수명=(조건식)?참인값:거짓인값;

=>조건식의 계산결과에 따라서 값을 다르게
     변수에 저장시킬때 관여하는 연산자
=>삼항연산자

    ThreeTest.java=>삼항연산자
====================
형변환연산자(Cast Operator)->캐스트연산자
     변수앞에 (변환시키고자하는 자료형)

p64 자료형의 변환

정수,문자,문자열,논리적인값 저장
                                      소수점
=============================>자동형변환
byte->short->int->long->float->double
   1        2        4      8         4
          char
             2
<===========================강제형변환
                                    float f=3.5f;
   int num=(int)3.15;  ==>(강제로 부여하는 자료형)변수명 or 숫자
=======================================
연습문제 풀이=>CastTest.java
==================
논리형->boolean(1byte)
문자형->char(2byte)
정수형->byte->short->int->long
실수형->float(4byte), double(8byte)
=======================
2-2)

long regNo=3456781234567L;//13자리
        System.out.println("regNo="+regNo);

2-3)

 int i=100;
 long l=100L;
 final float PI=3.14f;

-리터럴->데이터저장부분
   100,100L,3.14f

-변수=>i,l
-상수->PI->변수명 앞에 final단어가 붙으면
                  상수=>대문자로 사용

-키워드(예약어)->int,long,final,float
=======================
2-4]
a. int
b.Byte->Wrapper class
c.double
d.boolean

2-5]

System.out.println("1"+"2");//문자열+문자열=문자열->"12"
System.out.println(true+"");//boolean(1byte)+String(4byte)
                                             "true"+""->"true"
System.out.println('A'+'B');//문자+문자->int로 변환
                              65+66=>131
System.out.println('1'+2);//문자(char)+2(int)=>int+int
                                              49+2=51
System.out.println('1'+'2');//문자+문자=>int로 변환
                             49+50=>99
System.out.println('J'+"ava");//문자(char)+문자열(String)
                                             "Java"
System.out.println(true+null);//오류

2-6] 키워드가 아닌것은?(모두)
a. if->키워드임

b. True->true
c. NULL->null
d. Class->class
e. System->키워드가 아님
                  항목이 아님

2-7] 변수의 이름으로 사용?

a. $ystem=>가능(_,$만 가능)
b. channel#5=>#은 사용불가
c. 7eleven=>첫글자는 숫자오면 에러유발
d. If->가능하다(단 if->예약어이기때문)
e. 자바->한글도 가능
f. new ->예약어
g. $MAX_NUM=>사용가능
h. hell@com=>@때문에 에러유발

========================>
1,2,3일차->공부

자료형변환->명시적인 형변환 ,배정연산자,비트,쉬프트연산자
제어문->if,switch

 

 

 

 


1.boolean=>자료형변환이 없다.(배제)
=========
자료형변환-->수식연산사이에 일어나는 과정

형변환의 종류

1.자동형변환->계산을 하다보면 자동적으로 형변환

 숫자를 저장하면서 그 자료형에 맞게 데이터를 변환->저장
1) byte su=2;  00000010
    short su=2; 00000000 00000010
    int su=2;     00000000 00000000 00000000 00000010

2) 3.5(double)+12(int)=>3.5+12.0=15.5
->ex) byte su;//자료형 변수명부여(규칙->식별자규칙)
         su=27;//변수명=저장할값;

         int num2=35;//선언하면서 데이터를 저장시켜라
  //su변수의 값=27
        //byte sum=su(byte)+num2(int);=>int+int->int
       int sum=su+num2;

2.명시적인형변환(=강제형변환)
  =>개발자(사용자)가 따로 명확하게 어떤형으로 변환을 할지
      강제적으로 지정해주는 경우

 

 

 


 

 

'개발개발 > 자바' 카테고리의 다른 글

5일차  (0) 2013.09.03
4일차  (0) 2013.08.29
2일차  (0) 2013.08.28
초보 Java 웹 개발자들을 위한 학습 로드맵 프로그래밍  (0) 2012.05.16
변수  (0) 2012.04.16
Posted by 공돌공돌
,

2일차

개발개발/자바 2013. 8. 28. 15:47

2일차(식별자,변수,상수,자료형,이클립스설치 및 환경설정)

 c:\webtest
        java
           2일차(식별자,변수,상수,자료형,이클립스설치 및 환경설정)
             식별자,변수,상수,자료형=>editplus작업
             이클립스설치 및 환경설정->

 =>1장~5장->설치(환경설정)->변수,자료형(2장)
                  ->4장 연산자->3장(형변환)->5장 제어문
==================================
  복습(2~3주)
=>자바->6장,7장->클래스,인스턴스(객체),9장,10장,11장,
              13장 배열,14,15,16장 상속,chapter 17장,인스턴스
====================================
     18장.예외처리,20장.Wrapper 클래스, 21장. 제너릭,22장(웹)
      24장 파일과 I/O 스트림(웹->파일 업로드)
      25장 Swing=>안드로이드 프로그래밍

     SE->기본적인 자바프로그래밍을 작성(응용프로그램)
            메모장,그림판 프로그램작성=>필수버전
===============================
     EE->웹프로그래밍 할때 필요->Tomcat서버
     ME->모바일 프로그래밍

자바의 특징->바이트코드->->JavaTest.java->JavaTest.class
                  ->운영체제에 상관없이 다 실행이 될수있는 코드로
                      작성된 파일
===================================
chapter2 변수,자료형

 기본적인 프로그래밍->입출력 프로그램->입력받아서 처리
자료형=>사용자가 컴퓨터에게 지정->문자->'a',A
                                                             "note"->문자열
                                                    23,23.6
             저장되는 데이터의 종류와 크기를 지정해주는 것
            (=데이터형)->p41
  1.기본자료형->8가지(문자,문자열,숫자(소수점),논리적인값)

=>VarTest.java

1.수치(숫자)
               byte->-128~127=>27저장
                     ->자바에서의 데이터(문자)를 전송할때 사용하는
                        입출력단위=>0~255

                 ex) 자료형 변수
변수->컴퓨터가 저장되는 임의 의공간->이름부여
               short->2byte=>-32768~32767
               int->4byte기억공간에 데이터를 저장
                   ->자바에서의 연산을 할때 기본 데이터형
                      변수+변수=>

  자바의 특징->플랫폼에 독립적=>운영체제에 상관없이 다 실행
                     이식성이 있다.->연산결과에 따라서 기본적으로
                                            자료형은 int
                     long형->long형으로 데이터를 저장->저장할값L;
              ex) int num1;
                    num1=10;//메모리 낭비
                  int a;
                  int b;
                  int c;
========================
                  int a; int b; int c;

 식별자(idenfier)
->개발자가 임의로 편리성을 가지고 부여하는 이름
->ex) v_변수명

1.대소문자를 구분해서 부여
 =>String name="홍길동";

2.영문자+숫자+특수기호(_,$)=>조합
3.숫자는 맨처음에 올수없다.
4.키워드(=예약어)는 사용불가
 
  VarTest2.java
               long

 byte->short->int->long->float->double
                               8          4
                               2,2.3

자바에서의 소수점이하를 저장->실수->
무조건 double형으로 저장해야 한다.

->소수점이하가 2자리이하->간단->float로 저장
->소수점이하가 6자리이상->정밀도->double로
                                                     저장
============================
=>VarTest3.java

2.문자->p53->문자저장->내부적으로 숫자로 변환->저장(2진수)

byte->-128~127=>0~255=>범위 데이터를 전달(아스키코드)
==>한글,일본어,독일어...=>유니코드(한글저장->2byte)
                                                      영문저장->1byte

  char->2byte(0~65535)
=>0x숫자->16진수형태로 저장
=>0숫자->8진수형태로 저장
=================
16진수
0~9 10 11 12 13 14 15
        A  B   C   D  E   F

숫자로 저장->0x,0을 붙여서 저장
문자로 저장->유니코드형태로 저장
                  '\u0000'~'\uFFFF'
boolean->논리적인값을 저장
               (참,거짓인것을 판별할수있는값)

true,false값만 저장
===============
->1,0으로 표현할수가 없다.
================

'a'=>"ab"=>문자열
String=>문자열을 저장시키는 데이터자료형
=====>기본자료형(8가지)에는 포함이 되어있지 않은 자료형
              (참조형)
===================================
=>이클립스로 개발=>
  http://www.eclipse.org
==================

Eclipse IDE for Java Developers, 151 MB=>Java만 가능

Eclipse IDE for Java EE Developers, 246 MB
           =>Java+web 기능이 내장=>권장

=>eclipse ~.zip=>다운받아서 압축을 풀면 된다.(설치과정이 없다)
          =>MyEclipse(유료)

eclipse-jee-juno-SR1-win32.zip->xp
========================
eclipse-jee-juno-SR2-win32-x86_64.zip
=>64bit용

 eclipse
    |
     -eclipse.exe=>실행
==================
이클립스 실행오류

 가상머신생성 오류발생
->이클립스->자바의 특정파일을 불러다
                   사용
eclipse.ini->편집

openFile
////////////////////////////////추가->저장시킨후->eclipse.exe실행
-vm
C:\Jdk7.0\bin\javaw.exe
////////////////////////////////
-vmargs

2.오류메세지->해상도에 문제가 발생->큰 오류창이 실행
=>-Xmx512-->-Xmx256으로 해상도를 낮춰준다음에
저장시킨후 실행

3.32bit버전으로 설치하는 경우->버전이 안맞는 경우
=>공유된 라이브러리파일을 불러올수 없다.(jvm.dll)
==========================
     eclipse~x64~.zip->다운받음.
============================

C:\Users\강사\workspace
=>작업영역?

do not ask agin->체크

1.작업영역을 설정
=>예제작성->저장위치 지정?

c:\webtest
       java
         |
        sou폴더생성

C:\webtest\java\sou

2.자바->프로젝트작성
      JavaStudy
File->New->other
   java project선택

   src->~.java저장
   bin->~.class저장
=============
연산자
변수선언->저장->출력

연산을 하기위한 연산자
OpTest

public static void main()
체크->자동으로 만들어준다

3.글꼴설정,라인번호출력
windows->preference

General
   Apperanace
       Colors and Font

  Editors
        Text Editors
    show line numbers를 체크
    (라인번호를 출력)
->Basic->Text Font

 Apply->OK적용 끝
===============
Verdana,14->26

연산자->연산을 하기위한 기호

종류

1.산술연산자
     -단항산술연산자->+,-,++,--
     ex) int a=-5;

     -이항산술연산자->p74->+,-,*,/,%(나머지)
ex) int a=5,b=6;
      int c=a+b;//수식->피연산자 연산자 피연산자
 
 editplus->저장->컴파일

 eclipse->파일을 저장->자동 컴파일

=>ctrl+s(저장)->자동 컴파일
===================
=>증가시키는 기호->++
     감소                ->--

++변수명->prefix(전위연산자)
     변수명++=>postFix(후위연산자)
======================
=>연산자->증감연산자,관계연산자
                  논리연산자,캐스트연산자

3장->자료형의 변환
======================

 

2.관계연산자(=대소비교연산자)
3.논리연산자
==========
4.비트연산자
5.쉬프트연산자
==========
6.대입연산자
7.증감연산자
8.캐스트연산자(=형변환연산자)

 


3.논리적인값 저장->true,or false

===================================
  2.참조자료형->사람의 정보

 

 

 

 

 

 

 

 

 


 

 

'개발개발 > 자바' 카테고리의 다른 글

4일차  (0) 2013.08.29
3일차  (0) 2013.08.28
초보 Java 웹 개발자들을 위한 학습 로드맵 프로그래밍  (0) 2012.05.16
변수  (0) 2012.04.16
생각하고 코딩하기  (0) 2012.04.13
Posted by 공돌공돌
,
OKJSP에 자주 가서 요즘 자바 개발자들이 어떻게 살아가나를 보는 편인데, 아주 많이 반복적으로 올라오는 질문이 "대체 뭘 공부해야 하나요? 프레임워크는 Spring을 해야 할까요? iBATIS를 해야 할까요?" 하는 식의 질문들이다(이 질문은 사실 말이 안된다. 왜 그런지 읽다보면 나온다).

Java는 웹 관련 프레임워크들이 너무 다양하고, Ruby나 Python 같은 경우에는 RubyOnRailsDjango 처럼 하나의 프레임워크 안에 기능별 프레임워크들도 모두 다 All in one 형태로 들어 있어서 혼란을 주지 않는 반면, Java는 각 영역별로 프레임워크가 모두 다르고, 또한 각 영역별로 존재하는 프레임워크들의 종류도 많아서 초보 개발자들에게 극심한 혼란을 주고 있다.

그래서 나름대로 Java Web 개발자들을 위한 학습 로드맵을 정리해 보았다.

1. Java 그 자체
많은 웹 개발자들이 마치 JSP 코드를 짤 줄 알면 그걸로 Java 웹 개발을 할 줄아는 것이라 생각하고 Java 그 자체를 소홀히 하는 것을 본다.
말도 안되는 소리이다. Java를 모르고서 Java 웹 개발을 제대로 한다는 것은 어불 성설이다. Java 그 자체를 먼저 공부하라.

특히 Java 5 문법을 숙지하길 권한다. 이제 우리나라도 점차 Java 5가 대세가 되어 가고 있다. 대부분의 프레임워크들과 WAS(JSP와 서블릿을 구동하는 서버)도 모두 Java 5를 기준으로 바뀌었으며, JVM 자체도 버전이 높을 수록 성능이 더 좋다.

2. JSP와 Servlet 그리고 Model 1
모델 1은, JSP 하나에 DB에 접속해서 쿼리를 날리는 등의 모든 업무적인 기능(Business Logic)을 넣고, 그 아래에 HTML 코드를 박아 넣는 식으로 개발하는 것을 의미한다.
아직도 많은 개발자들이 여기에 길들여져 있는데, 일단 JSP 자체에 대한 기본기를 익힌 뒤로는 재빨리 버려야 할 습관이다.

그리고 많은 개발자들이 Servlet을 무시하고 JSP만 하는 것을 보곤 하는데, Servlet에 대한 학습이 제대로 이뤄지지 않으면 더 나은 웹 개발이 곤란하다. Servlet에 대한 기초 개념을 확실히 잡길 권한다.
모델 1은 제가 알기로는 HTML과 로직을 모두 한 JSP에 넣는 방식이 아니라 jsp:beans를 이용하는 방식입니다. 모델 1에서도 여전히 비즈니스 로직과 UI는 분리할 수 있죠. thin controller, fat model에는 더 맞는 방식이라고도 할 수 있습니다. - 영록, 그리고 Servlets and JSP Pages Best Practices에서 Model 1 관련 부분 참조

모델 1은 JSP나 혹은 서블릿 하나가 요청에 대한 처리, 데이터 유효성 검사, 비즈니스 로직 처리, 응답 생성을 모두 다 책임지는 방식이다. 모델 1은 작고, 간단한 애플리케이션에서 개발을 쉽게하고자 할때 사용된다.

In Model 1, a request is made to a JSP or servlet and then that JSP or servlet handles all responsibilities for the request, including processing the request, validating data, handling the business logic, and generating a response. The Model 1 architecture is commonly used in smaller, simple task applications due to its ease of development. - Wikipedia


3. Model 2 - 프레임워크의 등장
JSP로 열심히 개발을 하다보니 프로젝트 규모도 커지기 시작하고, JSP 파일 크기도 수천줄에 달하는등 엄청나게 커진다.
그런데 이 JSP에다 두서없이 모든 기능을 다 때려 넣다보니 JSP마다 똑같은 기능들이 Copy&Paste로 들어가고, JSP 안에 들어 있는 Java 코드들에서 에러가 발생하면 찾아내서 디버깅 하는 일이 지옥같이 느껴지기 시작한다.

여기서 Model 2가 구원자로 등장한다.

Model 2는 말만 멋드러졌지 실제로는 간단한 개념이다.

JSP에서 수행하던 DB 쿼리 등의 작업을 Servlet에게 넘겨주고 JSP에서는 오로지 화면 출력만 담당하는 것이다.

Servlet에서 DB 쿼리등 화면 출력과는 상관없는 비지니스 로직을 일단 먼저 모두 수행하고, 그 결과를 request.setAttribute("key",결과객체);로 담은 다음 JSP 페이지로 포워딩(forward)을 하면 JSP에서는 request.getAttribute("key")로 그 객체를 받아서 화면에 뿌려주기만 한다.
이런 업무 수행단/화면 출력단의 철저한 역할 분리가 Model 2이다.

여기서 이러한 각 역할을 "MVC - Model View Controller" 라고 한다. 그래서 Model 2는 MVC와 동일한 의미로 사용하기 도 한다. MVC의 의미는 공부하면서 찾아보라.

이게 뭐가 좋냐고? 개발 기간이 좀 길어지고 프로젝트 규모가 쬐끔 커지고, 기존 프로젝트를 유지보수를 해보면 얼마나 좋은지 몸소 뼈져리게 느끼게 된다.

Model 2의 기능을 정형화해서 쉽게 구현하게 해주는 것이 MVC Framework들의 역할이다.
가장 유명한 Model 2 웹 프레임워크들은 다음과 같은 것들이 있다.

* 스트럿츠 1 - Struts 1
* 스트럿츠 2 - Struts 2
* 스프링 MVC - Spring MVC
* 기타 덜 유명한 Wicket, Stripes, JSF, Tapestry 등.

Struts 1은 MVC의 효시라고 할 수 있다. 우리에게 MVC라는 축복을 주기는하였으나, 나온지 오래된 만큼 낡은 개념들이 많이 녹아있고 쓸데 없이 복잡하고 배우기도 어려운 편이다.

오히려 Struts 2와 Spring MVC가 더 배우기 쉬울 것이며, 개발도 더 쉽다. 현재 추세는 Struts 2와 Spring MVC이다. 대형 포탈이나 SI 업체들도 Spring/Struts 2를 주로 채택하는 추세로 가고 있는 것으로 알고 있다.

둘 중 하나의 개념만 확실히 이해해도 다른 것을 배우는데 어려움이 별로 없으므로 그냥 둘중에 골라서 배우길 권한다. 나는 Spring을 선호한다.

그리고 MVC 프레임워크를 사용하기 시작하면서 View를 만드는 JSP에 대해서도 재조명이 시작된다. 기존에 Java 코드를 JSP에 직접 넣던 관행을 버리고 JSTL과 태그 라이브러리를 사용하거나 아예 JSP를 버리고 다른 템플릿 엔진으로 만들기도 한다. 이에 관해서는 맨 마지막에.

4. 퍼시스턴스 프레임워크 : JDBC 반복 작업에 짜증이 나기 시작하다.
현대 웹 개발에서 가장 큰 역할을 차지하는 것은 뭐니뭐니해도 단연 Database 작업이다.
지금까지는 아마도 JDBC에서 DB 커넥션을 맺고, 쿼리를 날리고 그 결과 ResultSet을 JSP로 넘겨주어서 출력하는 식으로 했을 것이다.
이미 다들 알고 있겠지만 JDBC를 사용하면 똑같은 코드가 굉장히 많이 반복해서 나온다. 한마디로 "삽질"의 전형이 JDBC 작업이다.
이것을 깨달은 많은 개발자들이 조금 어정짱하게 반복작업을 해결해주는 Util 클래스들을 프로젝트별로 만들어서 사용하곤 한다.
하지만, 물론 이에 대해 정형화하고 깔끔하고 훨씬 더 사용하기 쉬게 만들려는 노력이 이미 수년에 걸쳐 이루어졌다.

이렇게 DB관련된 작업을 정형화한 것들을 Persistence Framework 라고 한다.

* 아이바티스 - iBATIS : SQL Mapper - JDBC보다 더 쉽게 배우고, 더 편하게 사용한다.
* 하이버네이트 - Hibernate : 객체지향을 객체지향답게, 개발 기간을 엄청나게 단축시켜주다.

퍼시스턴스 프레임워크의 양대 산맥은 iBATIS와 Hibernate이다. 이 둘 모두 우리나라에 책이 나와 있다.
iBATIS는 SQL Mapper의 한 종류이고, Hibernate는 ORM의 한 종류이다.

이 둘의 차이는 iBATIS는 개발자가 SQL 쿼리를 직접 작성한 것을 객체에 매핑시켜주는 것이고, ORM은 DB 스키마와 객체간의 관계를 설정파일로 만들면 자동으로 쿼리를 만들어주는 것이다.

자, 이 둘을 보면 미국에서는 Hibernate가 인기가 좋고, 우리나라에서는 iBATIS가 사실상 SI 업계를 평정했다.
그러니까, 일단은 우리나라에서는 iBATIS를 공부하면 된다고 보면 된다.

이렇게 말하니까 마치 이 둘이 경쟁자 같은데, 사실 이 둘은 경쟁 상대라기 보다는 보완해주는 역할을 한다. SI에서 처럼 DB 테이블이 정규화 되어 있지 않은 경우에는 Hibernate같은 ORM을 사용하면 프로젝트를 말아먹을 수 있다.

iBATIS는 테이블 정규화에 무관하게, 개발자가 작성한 SQL을 객체로 매핑하기 때문에 DB 스키마가 마구 꼬여 있는 상황에서도 유연하게 작동하고, 개발자가 직접 SQL 튜닝을 할 수 있다는 장점이다.

그리고 Hibernate는 배우기가 굉장히 어려운 프레임워크이고 튜닝이 매우 어렵다. Hibernate책을 보면 캐싱을 통해 성능을 향상시키라고 하지만 캐싱은 iBATIS도 못지않게 잘 지원한다. 하지만 일단 배우면, 그로인한 코딩 생산성이 iBATIS가 감히 넘볼 수 없을 정도록 급격히 향상된다.

Hibernate는 DB 정규화가 잘되어 있는 웹 포탈 업체나 패키지 소프트웨어 제작시에 강력히 권장할만 하다.

5. IoC와 DI - 객체의 생성주기와 의존성을 관리하고 싶어지다
사실 내가 경험한 SI를 보면 4단계 까지만 가도 막장은 아닌 프로젝트라고 본다. 아직도 신규 프로젝트를 하면서도 Model 1에 JDBC로 코딩하는 것을 많이 보았기 때문이다.

앞서, MVC라는 형태로 웹 애플리케이션의 역할을 철저하게 분할해서 처리하라고 했었다.

이제 여기서 좀 더 역할을 분할하기 시작한다.

Database를 관장하는 코드(DAO)와 Database 처리 결과를 가지고 그외 비지니스 로직을 추가로 수행하는 코드(Service), 그리고 웹으로 들어온 요청을 받아서 비지니스 로직을 호출하고, 그 결과를 다시 웹(HTML 등)으로 내보내는 코드(Controller)로 분할을 하면 유지보수가 더 쉽고, DB가 Oracle에서 DB2 로 변경되는 식의 중대 변화가 있을 때도 DAO만 바꾸면 되는 식으로 변화에 대한 대처가 유연해 진다는 것을 깨닫기 시작한다.

이제는 각 역할별로 클래스를 분할하고 컨트롤러 객체는 서비스 객체에 서비스 객체는 DAO 객체에 의존해서 작동하도록 코드를 바꾸기 시작한다. 그리고 객체의 생성과 파괴 주기도 관리해야만 하게 된다. 객체를 하나만 생성하면 되는데 불필요하게 매번 new를 할 필요는 없으니까.

이렇게 객체의 생성/파괴 주기를 관리하고 객체간의 의존성을 관리해주는 프레임워크를 IoC 컨테이너라고 부른다.

1. Spring Framework
2. EJB 3.0

사실상 대세는 Spring Framework로 굳어졌다. EJB 3.0은 내가 안써봐서 뭐라 말은 못하겠다.

Spring MVC는 이 Spring Framework의 일부분이다.

Spring은 또한 AOP도 지원한다.

AOP 의 개념이 상당히 어려운 편이라서 개념 자체를 확실히 한마디로는 표현하지 못하겠다. 어쨌든 개발자들에게 가장 쉽게 다가오는 표현으로 하자면, AOP는 동일한 패턴으로 반복적으로 해야하는 일을 설정을 통해 자동으로 해주는 것이다.
이에 관한 가장 보편적인 예가 바로 트랜잭션이다.
지금까지는 아마도 비지니스 로직이 시작될 때 트랜잭션이 시작되고, 비지니스 로직이 끝날 때 트랜잭션을 종료하는 코드를 매번 작성해서 넣었을 것이다.
AOP를 사용하면, 비지니스 로직의 역할을 하는 메소드가 무엇인지 설정파일에 넣어주기만 하면 자동으로 메소드가 시작될 때 트랜잭션을 시작시키고, 메소드가 끝날 때 트랜잭션을 종료시켜준다. 물론 예외가 발생하면 트랜잭션을 rollback도 해준다. 따라서 Spring을 사용한 프로젝트에서는 트랜잭션 관련 코드를 볼 수 없을 것이다.

Spring 프레임워크는 기본적으로 IoC 컨테이너 역할을 하는 것이 핵심이다. 따라서 Spring을 사용한다고 해서 꼭 Spring MVC를 사용할 필요는 없다. Struts 2 + Spring + iBATIS 나 SpringMVC + Spring + Hibernate 등... 어떠한 조합이라도 가능하다.

6. 그 외
◈ Template Engine : JSP 보다 더 간결하면서 강력한게 필요해!
* JSP + JSTL : Sun이 지정한 산업표준이다. JSTL은 당연히 쓰고 있으리라 믿는다.
* Freemarker : 가장 권장할 만하다.
* Velocity : 굉장히 배우기 쉽다. JSTL보다 더 빨리 배워서 쓸 수 있다. 가독성도 좋다. 그러나 Freemarker 만큼 편하고 강력하지는 못하다.
많은 사람들이 Java 웹 개발을 그냥 "JSP 개발"이라고도 부르는데, MVC가 도입되고, Freemarker 같은 다른 템플릿 엔진을 사용하게 되면 더이상 JSP는 코빼기도 안보이게 된다. 그러므로.. JSP 개발이라는 말은 쓰지 않았으면 좋겠다.

◈ Layout Engine
* Sitemesh : 헤더 푸터 처럼 동일 패턴이 반복되는 레이아웃을 관리해준다.

◈ XML 도우미 : W3C DOM은 너무 어렵고 난잡하다. 좀 더 편한 XML관련 개발을 원한다면..
* JDOM : Java 표준으로 지정됐다고 한다.
* DOM4J
둘 다 비슷하게 편한거 같다. 예전엔 JDOM을 썼었는데, 나 같은 경우 현재 프로젝트에서는 DOM4J를 사용한다. Hibernate가 DOM4J를 사용하기 때문에, 별도의 라이브러리 더 넣는게 귀찮아서.

◈ 단위 테스트
* jUnit : 코드를 철저하게 테스트하자.

◈ 소스코드 버전관리
* CVS
* Subversion : 현재 대세는 Subversion
내가 최고 막장으로 꼽는 프로젝트는 아직도 FTP로 소스 관리하는 프로젝트이다. 이런 프로젝트에는 절대로 참여하지 않을 것이라고 굳게 맹세하고 또 맹세했다. --;
소스 코드 버전관리는 여러 개발자들이 동시에 개발할 때 소스코드를 저장하고 충돌을 관리해주며, 소스 변경 내역을 계속해서 추적해서 과거 소스로 언제든지 돌아갈 수 있도록 도와준다.
현재 대세는 Subversion이지만 CVS로도 버전관리의 이점을 충분히 만끽할 수 있다. 그리고.. 사실 CVS가 사용법을 익히기는 더 쉽다.

◈ 자동 빌드
* Ant : Ant 면 만사 Ok!
* Maven
아직도 javac 로 컴파일하고 있고, FTP로 파일 올려서 복사하고 있다면.. 이 모든일을 자동으로 명령 한방에 처리하도록 해야 실수도 적고, 퇴근도 일찍한다.
Ant로 빌드와 배포를 자동화 하자.

결론

내가 권하는 조합은
* SI 업체에서 일하는 경우 : Struts 2 혹은 SpringMVC + iBATIS + JSP/JSTL + 가능하다면 Spring Framework
* 웹 포털등과 같은 업계, 패키지 소프트웨어 제작 업체 : Struts 2 혹은 Spring MVC + Hibernate + Spring Framework + Freemarker + Sitemesh

 

 

 

출처 - http://kwon37xi.egloos.com/3666564

'개발개발 > 자바' 카테고리의 다른 글

3일차  (0) 2013.08.28
2일차  (0) 2013.08.28
변수  (0) 2012.04.16
생각하고 코딩하기  (0) 2012.04.13
HashMap 정의, 예제  (1) 2012.04.13
Posted by 공돌공돌
,

변수

개발개발/자바 2012. 4. 16. 14:45

 

 

 

변수의 종류

선언위치 

생성시기 

 클래스 변수

클래스 영역

 클래스가 메모리에 올라갈 때

 인스턴스 변수

 인스턴스가 생성되었을 때

 지역 변수

클래스 영역 이외의 영역
(메서드, 생성자, 초기화 블럭 내부) 

 변수 선언문이 수행되었을 때

 

클래스변수의 초기화시점 : 클래스가 처음 로딩될 때 단 한번 초기화 된다.

인스턴스변수의 초기화시점 : 인스턴스가 생성될 때마다 각 인스턴스별로 초기화가 이루어진다.

클래스변수의 초기화순서 : 기본값 → 명시적초기화 → 클래스 초기화 블럭

인스턴스변수의 초기화순서 : 기본값 → 명시적초기화 → 인스턴스 초기화 블럭 → 생성자

'개발개발 > 자바' 카테고리의 다른 글

3일차  (0) 2013.08.28
2일차  (0) 2013.08.28
초보 Java 웹 개발자들을 위한 학습 로드맵 프로그래밍  (0) 2012.05.16
생각하고 코딩하기  (0) 2012.04.13
HashMap 정의, 예제  (1) 2012.04.13
Posted by 공돌공돌
,
지식인을 보다가 자바 기본문제를 물어보는 질문이 있었다

난 심심풀이로 풀어보았다

문제는 1+(1+2)+(1+2+3)+(1+2+3+4)+...+(1+2+3+...+10)의 결과를 계산하시오

내가 푼건

                               
                                int a,b,sum=0;
		int count=1;
		
		for(a=1; a<=10; a++)
		{
			if(count <= a)
			{
				for(b=1; b<=a; b++)
				{
					sum+=b;	
				}
			}
			count++;
		}
		System.out.println(sum);

생각도 안하고 그냥 짜고 실행보니까 맞길래 올렸다

근데 곧 올라온 또 다른 사람의 답변...

		int sum = 0;
		int totalSum = 0;

		for (int i = 1; i <= 10; i++)
		{
			sum += i;
			totalSum += sum;
		}
		System.out.println("totalSum=" + totalSum);

바로 내 답변 지웠다

쪽팔렸다..

생각좀 하자...

'개발개발 > 자바' 카테고리의 다른 글

3일차  (0) 2013.08.28
2일차  (0) 2013.08.28
초보 Java 웹 개발자들을 위한 학습 로드맵 프로그래밍  (0) 2012.05.16
변수  (0) 2012.04.16
HashMap 정의, 예제  (1) 2012.04.13
Posted by 공돌공돌
,

(1) HashMap 사용하기

- Key Value를 하나의 쌍으로 저장되는 구조이며 저장되는Value Key null을 허용합니다.

- 하지만 키의 중복은 허용하지 않으므로 null을 가지는 Key 2개일 수는 없습니다.

- 동기화가 포함되지 않았으므로 Multi-Thread환경에서의 구현이 아니라면 Hashtable

비해서 처리 속도가 빠른 장점을 가지고 있습니다.


(2) HashMap 메소드 요약




(3) Sample Code

i) 간단한 HashMap 코드

01 package com.map;
02
03 import java.util.HashMap;
04
05 public class HashMapExample1 {
06 public static void main(String[] args) {
07 HashMap<String, Integer> map = new HashMap<String, Integer>();
08
09 map.put("해리", new Integer(10));
10 map.put("해르미온느", new Integer(100));
11 map.put("론", new Integer(85));
12 map.put("드레이코", new Integer(93));
13 map.put("네빌",new Integer(70));
14 map.put("해르미온느", new Integer(100)); //key의 중복 허용하지 않음
15 map.put(null, new Integer(50)); //key에 null을 인정
16 map.put("강호동", null); //value에 null을 인정
17
18 System.out.println(map);
19
20 Integer num = map.get("해르미온느");
21 System.out.println("해르미온느의 성적은? "+num);
22
23 num = map.get(null);
24 System.out.println("null의 성적은? "+num);
25 }
26 }

<< 출력 결과 >>

해르미온느의 성적은? 100

ii) HashMap에서 key, value추출해보기

01 package com.map;
02
03 import java.util.HashMap;
04 import java.util.Iterator;
05 import java.util.Set;
06
07 public class MapEx1 {
08 public static void main(String[] args) {
09 String[] msg = {"Berlin","Paris","Seoul","New York","London"};
10
11 HashMap<Integer,String> map = new HashMap<Integer,String>();
12
13 for(int i=0; i < msg.length; i++)
14 map.put(i, msg[i]);
15
16 System.out.println(map);
17
18 //중계 객체(Iterator로 변환하기 위한)
19 //1. Set<Integer> s = map.keySet();
20 //2. Iterator<Integer> keys2 = s.iterator();
21 //=> 아래와 같이 1라인으로 변환가능
22 Iterator<Integer> keys2 = map.keySet().iterator();
23
24 while(keys2.hasNext()){
25 Integer key = keys2.next();
26 System.out.print("key: "+key);
27 System.out.print(", value: "+map.get(key)+'\n');
28 }
29 }
30 }

<< 출력 결과 >>

{0=Berlin, 1=Paris, 2=Seoul, 3=New York, 4=London}

key: 0, value: Berlin

key: 1, value: Paris

key: 2, value: Seoul

key: 3, value: New York

key: 4, value: London

iii) 간단한 Hashtable 예제

01 package com.map;
02
03 import java.util.*;
04
05 public class HashtableTest {
06 public static void main(String[] args) {
07 //key와 value에 null을 허용하지 않음
08 Hashtable<String, Double> ht = new Hashtable<String, Double>();
09
10 ht.put("김형중", 182.5);
11 ht.put("김범", 180.3);
12 ht.put("금잔디",163.6);
13 ht.put("구준표",187.2);
14 //ht.put("금잔디", null); => Error!
15 //ht.put(null, 163.5); => Error!
16
17 System.out.println(ht);
18
19 Scanner input = new Scanner(System.in);
20 System.out.print("# 이름을 입력하세요 >> ");
21 String key = input.nextLine();
22
23 double height = ht.get(key);
24 System.out.println(key+"의 신장 : "+height);
25
26 System.out.println("\n이름\t 신장");
27 System.out.println("--------------------");
28
29 Set<String> set = ht.keySet();
30 for(String item : set){
31 height = ht.get(item);
32 System.out.println(item+" \t"+height);
33 }
34
35 }
36 }

<< 출력 결과 >>

{김형중=182.5, 구준표=187.2, 금잔디=163.6, 김범=180.3}

# 이름을 입력하세요 >> 금잔디

금잔디의 신장 : 163.6

이름 신장

--------------------

김형중 182.5

구준표 187.2

금잔디 163.6

김범 180.3

'개발개발 > 자바' 카테고리의 다른 글

3일차  (0) 2013.08.28
2일차  (0) 2013.08.28
초보 Java 웹 개발자들을 위한 학습 로드맵 프로그래밍  (0) 2012.05.16
변수  (0) 2012.04.16
생각하고 코딩하기  (0) 2012.04.13
Posted by 공돌공돌
,