* 생성자(constructor) 란?

 - 인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드'

 - 인스턴스 변수 초기화 또는 인스턴스 생성시 수행잘 작업에 사용

 - 몇가지 조건을 제외하고 메서드와 같다.

 - 모든 클래스에는 반드시 하나 이상의 생성자가 존재 하여야 한다.

 - 생성자는 주로 객체의 멤버변수를 초기화 하는데 사용(멤버변수는 일반적으로 생성자에서 초기화)

 

 # 인스턴스 초기화 - 인스턴스 변수에 적절한 값을  저장하는 것

 Card c = new Card();

1. 생성자 new에 의해서  메모리(heap)에 Card클래스의 인스턴스가 생성

2. 생성자 Card()가 호출되어 수행된다.

3. 연산자 new의 결과를 , 생성된 Card인스턴스의 주소가 반환되어 참조변수 c에 저장

 

 

-> 생성자의 조건

 - 생성자의 이름은 클래스의 이름과 같아야 한다

 - 생성자는 항상 리턴값이 없습니다. 그렇다고 리턴값이 없음을 의미하는 void를 붙이지는 않는다.

래스이름(타입 변수명, 타입 변수명, ... ) {

  // 인스턴스 생성시 수행될 코드

     // 주로 인스턴스 변수의 초기화 코드를 적는다.

}

 

-> 기본 생성자(default constructor)

 -  매개변수가 없는 생성자

 -  클래스에 생성자가 하나도 없으면 컴파일러가 기본 생성자를 추가한다.

     (생성자가 하나라도 있으면 컴파일러는 기본 생성자를 추가하지 않는다.)

 

 클래스이름() { }

 Card() { } // 컴파일러에 의해 추가된 Card클래스의 기본 생성자. 내용이 없다.

 

-> 생성자에서 다른 생성자 호출하기 _this()

 ▶ this() - 자기 자신을 가르키며 , 생성자, 같은 클래스의 다른 생성자를 호출 할 때 사용

                   다른 생성자 호출은 생성자의 첫줄 에서만 가능

