<Switch~case문>

대부분 Switch~case문보다는 if문을 더 많이 사용하고 있지만 조건식이 많을 경우에는 if문보다 Switch~case문이 더 용이하다.

기본 문법)

Switch(조건식) {

case 값1 :

// 조건식의 결과와 값1이 같을 경우 수행되는 문장

case 값2 :

// 조건식의 결과와 값3이 같을 경우 수행되는 문장

case 값3 :

// 조건식의 결과와 값3이 같을 경우 수행되는 문장

default :

// 조건식와 위의 결과값들이 모두 같지 않을 경우 수행되는 문장.

}

 

<실습 - 1>



위에서 break문이 하는 일은 break문을 만나는 순간 조건식의 중괄호를 벗어나게 된다.

그렇다면 break문이 없으면 어떻게 될까?

 

-결과-




<실습 - 2>

break문이 없을 경우 결과가 어떻게 나올지 생각해 보자.



6이 나왔을때 그 밑으로 모두 출력되었다. 이렇듯 case문은 자신의 밑으로 쭉 뚫어서 출력하게 된다. break문을 잘 써줘야 한다!

 

-결과-



<실습 - 3>

switch~case문을 이용하여 간단한 계산기를 만들어보자.




LIST

'Programming > Java' 카테고리의 다른 글

Java - Scanner, BufferedReader의 차이점과 개념  (0) 2015.12.05
Java - 배열  (0) 2015.12.05
Java - if문, if ~ else if문  (0) 2015.12.05
Java - 삼항 연산자  (0) 2015.12.05
Java - 변수  (0) 2015.12.05

<if문>

기본 문법)

if (조건식) {

// 조건식이 참일 경우 수행하고 싶은 내용

}

<실습>

숫자를 하나 입력받아서 그 숫자가 2로 나누었을때 나머지가 0일 경우 짝수, 1일경우 홀수를 출력하는 프로그램을 제어문 if를 사용해서 만들어 보았다.



-결과-




<if~else if문>

기본 문법)

if (조건식1) {

// 조건식이 참일 경우 수행하고 싶은 내용

}

else if(조건식2) {

// 조건식 1이 거짓이고 조건식 2가 참일 경우 수행하고 싶은 내용

}

else {

// 조건식 1, 2가 모두 거짓일 경우 수행하고 싶은 내용

}

 

<실습>

앞의 예제와 똑같지만 else if를 사용하기 위해 바꿔보았다.



-결과-



LIST

'Programming > Java' 카테고리의 다른 글

Java - 배열  (0) 2015.12.05
Java - Switch~case문  (0) 2015.12.05
Java - 삼항 연산자  (0) 2015.12.05
Java - 변수  (0) 2015.12.05
Java - println, printf, print로 출력문을 만들어보자.  (0) 2015.12.05

<삼항 연산자란?>

세 개의 피연산자를 필요로 해서 삼항 연산자라 한다.

기본 문법)

(조건식) ? 식1 : 식2

조건식이 참이면 식1을 수행하고, 거짓이면 식2를 수행해라.

 

<실습>

년도를 입력받아서 윤년인지, 평년인지 계산하는 삼항 연산자를 만들어보자.




num%4 == 0 || num%100 != 0 && num%400 == 0 ? "윤년" : "평년";

여기서 (입력받은 숫자가 100의 배수가 아니고 400의 배수인 숫자)이거나 4의 배수인 것을 구하는 것이다.

참이면 윤년, 거짓이면 평년을 출력한다.


-결과-






LIST

<자바에서의 변수란?>

값을 저장할 수 있는 메모리상의 공간을 말한다.

인간이 하드디스크의 구조와 주소체계를 모두 알아서 직접 저장하면 얼마나 좋은가? 아쉽게도 하드디스크의 구조는 매우 어려우므로 인간이 직관적으로 알아들을수 있는 변수라는 것을 만들어서 사용하게 된다.

 

<변수의 선언?>

int num;      // 이것이 num이라는 정수형 변수를 선언한 것이다.

이번에는 초기화도 해보자.

int num1 = 10;      // 이것은 num1이라는 정수형 변수에 10이라는 정수를 저장(대입)한 것이다.

 

변수를 선언할 때 이름 짓는 규칙이 있다.

1. 특수문자는 _ 와 $ 만을 허용

