토요일, 4월 20
Shadow

#005 자바 기초 문법

1. 기본 데이터 타입

자바의 기본 데이터 타입
char : 자바 언어가 지원하는 모든 유니코드
byte : -128~127
short : -32768 ~ 32767
int : -2147483648 ~2147483647
long : -922337203854775808~922337203854775807
float : 32비트
double : 32비트
boolen : ture, false

1.1 문자 타입과 값
\ : \\
탭 : \t
new line : \n
carriage return : \r
작은따옴표(‘) : \’
큰따옴표(“) : \”

char ch =-“\'”; 로 사용

1.2 배열
int[] intArray = new int[10];
intArray[8] = 10;
int arry = intArray[1]*3;

1.3 타입 변환

묵시적 형변환 : 같은 형으로 받을 경우 (작은것에서 큰것으로 변환)

예) byte = 1 + 2 라면 1 + 2는 integer로 인식 되기 때문에 integer형이 byte형 보다 크므로
들어갈 수 없다. 만약 값을 변수에 넣고자 한다면 int = 1 + 2로 하면된다. int형 = int형 공존 하게 된다.
명시적 형변환 : 명시적으로 (byte)형식으로 만느는 방법 (큰것에서 작은것으로 변환) 강제로 변환
예) byte = 1 + 2 를 계산하면 3이므로 byte에 값을 넣을 수 있다 이럴 경우 강제로 값을 byte에 넣는다.
byte = (byte)(2+2)로 하면 byte = byte형으로 값을 넣을 수 있다.

타입 변환을 할때는 유의해야 할 점이 있는데 그것은 바로 값이 손실될수 있다는 것이다. int 타입의 값을 short타입에 저장하는 경우를 살표보면 short 타입이 저장할수있는 값의 범위는 -32768~32767까지 이다. 반면 int 타입은 더 넓은 범위의 값을 저장할수 있다. 따라서 저장 범위를 벗어나는 int 값을 short 타입에 저장할때는 값이 손실이 발생 할수 있다.

하지만 작은 타입의 범위가 큰 타입에 저장할때에는 자바 언어 차원에서 자동으로 타입을 변환시켜 주며, 이를 자동 타입 변환이라 한다.

1.4 증가/감소 연산자
++operand : operand의 값을 1 증가 시킨후, operand를 사용한다.
operand++ : operand를 사용한후, operand의 값을 1 증가시킨다.
–operand : operand의 값을 1 감소시킨후, operand를 사용한다.
operand– : operand를 사용한후, operand의 값을 1 감소시킨다.

1.5 비교 연산자
a==b : a와 b가 같을 경우, true, 다를경우 false
a!=b : a와 b가 다를경우 , true, 그렇지 않을 경우 false
a>b : a가 b보다 클 경우 , true, 그렇지 않을 경우 false
a>=b : a가 b보다 크거나 같은 경우 , true, 그렇지 않을 경우 false
a<b : a가 b보다 작을 경우 , true, 그렇지 않을 경우 false
a<=b : : a가 b보다 작거나 같은 경우 , true, 그렇지 않을 경우 false

1.6 논리연산자
b1 && b2 : b1과 b2가 모두 true이면 true, 그렇지 않으면 false
b1 || b2 :  b1과 b2 중 하나라도 true이면 true, 그렇지 않으면 false
!b1 : b1이 true이면 false, false이면 true

1.7 조건문
if(조건비교1){
…………..실행코드
}
else if(조건비교2){
…………..실행코드
}
else{
…………..실행코드
}

1.8 반복처리(for, while, do)
for(int i = 1; i<=10; i++){
…………..실행코드
}

while(반복조건){
…………..실행코드
}

do{
…………..실행코드
} while(반복조건);

1.8 break를 사용한 반복문 중간 탈출

for(…){

if(탈출조건) break;
}

1.9 continue를 사용한 코드 실행 뛰어 넘기
countinue는 반복 블록 내에서 continue 이후 코드를 실행하지 않고 넘어간 후 다음 반봅을 실행한다.

for(int i = 0; i<10; i++){
if(뛰어넘기 조건) continue;
}
———————–  i++로 넘어간다.

while(some<= 100){
if(뛰어넘기조건) continue ;
}
———————-  some<= 100로 넘어간다.

do{
if(뛰어넘기조건) continue ;
} while(some <=100);
——————— some <=100로 넘어간다.

2. 자바의 String 클래스와 문자열
자바 String의 메서드
– length() : 문자열의 길이를 구한다.
– charAt(int index) : 지정한 인덱스에 위치한 문자를 리턴한다.
– indexOf(String str) : str이 포함되어 있는 첫 번째 인덱스를 구한다.
– IndexOf(String str, int forindex) : fromindex 이후에 str이 포함되어 있는 첫번째 인덱스를 구한다.
– indexOf(char ch) : 문자 ch의 첫번째 인덱스를 구한다.
– indexOfchar ch, int formindex) :fromindex 이후에 문자 ch의 첫번째 인덱스를 구한다.
– substring(int i) : 인덱스 i부터 나머지 문자열을 구한다.
– substring(int i1, int i2) : i1부터 i2-1까지의 문자열을 구한다.
– equals(String str) : 현재 문자열이 str과 같은 경우 true를 리턴한다.
– compareTo(String str) : 현재 문자열이 str과 같은 경우 0을 리턶ㄴ다.

상수풀과 내부 함수
String a = “JAVA”;

String b = “JAVA”;
 의 경우 a == b 는 true
 String a = new String( “JAVA” );
