'Code'에 해당되는 글 161건

Code/Servlet & JSP

Web programming

반응형

Web :  웹을 기반으로 홈페이지에 접속하여 서비스를 하는 것    
클라이언트는 서비스를 받는 쪽, 서버는 서비스를 주는 쪽.


Web Programming 언어
1) CGI (Common Gateway Interace) - 초기. 지금은 안 씀
2) ASP (Active Server Page)
3) PHP (Personal Homepage Tools)
4) JSP (Java Server Page)


1) CGI
- 응용프로그램과 웹서버 사이의 정보를 주고받는 방식이나 규약들을 정해 놓은 것
- 정적인 HTML 방식으로는 동적인 웹 페이지를 만들기 어렵기 때문에 서버 측에서 동적인 데이터를 처리해 클라이언트에 HTML 문서로 전송해 줄 수 있는 응용 프로그램의 필요성이 나타났다.
-(백앤드는 CGi기반으로 탄생됐다.)



2) ASP
- Microsoft 사에서 동적인 웹 페이지의 구현을 위해 Visual Basic 언어를 기반으로 만들어진 웹 프로그래밍 기술
- 단점
 - 플랫폼에 비 독립적임
 - 다른 언어에 비해 시스템 자원의 효율성과 확장성이 떨어짐



3) PHP
- ASP와 유사한 스크립트 기반의 언어이지만 ASP와는 다르게 C를 기반으로 만들어진 언어이기 때문에 빠른 속도를 가지고 있다.
- 단점
 - 서버 측의 지원이 부족하며 기업형의 복잡한 시스템 구조에 적용하기가 힘들다. (태생이 약하다. 협회다.)
 - JSP에 비해 보안상의 약점을 가지고 있다. (JSP는 애초에 OOP라는 언어로 만들어져 있고, 중간에 JVM을 거쳐가니까 보안상으로 강력한데, 협회니까 마인드부터가 뒤쳐져있음)



4) JSP 
- 자바를 이용하여 동적인 웹 페이지를 만들기 위해 Sun사가 개발한 기술 
- 서버 페이지를 쉽게 작성할 수 있고, 서블릿과 함께 구동함으로써 서블릿의 기능을 사용할 수 있고, 자바 빈즈, EJB 같은 기술로 보다 강력한 객체 지향적 지원이 가능 
  (서블릿 : 자바가 최초로 웹서버를 할 수 있게 만든 거) 
- 대규모 프로젝트에 용이

 

반응형

'Code > Servlet & JSP' 카테고리의 다른 글

Servlet 구현 환경  (0) 2019.06.20
@Annotation  (0) 2019.06.20
Get/Post 방식  (0) 2019.06.20
JSP  (0) 2019.06.20
Servlet  (0) 2019.06.20
Code/JAVA

제네릭 예제_학생 성적 입출

반응형

 

학생의 성적을 저장하고 검색하고 수정하고 삭제하고 전체 출력할 수 있는 기능을 만들어

1. 추가(이름, 국,영,수)
2. 검색 (이름)
3. 수정 (이름 -> 국영수 점수 수정)
4. 삭제 (이름)
5. 전체 출력
6. 종료

 

* ArrayList / Vector 사용

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
 
public class Student {
    String name;
    int kor;
    int eng;
    int math;
    