2. 예약어를 사용하면 안된다. (package, public, return, for, null, new 등...)

3. 대소문자가 구분되며, 길이에 제한이 없다

4. 숫자로 시작하면 안된다.

다음과 같은 4가지의 규칙에만 어긋나지 않게 변수이름을 지으면 된다.

 

※ 이번에는 자바프로그래머들 사이에서 약속이 있다. 변수이름을 지을 때 알아듣기 쉽게 정의해놓은 것이다.

1. 여러 단어로 이루어진 이름은 단어의 첫 글자만 대문자로 한다.

2. 클래스 이름의 첫 글자는 대문자로 한다.

3. 상수의 이름은 모두 대문자로, 여러 단어로 이루어진 경우 _ 로 구분한다.

 

<변수의 타입?>

1. 기본형

① boolean(1byte) : 논리형이라고 하는데 한가지 밖에 없다. true아님 false 마치 스위치의 on/off와 비슷하다.

선언)

boolean abc = true;    // abc라는 논리형 변수에 true저장

 

② char(2byte) : 문자형이라고 하는데 java에서는 char이 2바이트이다. 이유는 UniCode체계를 사용하기 때문이다.

선언)

char abc = 'A';    // abc라는 문자형 변수안에 문자 A를 저장

※ 그렇다면 특수문자를 표현할 때는 어떻게 할까?

특수문자

리터럴

tab

\t

backspace

\b

form feed

\f

new line

\n

carriage return

\r

역슬래쉬

\\

작은 따옴표

\'

큰 따옴표

\“

 

<실습 - char>



-결과-



③ byte(1byte), short(2byte), int(4byte), long(8byte),  : 정수형 변수이다. 숫자를 저장할 수 있는 변수이다.

 

<실습 - 정수형 변수>


-결과-


④ float, double : 실수형을 저장할 수 있는 변수이다. 범위는 엄청 크기 때문에 큰 숫자를 저장할 때 혹은 소수점을 나타낼 때 사용된다.

<실습 - 실수형 변수>




이렇게 큰 숫자를 저장할 수 있다. E표기법은 생략하겠다.

그런데 실수형 변수 float을 사용한 a에는 소수점 8자리에서 반올림 하였다. 기본 디폴트가 8자리에서  반올림 하는 것이고, .2이런식으로 소수점을 나타내고 싶은 곳까지 지정할 수 있다. 그리고 float형은 접미사 f를 붙여줘야한다.

 

 

2. 참조형

기본형을 제외한 나머지 타입인데, 객체의 주소를 저장한다.

자 그렇다면, 참조형 변수를 선언해보자.

객체의 주소를 담는다? C언어에서 어떤 변수의 주소는 포인터 변수에 담아봤는데... 그렇다!

거의 비슷한 맥락이다.

기본 문법)

클래스이름 변수명;

Date day = null;   // Date클래스 타입의 참조변수 day가 만들어 진 것이다.(아직 주소가 들어가지 않음) 그리고 그 안에는 null이 저장된다.

Date day = new Date();   // Date 클래스 타입의 참조변수 day에 new의 연산자를 사용하여 객체의 주소를 저장했다. 그럼 day가 갖고 있는 값은 무엇일까? 당연히 Date클래스 타입의 객체 주소이다.


LIST

우선 클래스를 만드는 방법에 대해서 알아보자. 

기본 문법은 이렇다



소스 파일의 이름과 public class의 이름과 항상 동일해야한다. (java의 법칙)

소스 파일은 *.java로 하나가 만들어지는데 *.java안에 클래스가 여러개 들어가있을 경우 *.class는 여러개 만들어진다.

우리는 위의 main메서드 안에 내용을 넣어주면 된다.

 

<실습>

System.out.print는 개행없이 큰 따옴표 ("")안에 있는 문자를 출력한다.

System.out.println는 개행있이 큰 따옴표 ("")안에 있는 문자를 출력한다.

System.out.printf는 JDK1.5버전 이상부터 가능하지만 C언어 기반의 format을 옮겨온것이다. C언어를 하시는 분들은 쉽게 와닿을 것이다. 개행(\n)으로 큰 따옴표 ("")안에 있는 문자를 출력한다.

이것을 이용해 간단히 자바 시작을 알리는 프로그램을 짜보자.



