<2차원 배열>

2차원 배열의 선언방법은 int[][] num = new int[][]이고, 요소 값을 넣는 방법은 1차원 배열과 똑같다.

예를 들어 int[][] num = new int[][] { {100,100,100}, {10,10,10}, {20,20,20}, {30,30,30}, {40,40,40}};

이렇게 2차원 배열의 요소를 정의했다고 가정하자.

그럼 num이라는 참조형 변수안에는 배열의 주소가 저장될 것이다.



위 배열의 메모리 공간을 도식화해서 그리면 이렇게 된다.

num이라는 변수안에는 1차원적으로 각 주소들이 나열되어 있는 1차원 배열의 주소를 저장하고 있고, 각 요소들은 1차원 int형 정수의 값을 갖고 있는 배열의 주소를 가리키고 있다.

이렇게 해서 1차원의 1차원해서 2차원이라고 부르는 것이다.

사람들이 이러한 2차원 배열을 바둑판 형식으로 그리는데 원래는 잘못된 것이다...

각 배열의 요소를 배열명을 사용해 나열하면

num[0][0]==100 num[0][1]==100 num[0][2]==100

num[1][0]==10  num[1][1]==10   num[1][2]==10

num[2][0]==20  num[2][1]==20   num[2][2]==20

num[3][0]==30  num[3][1]==30   num[3][2]==30

num[4][0]==40  num[4][1]==40   num[4][2]==40

 

<실습 - 1>



-결과-



<실습 - 2>


-결과-




LIST

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

Java - while문, do~while문  (0) 2015.12.06
Java - for문  (0) 2015.12.06
Java - Scanner, BufferedReader의 차이점과 개념  (0) 2015.12.05
Java - 배열  (0) 2015.12.05
Java - Switch~case문  (0) 2015.12.05

<Scanner>

자바에서는 입력받는 방법이 여러가지이다. 지금까지 우리가 사용했던 방식은 BufferedReader라는 클래스를 사용하는 것이고, 이번에는 Scanner라는 클래스를 사용하는 방법을 알아보겠다.

 

BufferedReader 장점은 단순한 구조라는 것이다.BufferedReader의 사용 메소드는 read(int형)와 readLine(String) 두 개가 전부다. 반면에 Scanner는 만능이다. Scanner는 단순히 읽어들이기만 하는 것이 아니라 parsing과 tokenizing을 할 수가 있다. 그렇기 때문에 지원하는 메소드가 상당히 많다.

BufferedReader는 String으로 출력하여 원하는 숫자나 문자로 parsing을 해줘야한다.(받아서 일일히 쪼개야 함)

Scanner는 메소드에 nextInt(), nextDouble(), nextLine()등 각자의 자료형에 따라서 선택해서 할 수 있다.

예들 들어 nexInt() - int형, nextDouble() - double형, next() - String()형 등을 사용하면 된다.

 

<실습>


위의 코드에서 보면 알겠지만 BufferedReader처럼 따로 int형으로 파싱을 안해줘도 된다.


-결과-


Scanner는 토큰을 제어할 수 있다. BufferedReader는 space bar 혹은 특수문자를 모두 문자열로 입력받아 출력하는데 Scanner는 이러한 것들을 구분자로 구분지어서 따로 입력받을 수 있다.



<실습>

코드를 보면 Scanner의 메소드인 useDelimiter를 사용하여 토큰구분자 ,(콤마)로 입력 받을때 구분지을 수 있게 하였다.



-결과-


LIST

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

Java - for문  (0) 2015.12.06
Java - 2차원 배열  (0) 2015.12.06
Java - 배열  (0) 2015.12.05
Java - Switch~case문  (0) 2015.12.05
Java - if문, if ~ else if문  (0) 2015.12.05

<배열이란?>

같은 타입의 여러 변수를 하나의 묶음으로 다루는 것을 배열이라 한다.

예를 들어 숫자 다섯개를 저장하고 싶은 변수를 만들고 싶을때,

int num1, num2, num3, num4, num5;이렇게 선언후 각각 변수에 저장하면 된다.

이럴 경우 변수의 개수가 많아지면 불편하므로 이것을 배열로 선언해준다.

int [] num = new int[5];

int [] num : 이 부분은 배열을 선언한 것이다.

new int[5] : 이 부분이 배열을 생성한 것이다.

종합적으로 설명하면 배열을 선언하여 배열의 주소를 저장할 수 있는 num을 만들어 new int[5]으로 변수 5개를 만드는 배열을 생성한 후, 이 시작주소를 num에 저장한다.

이상하지 않는가? C언어에서의 배열과는 전혀 다르다... java에서는 배열자체도 객체로 생성되어 관리 된다. 그러므로 배열의 길이나 크기를 알 수 있는 다양한 메소드도 사용할 수 있다. (나중에 실습에서 확인하자)

지금 num 배열은 모두 0으로 초기화가 되어있다.

 

배열의 초기화 방법 1)

num[0] = 10;

num[1] = 20;

num[2] = 30;

... 이런식으로 초기화 해주면 된다.

 

배열의 초기화 방법 2)

int[] num = {10, 20, 30};

 

배열의 초기화 방법 3)

int[] num = new int[] {10, 20, 30};

 

<실습 1>

숫자 5개를 배열로 입력받아 for문으로 간단하게 합계와 평균을 구하였다.

이때 배열의 메소드 num.length를 사용해 간단하게 배열의 길이를 구하였다.



-결과-



<실습 2 - 버블 정렬>

버블정렬 기법을 통해 배열로 숫자를 나열한 후, 크기순으로 정렬하는 코드를 짜보자.



-결과-


LIST

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

Java - 2차원 배열  (0) 2015.12.06
Java - Scanner, BufferedReader의 차이점과 개념  (0) 2015.12.05
Java - Switch~case문  (0) 2015.12.05
Java - if문, if ~ else if문  (0) 2015.12.05
Java - 삼항 연산자  (0) 2015.12.05

<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

+ Recent posts