    public Student(String name, int kor, int eng, int math) {        //매개변수 3개 받는 생성자
        this.name = name;
        this.kor = kor;
        this.eng = eng;
        this.math = math;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public int getKor() {
        return kor;
    }
 
    public void setKor(int kor) {
        this.kor = kor;
    }
 
    public int getEng() {
        return eng;
    }
 
    public void setEng(int eng) {
        this.eng = eng;
    }
 
    public int getMath() {
        return math;
    }
 
    public void setMath(int math) {
        this.math = math;
    }
    
    public int total() {
        return kor + math+eng;
    }
    
    public float avg() {
        return (kor + math+eng);
    }
 
    @Override
    public String toString() {
        String str =name+"   "+ kor+"   "+math+"   "+eng+"   ";
        return str;
    }
    
    
 
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import java.util.ArrayList;
import java.util.Scanner;
 
/*
 * 1. 추가(이름, 국,영,수)
 * 2. 검색 (이름)
 * 3. 수정 (이름 -> 국영수 점수 수정)
 * 4. 삭제 (이름)
 * 5. 전체 출력
 * 6. 종료
 * 
 * */
public class Grade {
    
    arraylist <Student> st;
     
    Grade(){
        st = new arraylist<Student>();                                //arraylist를 Student 클래스 타입으로 가져옴
    }
    
    static int checkIndex(Vector<Student> st2, String name) {        //이름 검색 시 해당하는 학생 인덱스 찾기 위한 메소드
        int index = 70;
        for (int i = 0; i < st2.size(); i++) {                        //st 크기만큼 반복
            if(st2.get(i).name.equals(name)) {                        //st에 저장된 이름과 입력된 이름 같을 때
                index = i;                                            //index 값으로 대입
            }else index=-1;
        }
        return index;                                                //반환
    } 
    
    
    public static void main(String[] args) {
        
        Grade g = new Grade();                                        //객체 선언
        Scanner sc = new Scanner(System.in);
        int num = 0;
        
        do {                                                        //6입력 전까지 반복
            System.out.println("1.입력   2.검색   3.수정   4.삭제   5.전체 출력   6.종료");
            num = sc.nextInt();
            
            switch(num) {                                            //사용하는 기능을 버튼으로 받아 case로 실행
            case 1:                                                    //이름과 성적 입력
                System.out.println("이름, 국어, 영어, 수학 순으로 입력하세요 :");
                g.st.add(new Student(sc.next(), sc.nextInt(), sc.nextInt(), sc.nextInt()));    //생성자에 바로 넣기
                break;
                
            case 2:                                                    //검색 시
                System.out.println("검색할 학생의 이름을 입력하세요 :");
                String name = sc.next();
                int index = checkIndex(g.st,name);                    //이름과 같은 인덱스 찾기
                System.out.println( g.st.toString());
                
                break;
            case 3:                                                    //수정시
                System.out.println("수정할 학생의 이름을 입력하세요 : ");
                String changename = sc.next();
                int changeIndex = checkIndex(g.st,changename);        //이름과 같은 인덱스 찾기
                System.out.println("변경할 성적 1. 국어 2. 수학 3. 영어");
                int changnum = sc.nextInt();
                if(changnum== 1) {
                    System.out.println("변경할 점수 : ");
                    g.st.get(changeIndex).setKor(sc.nextInt());        //set 메소드 이용하여 값 변경
                }else if(changnum == 2) {
                    System.out.println("변경할 점수 : ");
                    g.st.get(changeIndex).setMath(sc.nextInt());    //set 메소드 이용하여 값 변경
                }else if(changnum== 3) {
                    System.out.println("변경할 점수 : ");
                    g.st.get(changeIndex).setEng(sc.nextInt());        //set 메소드 이용하여 값 변경
                }
                else System.out.println("학생이 없습니다.");
                    
                break;
            case 4:                                                 //삭제 시
                System.out.println("삭제할 학생의 이름을 입력하세요 : ");
                String deletename = sc.next();
                int deleteIndex = checkIndex(g.st,deletename);        //이름과 같은 인덱스 찾기
                g.st.remove(deleteIndex);                            //remove 이용하여 삭제
                break;    
            case 5:
                System.out.println("--------------전체 학생---------------");
                
                for (int i = 0; i < g.st.size(); i++) {
                    System.out.println(g.st.get(i).toString()+ g.st.get(i).total() + "   "+g.st.get(i).avg());                    //toString 이용하여 전체 성적 출력
                }
                break;    
            }
            
        }while(num != 6);
 
    }
 
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
 
반응형

'Code > JAVA' 카테고리의 다른 글

람다식_2  (0) 2019.06.20
람다식  (0) 2019.06.20
제네릭 예제_제네릭 클래스  (0) 2019.06.20
제네릭 예제  (0) 2019.06.20
제네릭  (0) 2019.06.20
Code/JAVA

제네릭 예제_제네릭 클래스

반응형

 

클래스를 제네릭으로 받는 예제 

제네릭 클래스 객체 생성과 

클래스 객체 생성에 대해 알아볼 수 있다.

 

반응형

'Code > JAVA' 카테고리의 다른 글

람다식  (0) 2019.06.20
제네릭 예제_학생 성적 입출  (0) 2019.06.20
제네릭 예제  (0) 2019.06.20
제네릭  (0) 2019.06.20
멀티 스레드 예제_ATM(Synchronized)  (0) 2019.06.20
Code/JAVA

제네릭 예제

반응형

 

 

Box를 제네릭 타입으로 하여 출력 예제 

 

 

반응형

'Code > JAVA' 카테고리의 다른 글

제네릭 예제_학생 성적 입출  (0) 2019.06.20
제네릭 예제_제네릭 클래스  (0) 2019.06.20
제네릭  (0) 2019.06.20
멀티 스레드 예제_ATM(Synchronized)  (0) 2019.06.20
멀티 스레드 예제_priority  (0) 2019.06.20
Code/JAVA

제네릭

반응형


제네릭 : 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있게 됨 

   컬렉션, 람다식, 스트림, NIO 에서 널리 사용.
   클래스와 인터페이스, 메소드 정의할 때 타입을 파라미터로 사용할 수 있도록 함


1. 컴파일 시 강한 타입 체크 할 수 있음 
   : 자바 컴파일러는 코드에서 잘못 사용된 타입때문에 발생하는 문제점을 제거하기 위해 제네릭 코드에 대해 강한 타입 체크 함
     실행 시 타입 에러 나는 것보다 미리 타입을 강하게 체크해서 에러 사전에 방지

2. 타입 변환(casting)을 제거 : 비제네릭 코드는 불필요한 타입 변환을 하기 때문에 성능 저하
   ex) List list = new ArrayList();
        list.add("hello");
        String src = (String) list.get(0);    //casting 해야 함
   -> List list = new ArrayList();
       list.add("hello");
       String str = list.get(0);               //casting 안함

 

* 제네릭 타입 사용하면 같은 타입의 데이터 타입을 클래스 내에서 쓰면 굳이 타입 정함 필요없이 자유롭게 쓸 수 있어서 

 


- 제네릭 타입(class, interface)
  : 타입을 파라미터로 가지는 클래스와 인터페이스. <> 부호 안에 파라미터 위치

- 파라미터 : 변수명과 동일한 규칙 따라 작성 할 수 있지만, 일반적으로 대문자 알파벳 한 글자로 표현 

- 멀티 타입 파라미터(class<K,V...), interface<K,V..>) : 제네릭은 두 개 이상의 멀티 타입의 파라미터 사용. ,로 구분
  ex) public class Product<T,M> {
                       private T kind;
                       private M model; ......
      }
        main() -> Product<Tv, String>

 