-결과-





LIST

자바는 사람이 구별할 수 있는 언어인 .Java파일을 만든다. .Java파일을 Javac.exe(컴파일러)를 이용해 컴파일해서 .class파일을 생성한다. 그 후, 자바 인터프리터(java.exe) .class을 실행한다.

자바에서 모든 코드들은 클래스 안에 존재해야 하며, 서로 관련된 코드들을 그룹으로 나누너 별도의 클래스를 구성하게 된다.

 

자 그렇다면, 자바를 사용하기 위해 프로젝트를 만들어보자.

 

1. file -> Other로 들어간다



2. Java -> Java Project로 들어간다




3. 이름을 입력하고, JRE버전을 1.7로 바꿔준다.



4. 만들어진 프로젝트에 패키지를 생성해보자.
src -> new -> package를 클릭한다.


5. 패키지를 만들었다. 이번에는 패키지 안에 들어갈 클래스를 만들어 보자.
패키지 명을 com.day1로 했다.
클래스명은 Test1로 해서 만들어보자. 먼저 New -> class를 클릭한다


LIST

1. Java SE (Java Standard Edition)

자바 표준 에디션은 가장 기본이 되는 에디션. 또한, 흔히 자바 언어라고 하는 대부분의 패키지가 포함된 에디션. (Enterprise Edition이 존재해서 기업이나 회사에서는 주로 EE를 사용하지만, 일반 회사나 기업같은 경우 SE를 사용하는 것도 흔히 찾아볼 수 있다)

주요 패키지로는 java.lang.*, java.io.*, java.util.*, java.awt.*, javax.rmi.*,javax.net.* 등이 있다.

 

 

2. Java ME (Java Micro Edition)

자바 마이크로 에디션은 현재는 거의 사장된 에디션. 모바일 기기(피쳐폰, PDA폰) 등에서 사용되는 자바 기술에 대한 API가 포함된 에디션. 한 때는, 우리가 피쳐폰으로 Nat*와 같은 인터넷 서핑을 할 때, 모바일에서 보여지는 자바 기술들에 효과적이었다.

현재는, 스마트 폰이 대중화되고, 각 스마트 폰들이 자체적인 OS를 가지고 있다보니, 자체 API(안드로이드 SDK, iOS SDK)를 사용하게되어, 잘 쓰이지는 않는다.

 

 

3. Java EE (Java Enterprise Edition)

자바 기업형 에디션은 현업에서 사용되는 API들이 집약된 에디션.

자바로 구현되는 웹프로그래밍에서 가장 많이 사용되는 JSP, Servlet을 비롯하여, 데이터베이스에 연동하는 JDBC, 그 외에도 JNDI, JTA, EJB 등의 많은 기술들이 포함되어 있다.

 

 

Java SE Java EE가 툴은 동일한 툴을 사용하되, Java EE Java SE의 API에 추가로 Java EE API를 import하여야만 사용하실 수 있다.

설명서같은게 조금 추가되고 광범위 프로젝트에 주로 EE가 사용됨.

 

실행해도 같고, 아이콘도 같다는 것은 맞는 말이다. Java SE Java EE나 모두 bin 디렉토리 안의 같은java.exe, javac.exe를 사용하기 때문이다.

 

차이점은 앞서 설명드린 API (lib 디렉토리에 포함되어 있는 JAR파일들)의 차이다.



LIST

<Java컴파일러 설치>

1. www.oracle.com 접속

 

 

2. Downloads 클릭




3. Java EE 혹은 Java SE 클릭




4. 자신의 컴퓨터가 32bit인지 64bit인지 확인하여 다운로드 할 것.





<이클립스 설치>

1. www.eclipse.org 접속

2. Downloads 클릭




3. Older version 클릭






4. Helios, Indigo, Juno 셋 중의 상위단의 버전을 다운받는다.

웬만하면 오류가 발생하지 않는 SR2를 사용하도록 하자.



5. 자신의 컴퓨터가 32bit인지 64bit인지 확인하여 다운로드 할 것. 


LIST

<해싱(hashing)>


산술적인 연산을 이용하여 키가 있는 위치를 계산하여 바로 찾아가는 계산 검색 방식이다.