String b = “JAVA”
 의 경우 a == b 는 false
 intern() : 강제로 상수풀에 집어넣음
 String a = new String( “JAVA” );
a = a.intern();
String b = “JAVA”;

1. 문자열 String의 좋거나 나쁜 행동
http://java.sun.com/j2se/1.5.0/docs/api/ 보면 String은 클래스 임을 알 수 있다.

예제 1)

 public class StringTest {

public static void main(String args[]){

String strOne = “박지성”;
String strTwo = new String(“맨체스터유나이티드”);
String[] strArray = {“13번”, “대한민국”,”국가대표”};

System.out.println(strOne);
System.out.println(strTwo);
System.out.println(strArray[0]);

for(int i=0; i < strArray.length; i++){
System.out.println(strArray[i]);
}
}
}

String 레퍼런스가 사용하는 방법을 정리 한 소스이고 사용 방법은 문서를 찾아 보길 바란다.
중요한 핵심은 String strOne 리터럴 생성자와 String strTwo 인스턴스 생성자의 의미는 완전히 다르다.

예제 2)

 public class StringTest {

public static void main(String args[]){

String reOne = “박지성”;
String reTwo = “박지성”;
String insOne = new String(“박지성”);
String insTwo = new String(“박지성”);

if ( reOne == reTwo ){
System.out.println(” 리터럴 문자열의 두개 모두 같습니다.”);
} else {
System.out.println(” 리터럴 문자열의 두개 모두 다릅니다.”);
}

if ( insOne == insTwo ){
System.out.println(” 인스턴스 각각의 문자열의 두개 모두 같습니다.(== 비교 연산자)”);
} else {
System.out.println(” 인스턴스 각각의 문자열의 두개 모두 다릅니다.(== 비교 연산자)”);
}

if ( insOne.equals(insTwo) ){
System.out.println(” 인스턴스 각각의 문자열의 두개 모두 같습니다.(equals method로 비교)”);
} else {
System.out.println(” 인스턴스 각각의 문자열의 두개 모두 다릅니다.(equals method로 비교)”);
}

}
}

 위 소스를 돌리면 재미있는 현상을 알수 있다. 그것은 문자열 2개를 비교하는 것 뿐인데 2번째 if (){}문은 원하는 답이 나오지 않는다. 이유는 아래와 같다.

String reOne와 String reTwo는 같은 인스턴스 안에서 문자열로 인식 하는 것이고
String insOne는 String insTwo 두개의 인스턴스를 만들기 때문에 문자열과 문자열을 비교 하는 것이 아니라 인스턴스 자체를 비교 연산자로 돌리기때문에 어떻게 보면 서로 다른 메모리 영역에서 비교를 원하는 관계가 된다고 보면 된다.
그래서 이러한 인스턴스들 끼리 비교하는 문자열   Method가  equals()이다.

더 자세한 설명은 아래 링크를 참조
http://josuae.tistory.com/trackback/149

3. 주석처리 방법
– jsp주석
<%– 설명이 들어온다 –%>

– 자바 언어 주석
//주석 내용
/*주석 내용*/
/**주석 내용*/ –> 선언부에 정의한 메서드를 설명할때만 사용한다.

– HTML 주석
<!– 주석내용이 위치 –>

* 객체지향 언어
– object : 실세계에서 일어나는 사물 , 행동 : property, behavior
– class : 컴퓨터 세계로 구현된것 :
field(객체의 상태 정보를 저장한다.),
method(시간(event포함)) -메서드는 객체가 제공하는 기능을 정의한다 보통 메서드에서는 필드의 값을 변경하거나 필드의 값을 이용해서 필요한 동작을 수행하게 된다.
property(get, set) : 클래스로 부터 객체를 생성할떄 사용되며, 메서드와 비슷한 형식을 갖는다. 차이점이 있다면 객체를 생성할떄 실행된다는 것과 리턴값을 갖지 않는다는 것이다.
– instance : 생성자, 소멸자

*class
상속 : a와 b의 공통적인 부분을 c에다 가져다 놓은것
은닉 : 접근 허용범위(public, private, default, protected)
다형 : overlriding(상속 받은 클래스 내에서 비슷한 기능을 수행하는 메소드를 만들 경우 사용)
overloding(같은 클래스 내에서 같은 기능으로 사용되는 메소드 들의 이름은 같게 하지만 파라미터의 값을 다르게 해 놓은것
* 패키지
개발할 소프트웨어의 규모가 커지게 되면 수백 내지 천개이상의 클래스가 만들어 질때도 있다. 이때 만약 모든 클래스를 한 디렉터리에 위치시키게 되면 소스 코드와 클래를 분리하기가 힘들어 질것이다. 이경우, 여러 디렉터리에 관련된 클래스들을 분류해서 위치시키면 소스코드와 생성된 클래스 파일을 조금 더 효율적으로 관리 할수 있을것이다.
* import
같은 패키지에 포함된 클래스를 사용할떄에는 소스코드에서 클래스 명을 직접 사용하게 된다.
다른 패키지에 소한 클래스를 사용하는 경우에는 클래스의 오나전한 이름을 사용하여야 한다.
javacan.dao.memberdao dao = new javacan.dao.memberdao();

매번 완전한 클래스 이름을 적어주는것은 귀찮은 일인데 import 키워드를 사용하여 클래스 이름을 사용해서 다른 패키지에 있는 클래스를 사용할수 있다.
import javacan.MemberInfo;
import javacan.dao.MemberDao;

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.