- 제네릭 메소드 (<T,R> R method(T t))

 : 매개 타입과 리턴 타입으로 타입 파라미터 갖는 메소드를 말함. 
리턴 타입 앞에 <> 추가해 타입 파라미터를 기술하여, 리턴 타입과 매개 타입으로 타입 파라미터 사용
ex) class Util{ 

                     public static  Box boxing(T t){
                     Box box = new Box();
                     box.set(t);
                     return box;
             }} -> 호출 : main() Box box1 = Util.boxing(100); 
   

      int intValue = box1.get(); 

 

- 제한된 타입 파라미터 () 

: 타입 파라미터에 지정되는구체적인 타입을 제한할 필요가 종종 있음. 
   예를 들어 숫자 연산할 때 Number or 하위 클래스 타입만 들어가야함 

 

- 와일드카드 타입 : 

<?> : 제한 없음. 타입 파라미터를 대치하는 구체적인 타입으로 모든 클래스나 인터페이스 타입이 올 수 있음
<? extends ...> : 상위 클래스 제한. 타입 파라미터를 대치하는 구체적인 타입으로 상위 타입이나 하위 타입만 올 수 있음
<? super...> : 하위 클래스 제한. 타입 파라미터를 대치하는 구체적인 타입으로 하위 타입이나 상위 타입이 올 수 있음

- 제네릭 타입의 상속 : public class ChildProduct<T,M> extends Product<T,M> {...}

- 제네릭 타입의 구현 : public interface Storage {..} 
                              public class StorageImple implements Storage{...}

* 제네릭 타입 구현으로 클래스 배열 만들어 클래스 객체 생성하기 가능

 

 

 

-<이것이 자바다1>. 한빛 미디어  

반응형

'Code > JAVA' 카테고리의 다른 글

제네릭 예제_제네릭 클래스  (0) 2019.06.20
제네릭 예제  (0) 2019.06.20
멀티 스레드 예제_ATM(Synchronized)  (0) 2019.06.20
멀티 스레드 예제_priority  (0) 2019.06.20
멀티 스레드 예제_yield  (0) 2019.06.20
Code/JAVA

멀티 스레드 예제_ATM(Synchronized)

반응형

 

엄마와 아들이 ATM을 통하여 1000원씩 꺼내갈려고 한다.

한 쪽만 독점하지 않고 서로 돌아가면서 뽑을려면 스레드를 잘 써야한다.

 

 

동기화(Synchronized)

: 보내고 받는 영역이 서로 okay 되면 전송하고 받음
   임계 영역을 지정하기 위해 동기화 메소드와 동기화 블록 제공 -> 스레드 내부에 동기화 존재 시 객체 잠금 걸어 다른 스레드가 임계 영역 코드를 실행하지 못함
   synchronized -> 인스턴스, 정적 메소드 어디든 가능

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
class ATM implements Runnable {
    
     private long depositeMoney = 10000;
 
