'Code'에 해당되는 글 161건
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 |
제네릭 예제_학생 성적 입출
학생의 성적을 저장하고 검색하고 수정하고 삭제하고 전체 출력할 수 있는 기능을 만들어
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("검색할 학생의 이름을 입력하세요 :");
int index = checkIndex(g.st,name); //이름과 같은 인덱스 찾기
System.out.println( g.st.toString());
break;
case 3: //수정시
System.out.println("수정할 학생의 이름을 입력하세요 : ");
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' 카테고리의 다른 글
| 람다식 (0) | 2019.06.20 |
|---|---|
| 제네릭 예제_학생 성적 입출 (0) | 2019.06.20 |
| 제네릭 예제 (0) | 2019.06.20 |
| 제네릭 (0) | 2019.06.20 |
| 멀티 스레드 예제_ATM(Synchronized) (0) | 2019.06.20 |
제네릭 예제
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 |
제네릭
제네릭 : 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있게 됨
컬렉션, 람다식, 스트림, 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 |
멀티 스레드 예제_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 |
멀티 스레드 예제_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 |
멀티 스레드 예제_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 |
멀티 스레드 예제_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 |
멀티 스레드 예제_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 |