[검색 방법]
키 값에 대해서 해싱 함수를 계산하여 주소를 구하고, 구한 주소에 해당하는 해시 테이블로 바로 이동한다. 해당 주소에 찾는 항목이 있으면 검색 성공, 없으면 검색 실패


[해싱 함수(hashing function)]
키 값을 원소의 위치로 변환하는 함수 

[해시 테이블(hash table)]
해싱 함수에 의해서 계산된 주소의 위치에 항목을 저장한 표

데이터를 담을 그룻(테이블)을 미리 크게 확보해 놓은 후 입력받은 데이터를 해시하여 테이블 내의 주소를 계산하고 이 주소에 데이터를 담는 것을 말하며 , 해쉬 테이블은 여유공간이 많아야 충분한 제 성능을 발휘할 수 있다.



[용어]

1. 충돌(collision)
- 서로 다른 키 값에 대해서 해싱 함수에 의해 주어진 버킷 주소를 같은 경우
- 충돌이 발생한 경우에 비어있는 슬롯에 동거자 관계로 키 값 저장 

2. 동거자 (synonym)
- 서로 다른 키 값을 가지지만 해싱 함수에 의해서 같은 버킷에 저장된 키 값들 

3. 오버플로우
- 버킷에 비어있는 슬롯이 없는 포화 버킷 상태에서 충돌이 발생하여 해당 버킷에 키 값을 저장할 수 없는 상태



<해싱 함수 종류>

1. 제산 함수

나머지 연산자 mod를 사용하는 방법으로서 키값k를 해시 테이블의 크기 M으로 나눈 나머지를 해시 주소로 사용한다.

h(k) = k mod M

2. 승산 함수

곱하기 연산을 사용하는 방법인데, 키 값k와 정해진 실수 a를 곱한 결과에서 소수점 이하 부분만을 테이블의 크기 M과 곱하여 그 정수값을 주소로 사용한다.

3. 접지 함수

키의 비트수가 해시 테이블 인덱스의 비트수보다 큰 경우에 주로 사용하는 방법이다. 키값 k가 있을 때 해시 테이블 인덱스의 비트수와 같은 크기로 분할한 후 분할된 부분을 모두 더하여 해시 주소를 만든다.

 이동 접지 함수
각 분할 부분을 이동시켜서 오른쪽 끝자리가 일치하도록 맞추고 더하는 방법
예) 해시 테이블 인덱스가 3자리이고 키 값 k가 123 123 123 12인 경우



② 경계 접지 함수
분할된 각 경계를 기준으로 접으면서 서로 마주보도록 배치하고 더하는 방법
예) 해시 테이블 인덱스가 3자리이고 키 값 k가 123 123 123 12인 경우





Copyrightⓒ2014 By 한빛아카데미(주)

LIST

<색인 순차 검색(index sequential search)>

정렬되어있는 자료에 대한 인덱스 테이블(index table)을 추가로 사용하여 탐색 효율을 높인 검색 방법이다. 

[인덱스 테이블]
배열에 정렬되어있는 자료 중에서 일정한 간격으로 떨어져있는 원소들을 저장한 테이블이다. 자료가 저장되어있는 배열의 크기가 n이고 인덱스 테이블의 크기가 m일 때, 배열에서 n/m간격으로 떨어져있는 원소와 그의 인덱스를 인덱스 테이블에 저장한다. 

[검색 방법]
indexTable[i].key ≤ key < indexTable[i+1].key를 만족하는 i를 찾아서 배열의 어느 범위에 있는지를 먼저 알아낸 후에 해당 범위에 대해서만 순차 검색 수행

 

예)

검색 대상 자료 : {1, 2, 8, 9, 11, 19, 29}
크기가 3인 인덱스 테이블 작성
인덱스 테이블에서 먼저 탐색키를 검색하여 검색 범위를 확인하고, 해당 범위에 대해서만 순차 검색 실행



[코드]






Copyrightⓒ2014 By 한빛아카데미(주)


LIST

'Programming > Data Structure' 카테고리의 다른 글

해싱(hashing)  (0) 2015.12.04
순차 검색(sequential search, 선형 검색(linear search)  (0) 2015.12.04
합병 정렬(Merge Sort)  (0) 2015.12.04
삽입 정렬(insert sort)  (0) 2015.12.04
퀵 정렬(quick sort)  (0) 2015.12.04

+ Recent posts