class Car {

String color;

String gearType;

int door;

 

Car() { this("white","auto","4" } // 매개변수가 없는 생성자(기본 생성자)

 

Car(String c, String g, int d) {  //매개변수가 있는 생성자 (생성자를 통한 멤버변수 초기화)

color = c ;

gearType = "auto"

door = 4 ;

 

       Car() {

door = 5;

this("white","auto",4);

}

-> 참조변수 this

 ▶ this 인스턴스 자신을 가리키는 참조변수.인스턴스의 주소가 저장되어 있음

     모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재

 

clss Car {

String color;

String gearType;

int door;

 

Car() {

 this("white","auto","4");

}

 

car(String c, String g, int d){

color = c;

gearType = g;

door = d;

} 

}

// 위 car 생성자를 this를 이용하여 변경

car(String c, String g, int d){

this.color = color;

this.gearType = gearType;

this.door = door;

}

 

* 변수의 초기화

 - 변수를 선언하고 처음으로 값을 저장하는 것

 - 맴버변수(인스턴스변수, 클래스변수) 와 배역을 각 타입의 기본값으로  자동 초기화되무로 초기화 생략 가능

 - 지역변수는 사용전에 꼭!! 초기화를 해주어야 한다.

 

 자료형

기본값 

 boolean

false 

 char

'\u0000' 

 byte

 short

 0

 int

 0

 long

0L 

 float

0.0f 

 double

0.0d 또는 0.0 

 참조형 변수

null 

 

 class InitTest{

     int x;            // 인스턴스 변수

     int y = x ;     //  인스턴스 변수

 

     void method1() {

int i ;        // 지역변수

      int j = i;     // 컴파일에러 !!!! 지역변수를 초기화하지 않고 사용함

 

 

-> 변수의 초기화 예시

 선언예

설명 

 int i = 10 ;

 int j = 10 ;

 int형 변수 i를 선언하고 10으로 초기화 한다.

 int형 변수 j를 선언하고 10으로 초기화 한다.

 int i = 10, int j = 10 ;

 같은 타입의 변수는 콤마(,)를 사용해서 함께 선언하거나 초기화 할 수 있다. 

 int i = 10 , j = 10 ;

 타입이 다른 변수는 함께 선언하거나 초기화할 수 없다. 

 int i =10 ;

 int j = i ;

 변수 i에 저장된 값으로 변수 j를 초기화 한다.

 변수 j는 i의 값인 10으로 초기화 한다. 

 int j= i ;

 int i= 10;

 변수 i가 선언되기 전에 i를 사용 할 수 없다. 

 

-> 멤버변수의 초기화

▶ 멥버변수의 초기화  3가지 방법

 1. 명시적 초기화

class Car {

int door = 4;                           // 기본형 변수의 초기화

Engine e = new Engine() ;     //  참조형 변수의 초기화

//....

}

 2. 생성자(constructor)

 - this를 이용한 맴버변수의 초기화

 car(String color, String gearType, int door){

this.color = color ;

this.gearType = gearType;

this.door = door ;

     }

 

 3. 초기화 블럭

  - 인스턴스 초기화 블럭 : { }

  - 클래스 초기화 블럭 : static { }

'JAVA' 카테고리의 다른 글

자바의 객체지향개념 2-2  (0) 2015.10.05
자바의 객체지향개념 2-1  (0) 2015.10.05
자바의 객체지향개념 1-2  (0) 2015.10.05
자바의 객체지향개념 1-1  (0) 2015.10.05
본문 한글깨짐 문제 해결방법  (0) 2015.09.22
Posted by 달콤한부자
,

* 변수 선언위치에 따른 변수의 종류

- 변수의 선언위치가 변수의 종류와 범위(Scope)을 결정한다.

 

변수의 종류 

선언위치 

생성시기 

 클래스 변수

 클래스 영역

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

 인스턴스 변수

 클래스 영역

 인스턴스를 생성시

 지역변수

 메서드 영역 

 변수 선언문 수행시

 

-> 인스턴스 변수

- 각 인스턴스의 개별적인 저장공간 인스턴스마다 다른 값 저장가능

- 인스턴스 생성 후,'참조변수.인스턴변수명'으로 접근

- 인스턴스를 생성할 때 생성되고, 참조변수가 없을 때 가비지 컬렉터에 의해 자동 제거

 

->클래스 변수

-같은 클래스의 모든 인스턴스들이 공유하는 변수(Static)

-인스턴스 생성없이 '클래스이름.클래스변수명' 으로 접근

-클래스가 로딩될 때 생성되고 프로그램이 종료될 때 소멸

 

-> 지역변수

- 메서드 내에 선언, 메서드 종료와 함께 소멸

- 조건문, 반복문의 블럭{} 내에 선언된 지역변수는 블럭을 벗어나면 소멸

 

* 메서드란?

 - 작업을 수행하기 위한 명령문의 집합

-  어떤 값을 입력받아서 처리하고 그 결과를 돌려준다(돌려주지 않을 수도 있다. void)

 

-> 메서드의 정의 - 클래스 영역에만 정의 할 수 있다.

리턴타입 메서드의 이름(타입 변수명, 타입 변수명,....){

            // 메서드 호출시 수행될 코드

 

 

int add(int a , int b){

int result = a+b;

return result; // 호출한 메서드로 결과를 반환한다. 

                  // 반환값이 없는 경우는 리턴타입 대신 void 사용

-> return 문

- 메서서드의 블럭 {}의 끝에 도달했을때

- 메서서드을 블럭 {}을 수행 도중 return문을 만났을때

- 현재 실행 중인 메서드를 종료하고 호출한 메서드로 되톨아 간다.

 

1. 반환값이 없는 경우 - return문만 써주면 된다

           return;

2. 반환값이 있는 경우 - return문 뒤에 반환값을 지정해 주어야 한다.

          return 반환값;

 

-> 재귀호출(recursive call)

 - 메서드 내에서 자기 자신을 반복적으로 호출하는 것

 - 재귀호출은 반복문으로 바꿀 수 있다.

 - 이해하기 쉽고 간결한 코드를 작성할 수 있다.

 

-> 클래스 메서드 와 인스턴스 매서드

 ▶ 인스턴스 메서드

  - 인스턴스 생성후, '참조변수.메서드의이름()'으로 호출

  - 인스턴스변수 나 인스턴스메서드와  관련된 작업을 하는 메서드

  - 메서드 내에서 인스턴스변수 사용가능

 

 ▶ 클래스  메서드(static 매서드)

  - 객체생성없이 '클래스이름.메서드이름()'으로 호출

  - 인스턴스변수나 인스턴트메서드와 관련없는 작업을 하는 메서드

  - 매서드 내에서 인스턴스 변수 사용불가(클래스 메서드(클래스 변수)는 클래스가  메모리에 먼저 올라 오기 때문)

 

* 메서드 오버로딩

 - 하나의 클래스에 같은 이름의 메서드를 여러 개 정의하는 것

 

->오버로딩의 조건

 - 메서드의 이름이 같고

 - 매개변수의 개수 또는  타입 달라야 함

 - 매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않는다. 

 

 ex) void println() 

 // 다양하게 오버로딩된 메서를 제공함으로써 모든 변수를 출력할 수 있도록 설계

 

 

'JAVA' 카테고리의 다른 글

자바의 객체지향개념 2-1  (0) 2015.10.05
자바의 객체지향개념 1-3  (0) 2015.10.05
자바의 객체지향개념 1-1  (0) 2015.10.05
본문 한글깨짐 문제 해결방법  (0) 2015.09.22
eclipse 단축키(Hot key)  (0) 2015.07.16
Posted by 달콤한부자
,

* 클래스의 정의 - 클래스란 객체를 정의해 놓은 것

   클래스의 용도 - 클래스는 객체를 생성하는데 사용된다.

 

* 객체의  정의 - 실제로 존재하는 것 사물 또는 개념

   객체의 용도 - 객체의 속성과 기능에 따라 다름

 

 클래스 

 객체

 제품 설계도

 제품

 TV 설계도

 TV

 붕어빵기계

붕어빵 

 

* 객체란 - 인스턴스를 포함하는 일반적인 의미

 - 객체는 속성과 기능의 집합이며, 속성과 기능을 객체의 맴버라고 한다.

 - 클래스를 정의할때 객체의 속성은 변수로 기능은 메서드로 정의한다.

 

* 인스턴스 생성방법

클래스명 참조변수명 ; // 객체를 다루기 위한 참조변수 선언

 

참조변수명 = new 클래스명(); // 객체생성 후 , 생성된 객체의 주소를 참조변수에 저장

 

ex) Tv t = new Tv(); // Tv 클래스의 멤버를 들을 참조 하기 위하여 new 통하여 t라는 인스턴스를 생성

      t.channel =7;

      t.channelDown();

     System.out.println(t.channel) ;

 

(a) 하나의 인스턴스를 여러 개의 참조변가 가리키는 경우(가능)

(b) 여러 개의 인스턴스를 하나의 참조변수가 가르키는 경우(불가능)

 

* 클래스 - 사용자 정의 타입(User-defined type)

- 프로그래머가 직접 새로운 타입을 정의할 수 있다.

- 서로 관련된 값을  묶어서 하나의 타입으로 정의한다.

'JAVA' 카테고리의 다른 글

자바의 객체지향개념 1-3  (0) 2015.10.05
자바의 객체지향개념 1-2  (0) 2015.10.05
본문 한글깨짐 문제 해결방법  (0) 2015.09.22
eclipse 단축키(Hot key)  (0) 2015.07.16
Spring 개념 이론수업  (0) 2015.07.16
Posted by 달콤한부자
,

html본문 한글깨짐 문제 해결방법

 

- web.xml 아래 코드 추가

<filter>
  <filter-name>CharacterEncodingFilter</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>UTF-8</param-value>
  </init-param>
  <init-param>
   <param-name>forceEncoding</param-name>
   <param-value>true</param-value>
  </init-param>
 </filter> 

- jsp 상단 코드 추가

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

 

- URL에 한글이 있을 때 깨지는 현상은 tomcat 서버 server.xml 내 추가

 <Connector connectionTimeout="20000" port="7070" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8" />
 <Connector port="7009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />

'JAVA' 카테고리의 다른 글

자바의 객체지향개념 1-2  (0) 2015.10.05
자바의 객체지향개념 1-1  (0) 2015.10.05
eclipse 단축키(Hot key)  (0) 2015.07.16
Spring 개념 이론수업  (0) 2015.07.16
GET과 POST의 차이  (0) 2015.07.07
Posted by 달콤한부자
,

eclipse 단축키(Hot key)

JAVA 2015. 7. 16. 21:37

eclipse 단축키(Hot key)


아래의 단축키들은 위도우 환경을 기준으로 자바 개발 시 사용되는 단축키를 나열한 것이다. 리눅스나 맥 등에서는 다를 수 있으며, Menu bar - Window - Preferences - General - Keys 에서 단축키를 변경 가능하다. 아래 단축키 목록에서 단축키 오른쪽에 있는 단축키 이름으로 검색을 하여 변경하면 된다.

< 이클립스 단축키 >

Ctrl + 1 : Quick Fix
문맥(Syntax)에 맞게 Source Code를 고쳐준다.
예 : 인터페이스를 구현하는 클래스에서 구현하지 않는 메소드가 있을 경우 클래스 명 커서를 두고 단축키를 실행하면 메소드가 추가된다.

Ctrl + Shift + o : Organize imports
import를 자동으로 수행

Ctrl + Space bar : Content Assist
자동 완성 기능
예 : Syso 입력 후 단축키를 실행하면 System.out.println()메소드 완성. 변수, 메소드 명 등을 처음 일부만 입력한후 단축키를 실행하면 자동 완성.

Alt + Shift + r : Rename
클래스, 패키지, 변수, 메소드 등의 이름을 변경해준다. 참조 정보까지 같이 변경 해준다.

Alt + Shift + v : Move
해당 자원(Resource)를 원하는 곳으로 이동할 수 있게 해준다. 참조 정보도 같이 변경 해준다.


F2 : Show Tooltip Description
컴파일 에러의 빨간줄에 커서를 갖져다가 이 키를 누르면 에러의 원인에 대한 힌트를 제공한다.


F3(Ctrl + 마우스커서) : Open declaration
커서가 있는 위치의 클래스, 변수, 메소드 등이 선언(Declare) 된 위치로 이동.

F4 : Open Type Hierarchy

클래스명을 선택하고 누르면 해당 클래스의 Hierarchy 를 볼 수 있다.



Alt + ↑ or ↓ : Move Lines Up
위, 아래 문장을 서로 바꾼다.

Ctrl + d : Delete Line
커서가 위치한 라인을 삭제

Ctrl + Shift + Delete : Delete to End of Line
커서가 현재 위치한 곳에서 라인의 끝까지 삭제한다.


Ctrl + Alt + ↑ or ↓ : Duplicate Lines
현재 커서가 있는 줄을 복사하여 위, 아래에 붙여넣기 한다.


Ctrl + F : Find and Replace
기본적인 문자열 찾기

Ctrl + j : Incremental Find
이 단축키를 누르게 되면, 이클립스 창의 하단 상태 표시줄 부분에 Incremental Find라고 표시되며, 한글자씩을 누를 때마다 그곳에 입력된 글자가 보이고 코드내의 일치하는 문자열로 이동하게 된다. 입력을 끝내고 다시 Ctrl + J를 누르면 그 문자열과 일치하는 곳으로 커서가 이동하게 된다.

Ctrl + Shift + j : Incremental Find Reverse
Ctrl + j와 같은 기능. 방향이 반대이다.


Ctrl + F6 : Next Editor
에디터 창 사이의 이동이 가능하다. Ctrl + F6을 입력한 후 Ctrl입력을 유지한 채 F6을 입력할 때마다 커서가 아래 방향으로 이동하여 원하는 파일의 에디터창으로 이동이 가능하다.

Ctrl + Shift + F6 : Previous Editor
Ctrl + F6과 동일한 기능. 커서가 아래 방향이 아니라 위쪽으로 움직인다.

Ctrl + w : Close
현재 창을 닫는다.

Ctrl + Shift + F4 : Close All
열려 있는 모든 창들을 닫는다.

Ctrl + l : Go to Line
원하는 라인 번호를 입력하여 이동할 수 있다.

Ctrl + o : Quick Outline
현재 작업 중인 클래스의 모든 메소드들을 확인할 수 있다.

Ctrl + t : Quick Hierarchy
현재 작업 중인 클래스의 Hierarchy를  팝업(Pop up) 형태로 확인할 수 있다.




Alt + Shift + s : Show Source Quick Menu
마우스 우클릭을 했을 때 나오는 메뉴들 중 Source의 하위 메뉴들을 보여 준다.(상단 menu bar의 Source 메뉴)

Alt + Shift + z : Surround With Quick Menu
코드 일부분을 블럭으로 선택한 후 단축키를 적용하면 try/catch, for, do-while, while, if, synchronized, runnable 등으로 감쌀 수 있다.

Ctrl + Shift + f : Format
코드의 내용을 문법 템플릿에 맞게 포맷팅 해준다. 자바 표준 코딩 스타일을 준수시켜 줄 때 좋다.

Ctrl + Shift + l : Show Key Assist
현재 지정된 모든 단축키들을 보여준다.

Ctrl + F11 : Run
바로 전에 실행했던 클래스 실행


Ctrl + / : Toggle Comment
현재 라인, 또는 선택된 블럭(Block)을 주석 처리 한다.

Ctrl + Shift + / : Add Block Comment
블록 주석(/* */)

Ctrl + Shift + \ : 블록 주석 제거

Ctrl + m : Maximize Active View or Editor
전체화면 토글

Ctrl + , or . : Previous(Next)
다음 annotation(에러, 워닝, 북마크 가능)으로 점프



Ctrl + F7 : Next View
뷰간 전환

Ctrl + F8 : Nest Perspective
퍼스펙티브간 전환

F12 : Activate Editor
에디터로 포커스 위치

Alt + ← or → : Backward History(Forward History)
이전, 다음 작업


Ctrl + N : New
새로운 파일 / 프로젝트 생성

F11 : Debug
디버깅 시작

F8 : Resume
디버깅 계속(When : debugging)

F6 : Step Over
디버깅 한줄씩 실행(step over)

F5 : Step Into
디버깅 한줄씩 실행 함수 내부로 들어감 (step into)

Ctrl + Shift + B : Toggle Breakpoint
현재 커서 라인에 Break point 설정

Ctrl + Shift +X : To Upper Case
대문자로 변환

Ctrl + Shift + Y : To Lower Case
소문자로 변환


Ctrl + i : Correct Indentation
들여쓰기 자동 수정





< 기타 단축키들 >
Ctrl + Page Down, Page Up : 에디터 창 내에서 탭 이동
하나의 Editor(에디터) 창에 여러 탭(Tab)이 있을 경우 이들 사이에 이동이 가능.

Alt + Shift + x : 실행 관련 단축키 보여준다.
실행에 관련된 단축키를 보여준다. 이클립스의 기본 단축키로 Alt + Shift + x + [key] 는 여러 실행들의 단축키가 지정되어 있다.
예 : 리스트 된 단축키에서 자바 어플리케이션으로 실행이 j 라면 Alt +Shift + x 입력 한 후 j를 입력(Alt + Shift + x + j 는 자바 어플리케이션으로 실행의 단축키이다.)


< 메소드 쉽게 생성하기 >

클래스의 멤버를 일단 먼저 생성한다.

override 메소드를 구현하려면, Source->Override/Implement Methods 에서 해당 메소드를 체크한다.

기타 클래스의 멤버가 클래스의 오브젝트라면, Source->Generate Delegate Methods 에서 메소드를 선택한다


'JAVA' 카테고리의 다른 글

자바의 객체지향개념 1-1  (0) 2015.10.05
본문 한글깨짐 문제 해결방법  (0) 2015.09.22
Spring 개념 이론수업  (0) 2015.07.16
GET과 POST의 차이  (0) 2015.07.07
자바 변수란?  (0) 2015.04.20
Posted by 달콤한부자
,

Spring 개념 이론수업

JAVA 2015. 7. 16. 20:54

//

// Spring Container

//   - Factory Pattern

//      - 결합도 떨어뜨리기

//      - 구동 및 초기화 설정

// IoC란? 적용법, 이점

// -Inversion of Control(객체)

// -장점: Container 기능을 이용해서 객체간의 결합도를 낮춤

// 객체결합과 유지보수성

// Container 란 무엇이냐?

// 중요한것 : lifecycle management

// 부수적인 : Thread management, object pooling, configuration, dependency, lookup

// Android Activity

// Dependency

// DL(Dependency lookup)  

//      -단점 Container 밖에서 실행할 수 없음

//      - JNDI이외의 방법을 사용할 경우 JNDI관련 코드를 오브젝트내에 일일히 변경해주어야함

// - 테스트하기 어려움, 코드량 증가

// - non Strong type Object Casting의 불편함

//      DI

// 컨테이너에 의존적이지 않은 코드를 작성 할 수 있다.

// Setter Injection

// -JavaBeans property 구조를 이용, 개발이 편리

// - 상속시 그 구조가 그대로 전달됨

// - getter를 통해서 현재 object의 상태를 알수 있다

//        | setting 순서를 지정할 수 없음

//      | 모든 필요한 property가 세팅되는 것에 대해서 보장불가

// Constructor Injection

// PicoContainer 주로 사용하는 방식

// IoC Container

// BeanFactory, ApplicationContext

// Spring Container 객체생성 >> Bean들이 등록되어있는 XML 파일이 읽히게됨

// >> 그 XML에 파일에 등록된 Bean들의 lifecycle, dependecy가 관리되기 시작한다.

// ApplictionContext : 프로퍼티파일의 텍스트 메세지를 해석하는 능력

// 어플리케이 이벤트를 관련된 이벤트 리스너에 발행하는 능력 등과 같은 어플리케이션

// 프레임워크 서비스를 제공하는 BeanFactory의 개념 위에 구현된 Container

// BeanFactory getBean() 메서드가 호출될때까지의 빈의 생성을 미룸 >> lazy loading

// ApplicationContext context 시작하기전에 이미 싱글턴 빈을 미리 로딩 >> pre loading

// I18N internationallizition

// Spring 설정파일

'JAVA' 카테고리의 다른 글

본문 한글깨짐 문제 해결방법  (0) 2015.09.22
eclipse 단축키(Hot key)  (0) 2015.07.16
GET과 POST의 차이  (0) 2015.07.07
자바 변수란?  (0) 2015.04.20
자바 프로그램 구성  (0) 2015.04.18
Posted by 달콤한부자
,

GET과 POST의 차이

JAVA 2015. 7. 7. 07:28

GET과 POST의 차이

다들 아시다시피 GET과 POST는 HTTP프로토콜을 이용해서 서버에 무언가를 전달할 때 사용하는 방식입니다. 웹개발자라면 당연히 알고 있어야 하는 사항이고 이걸 모르면 웹개발자체를 할 수가 없습니다. 상당히 기초적인 부분이긴 한데 잘 모르시는 분들도 있고 해서 미루고 미루던 포스팅을 이제야 합니다. ㅎㅎ GET과 POST 얘기를 하니까 예전 생각이 납니다. 예전이라고 해봤자 불과 2년밖에 되지 않았군요. 졸업을 앞두고 어떤 회사에 면접을 봤었는데 거기 이사님이 저에게 GET과 POST의 차이점이 뭐냐고 물었었는데 전 그땐 그게 무슨말인지도 몰랐죠. 떨어진 이유가 아마 그거이지 싶네요.. ㅎㅎㅎ(지금 생각하면 창피하군요)



어쨌든 처음 웹개발을 하게 되면 한번쯤은 생각하게 되는 문제 입니다. GET과 POST는 머가 다를까.... 하는.... 저도 처음엔 이게 상당히 궁금했습니다. 흔히 얘기하는 GET과 POST의 차이는 다음과 같습니다.(배울때 당시 이해하던 수준정도로만 적습니다.)

GET은 주소줄에 값이 ?뒤에 쌍으로 이어붙고 POST는 숨겨져서(body안에) 보내진다.
GET은 URL에 이어붙기 때문에 길이제한이 있어서 많은양의 데이터는 보내기 어렵고 POST는 많은 양의 보내기에도 적합하다.(역시 용량제한은 있지만)
즉 http://url/bbslist.html?id=5&pagenum=2 같이 하는 것이 GET방식이고 form을 이용해서 submit을 하는 형태가 POST입니다.
처음 배울때 배운건 이정도뿐이었던 것 같습니다. 위 내용은 맞는말이긴 하지만 이로썬 해결안되는 문제가 있습니다. 그건 언제 GET을 쓰고 언제 POST를 써야 하는가에 대한 문제였습니다. 이건 신입일때 꽤 오랫동안 생각하고 있었던 문제이기도 하는데 딱히 가르쳐 주는 곳은 없었습니다. 지금와서 보면 책에 이에 대해 나와있는 책들이 상당히 많이 있습니다만 웹표준에서도 그러하듯이 현업의 개발에서는 "원래의 목적에 맞게 기술을 사용하고 있는가?"에 대해서는 크게 관심이 없고 "어떤 기술이든 기능을 구현할 수 있는가?"에만 관심을 가지는 것이 전반적으로 깔려있기 때문에 이런 부분에 대해서 관심을 가지는 개발자는 빈도수로 봤을때 그리 많지 않은 듯 합니다. 어쨌든 쉽게 말하면 클라이언트에서 서버로 데이터를 전송하려면 GET 아니면 POST밖에 없습니다.(사실 HTTP에는 PUT, DELETE등등 몇가지 더 있지만 그건 이글의 범주에서 벗어나서 언급하지 않습니다. 사실은 잘 몰라서 ㅡ..ㅡ HTTP 1.1 스펙 참조)

id를 넘겨서 게시판의 리스트를 가져온다고 하면 당연히 GET을 쓸 것이고 글을 작성한다고 하면 POST를 작성하는 것이 일반적입니다. 전달해야 될 양이 많을 경우에는 고민없이 POST를 쓰게 되지만 양이 많지 않은 경우에는 GET도 되고 POST도 되기 때문에 고민이 시작됩니다. GET을 써야하나 POST를 써야하나. GET을 쓰면 URL이 깔끔해 지는 효과도 있기 때문에 작은 양을 여러개 전달해야 할 경우에는 POST를 써야하는가 하는 고민을 하게됩니다.(상당히 명백한 차이인듯 하면서 실제로 개발하다보면 고민하게 되는 경우가 좀 있더군요. 저만 그런지 모르겠지만...)


Image by dbking via Flickr

여기서 위의 언급한 차이점 외에 GET과 POST의 중요한 개념이 있습니다.

GET은 가져오는 것이고 POST는 수행하는 것입니다.

이 개념만 잘 생각하고 있으면 상황에 따라서 어느정도 선택을 할 수 있습니다.(물론 그래도 좀 고민되는 예외상황들은 있게 마련이죠.) 좀 자세히 설명하면 GET은 Select적인 성향을 가지고 있습니다. GET은 서버에서 어떤 데이터를 가져와서 보여준다거나 하는 용도이지 서버의 값이나 상태등을 바꾸지 않습니다. 게시판의 리스트라던지 글보기 기능 같은 것이 이에 해당하죠.(방문자의 로그를 남긴다거나 글읽은 횟수를 올려준다거나 하는건 예외입니다.) 반면에 POST는 서버의 값이나 상태를 바꾸기 위해서 사용합니다. 글쓰기를 하면 글의 내용이 디비에 저장이 되고 수정을 하면 디비값이 수정이 되죠. 이럴 경우에 POST를 사용합니다.



이 얘기를 하면 어느곳에서곤 반드시 예시로 나오는 것이 Google의 Accelerator 사건입니다.(대표적으로 예를 들게 이거밖에 없나봅니다. 항상 거론되는걸 보면...) Accelerator라는 것은 그이름대로 웹서핑의 속도를 향상시킬 목적으로 구글이 발표한 것이었습니다. 어떤 웹사이트에 갔을때 페이지에 있는 URL등을 Accelerator가 미리 모두 클릭해봐서 사용자가 해당 URL로 이동하기 전에 이미지등의 미리 받아놓을 수 있는 것들을 받아놓는 역할을 해서 웹서핑의 체감속도를 높여주는 것이 목적이었습니다. 캐시때문에 한번 방문한 사이트는 더 빨리 뜨는 것을 이용한 것이죠.

구글러들은 위에서 언급한 GET과 POST의 개념을 확실히 이해하고 이를 당연하다고 생각하는 사람들이었을 테니 이것이 문제가 될꺼라고는 전혀 생각지 못한듯 합니다. 하지만 현실은 그렇지 않죠. 실제 많은 개발자들은 GET과 POST를 용도구분없이 혼용해서 사용했고 Delete같은 곳에도 GET방식을 편의대로 이용한 것입니다. Accelerator는 이것을 구분하지 못하니 URL만 보였다 싶으면 냅다 클릭을 해댄 것이고 사용자가 클립한 것이 아닌 Bot이 직접 URL로 접근해버리자 해당 데이터들은 Delete를 수행해버려서 메일이나 게시글이 마구 지워지는 사태가 발생하였습니다. 좋은 의도였는데 상당히 안좋은 결과가 되었죠. 우리가 모두 이걸 지켰다면 훨씬 좋은 웹 환경이 됐을 텐데요.



그리고 가져오는 곳에 GET을 사용해야 하는 이유가 하나 더 있습니다. 얼마전에도 관련해서 포스팅한 적이 있지만 웹의 핵심이라고 할 수 있는 Link문제입니다. 기본적으로 웹에서 모든 리소스는 Link할 수 있는 URL을 가지고 있어야 합니다.(퍼머링크(permalink)1퍼머링크라면 더 좋겠지만 꼭 퍼머링크가 아니라고 하더라도) 그래야 Link를 할 수 있으니까요. 쉽게 말하면 어떤 페이지를 보고 있을때 다른 사람한테 그 주소를 주기 위해서 주소창의 URL을 복사해서 줄 수 있어야 한다는 것입니다. POST를 할 결우에는 값이 내부적으로 전달되기 때문에 URL만 전달할 수 없죠. 글을 저장하는 경우에는 URL을 제공할 필요가 없기 때문에 POST를 해도 상관이 없는 것이고요.

다른 것들에서도 그렇듯이 GET과 POST도 그냥 만들어진 것이 아니기 때문에 스펙에 정의된 용도대로 사용한다면 위에 언급한대로 부가적으로 얻을 수 있는 이익이 많이 있고 전체 웹을 생각해도 올바르다고 생각합니다.
는 인터넷에서 특정 페이지의 고유한 URL 주소를 뜻한다. 이 주소는 어떤 상황에도 관계없이 항상 동일한 내용을 가지는 페이지로 링크된다는 의미에서, 고유(permanent)한 주소라는 뜻의 permanent link를 줄여 만든 말이다. 한국어로 고유링크, 고유주소 등으로 부르기도 한다. - Wikipedia 발췌 - [Back]

'JAVA' 카테고리의 다른 글

eclipse 단축키(Hot key)  (0) 2015.07.16
Spring 개념 이론수업  (0) 2015.07.16
자바 변수란?  (0) 2015.04.20
자바 프로그램 구성  (0) 2015.04.18
자바란 무엇인가?  (0) 2015.04.15
Posted by 달콤한부자
,

자바 변수란?

JAVA 2015. 4. 20. 08:18

​1.변수란?

하나의 값을 저장할 수 있는 메모리 공간이다.

2. 변수의 선언

 

 작성규칙

 예 

 첫 번째 글자는 문자이거나 '$','_' 이어야 하고 숫자로 시작할 수 없다 (필수)

 가능: price, $price,_companyName

 안됨: 1v, @spped, $#value

 영어 대소문자가 구분된다.(필수)

 firstname 과 firstName은 다른변수

 첫 문자는 영어 소문자로 시작하되, 다른 단어가 붙을 경우 첫 문자를 대문자료 한다(관례) 

 MaxSpeed, firstName,carBodyColor

 문자 수(길이)의 제한은 없다.

 

 자바 예약어는 사용할 수 없다(필수)

 

 이스케이프 문자

용도 

유니코드 

 '\t'

 수평탭

 0x0009 

 '\n'

 줄바꿈

 0x000a

 '\r'

 리턴

 0x000d

 '\ "'

 "(큰따옴표)

 0x0022

 '\"

 '(작은따옴표)

 0x0027

 '\\'

 \ 

 0x005c

 

'JAVA' 카테고리의 다른 글

eclipse 단축키(Hot key)  (0) 2015.07.16
Spring 개념 이론수업  (0) 2015.07.16
GET과 POST의 차이  (0) 2015.07.07
자바 프로그램 구성  (0) 2015.04.18
자바란 무엇인가?  (0) 2015.04.15
Posted by 달콤한부자
,

자바 프로그램 구성

JAVA 2015. 4. 18. 20:16

​- 자바 실행 프로그램은 반드시 클래스(Class) 블록과 main() 메소드(method) 블럭으로 구성되어야 한다.

- 메소드 블록은 단독으로 작성될 수 없고 항상 클래스 블록 내부에서 작성되어야 한다.

  • 클래스 - 필드 또는 메소드를 포함하는 블록
  • 메소드 - 어떤 일을 처리하는 실행문들을 모아 놓은 불륵

-  클래스의 이름은 마음 대로 정 할 수 있다, 클래스 숫자로 시작할 수 없고 공백을 포함해도 안 된다.

- main() 메소드는 다른 이름으로 변경해서는 안된다. - 이유는 java.exe로 JVM을 구동시키면 제일먼저 main() 메소드를 찾아서 실행시키때문 클래스 내부에  main() 메소드가 없거나 잘못 작성하면 클래스를 실행할 수 없다.

 

 

 

 

'JAVA' 카테고리의 다른 글

eclipse 단축키(Hot key)  (0) 2015.07.16
Spring 개념 이론수업  (0) 2015.07.16
GET과 POST의 차이  (0) 2015.07.07
자바 변수란?  (0) 2015.04.20
자바란 무엇인가?  (0) 2015.04.15
Posted by 달콤한부자
,

자바란 무엇인가?

JAVA 2015. 4. 15. 16:43

 

자바(JAVA)란?

1995년도 처음 썬 마이크로시스템즈에서 자바 언어 발표 지금까지 자바는 성공한 프로그래밍 언어로 전세계적으로

다양한 분야에서 사용되고 있다. 초기 자바는 가전제품에 탑재할 프로그래밍 언어로 개발 되었지만 지금은 스마트

폰을 비롯하여 각종 장비와 데스크톱에서 실행되는 애플리케이션, 금융, 공공, 대기업등의 엔터프라이즈 기업환경에서 실행되는 서버 애플리케이션을 개발하는 중추적인 언어로 자리 매김하고 있다.

 

자바의 특징

1. 이식성이 높은 언어

- 이식성이란? 서로 다른 실행 환경을 가진 시스템 간에 프로그램을 옮겨 실행할 수 있는 것을 말한다.

   다시말에 윈도우에서 실행하는 프로그램을 리눅스 또는 유닉스에서 실행 할 수 있다면 이식성을 높다고 말할 수 있

   으며 실행 할 수 없다면 이식성이 낮다 볼 수 있다.( JRE: JAVA Runtime Environment 가 설치되어 있는곳이면 모

   든 운영체제에서 실행 가능)

 

2. 객체지향 언어

- 프로그램을 개발하는 기법으로 부품에 해당하는 객체를 먼저 만들고, 이것들을 하나씩 조립 및 연결해서 전체 프로

  그램을 완성하는 기법을 객체 지향 프로그래밍(OOP: Object Oriented Programming) 이때 사용되는 언어를 객체

  지향 언어라 한다.

 

3. 함수적 스타일 코딩지원

 - 자바는 함수적 프로그래밍을 위해 람다식을 자바 8부터 지원 람다식을 사용하면 컬렉션의 요소를 필터링, 매핑,

    집계 처리하는데 쉬어지고, 코드가 매우 간결하다.

 

4. 메모리를 자동으로 관리

- 자바는 개발자가 직접 메모리에 접근할 수 없도록 설계되었으며, 메모리는 자바가 직접관리 한다.

 

5. 다양한 애플리케이션을 개발할 수 있다.

 

6. 멀티 스레드(Multi-Thread)를 쉽게 구현할 수 있다.

- 자바는 스레드 생성 및 제어와 관련 라이브러리 API를 제공하고 있기 때문에 실행되는 운영체제에 상관없이 멀티   

스레드를 쉽게 구현 할 수 있다. 

 

1개의 응용 프로그램스레드(thread)로 불리는 처리 단위를 복수 생성하여 복수의 처리를 병행하는 것. 즉, 응용 프로그램 내에서의 다중 작업(multitasking) 처리를 말한다. 다중 작업과 같이 중앙 처리 장치(CPU)의 처리 시간을 매우 짧은 단위로 분할하여 복수의 스레드에 차례로 할당함으로써 복수의 처리가 동시에 이루어지는 것처럼 보인다.

[네이버 지식백과] 멀티 스레드 [multi-thread] (IT용어사전, 한국정보통신기술협회)

7. 동적 로딩을 지원

 

8. 막강한 오픈소스 라이러리가 풍부하다.

- 자바는 오픈소스 언어기 때문에 오픈소스가 넘처난다. 고급 기능을 구현하는 코드를 직접 작성할 경우, 시관과 노력이 필요하고, 실행 안정성을 보장할 수 없지만, 검증된 오픈소스 라이브러리를 사용하여 개발 기간 단축 및 안전성 높은 애플리케이션을 쉽게 개발 할 수 있다.

 

'JAVA' 카테고리의 다른 글

eclipse 단축키(Hot key)  (0) 2015.07.16
Spring 개념 이론수업  (0) 2015.07.16
GET과 POST의 차이  (0) 2015.07.07
자바 변수란?  (0) 2015.04.20
자바 프로그램 구성  (0) 2015.04.18
Posted by 달콤한부자
,