     public void run() {
         synchronized (this) {                            //동기화 사용하기 위해
               for (int i = 0; i < 10; i++) {
                   
                   try {
                       notify();                        //실행 대기 상태로
                       Thread.sleep(1000);
                    } catch (InterruptedException e) {e.printStackTrace(); }
                   
                   if (getDepositeMoney() <= 0)         //여기서 wait()으로 잠들기 전에 금액 -되면 break로 나갈 수 있도록
                        break;
                   
                    try {
                        wait();                            //if에서 안걸리면 wait(), 걸리면 나갈 수 있도록 
                    } catch (InterruptedException e1) {e1.printStackTrace();}    
                    //일시 정지 상태로
                    
                    
                    withDraw(1000);
               }
         }
     }
    
     public void withDraw(long howMuch) {
          if (getDepositeMoney() > 0) {
               depositeMoney -= howMuch;
               System.out.print(Thread.currentThread().getName() + " , ");
               System.out.print("잔액 : "+ getDepositeMoney()+"\n");
          } else {
               System.out.print(Thread.currentThread().getName() + " , ");
               System.out.println("잔액이 부족합니다.");
          }
          
     }
    
     public long getDepositeMoney() {
         return depositeMoney;
     }
     
    }
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
 

반응형

'Code > JAVA' 카테고리의 다른 글

제네릭 예제  (0) 2019.06.20
제네릭  (0) 2019.06.20
멀티 스레드 예제_priority  (0) 2019.06.20
멀티 스레드 예제_yield  (0) 2019.06.20
멀티 스레드 예제_join()  (0) 2019.06.19
Code/JAVA

멀티 스레드 예제_priority

반응형

 

우선 순위 방식 

 

: 우선 순위가 높은 스레드가 실행 상태를 더 많이 가지도록 스케줄링 하는 것 

-> 우선 순위 번호 부여할 수 있기 때문에 개발자가 코드로 제어 가능

1 - 10까지 부여되는데 1 : 제일 낮음.  우선 순위 부여 X 이면 기본적으로 5의 우선순위 할당

thread.setPriority() 메소드 : 우선순위 변경 가능

 

반응형

'Code > JAVA' 카테고리의 다른 글

제네릭  (0) 2019.06.20
멀티 스레드 예제_ATM(Synchronized)  (0) 2019.06.20
멀티 스레드 예제_yield  (0) 2019.06.20
멀티 스레드 예제_join()  (0) 2019.06.19
멀티 스레드 예제_BeepThread  (0) 2019.06.19
Code/JAVA

멀티 스레드 예제_yield

반응형

 

yield() : 실행 중 우선순위 동일한 다른 스레드에게 실행 양보하고 실행 대기 상태가 됨 

 

 

반응형

'Code > JAVA' 카테고리의 다른 글

멀티 스레드 예제_ATM(Synchronized)  (0) 2019.06.20
멀티 스레드 예제_priority  (0) 2019.06.20
멀티 스레드 예제_join()  (0) 2019.06.19
멀티 스레드 예제_BeepThread  (0) 2019.06.19
멀티 스레드_5  (0) 2019.06.19
Code/JAVA

멀티 스레드 예제_join()

반응형

- join() : join() 메소드 호출한 스레드는 일시 정지 상태. 

실행 대기 상태로 갈려면 join() 메소드를 멤버로 갖는 스레드가 종료 되거나 매개값으로 주어진 시간 지나야 함
계산을 다 마친 후 값을 가져와야 하는 경우. 다른 스레드의 종료를 기다렸다가 실행해야 하는 경우

 

 

Runnable 통해 구현

클래스 자체 객체로 만들기 (Thread th = new Thread(new JoinTest());)

@override 되어 run() 메소드 정

join을 통해 스레드 작업을 연장시켜 'end' 출력을 지연시킴

 

반응형

'Code > JAVA' 카테고리의 다른 글

멀티 스레드 예제_priority  (0) 2019.06.20
멀티 스레드 예제_yield  (0) 2019.06.20
멀티 스레드 예제_BeepThread  (0) 2019.06.19
멀티 스레드_5  (0) 2019.06.19
멀티 스레드_4  (0) 2019.06.19
Code/JAVA

멀티 스레드 예제_BeepThread

반응형

 

Runnable을 구현하는 BeepThread 생성 ->  run() 메소드 정의

Toolkit 이용하여 beep음 내는 beep() 호출

sleep에 대해 예외 처리 필요

 

 

메인 클래스에서 BeepThread 객체 생성(obj)

Thread 를 obj로 만들고 start() -> BeepThread의 run() 작동

 

 

'띵' 이란 문자 5번 출력. 

0.5초동안 sleep

반응형

'Code > JAVA' 카테고리의 다른 글

멀티 스레드 예제_yield  (0) 2019.06.20
멀티 스레드 예제_join()  (0) 2019.06.19
멀티 스레드_5  (0) 2019.06.19
멀티 스레드_4  (0) 2019.06.19
멀티 스레드_3  (0) 2019.06.19

푸터바

태그

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.

카운터

  • Today :
  • Yesterday :
  • Total :