반복문

  • 어떤 작업이 반복적으로 수행되도록 할 때 사용되는 구문

반복문의 종류

  • for문: 주로 반복횟수를 알고 있을 때 사용
  • 향상된 for문: 컬렉션과 배열을 처리할 때 더 효과적인 문법으로 JDK5.0 이후에 사용 가능
  • while문: 조건식으로 반복할 때 주로 사용
  • do-while문: 반복하기 전에 먼저 실행해야 하는 구문이 있을 때 사용

for문

  • for문 선언 형식
  • for( 초기식; 조건식; 증감식) {
      // 명령코딩
    }
    
  • 예제: 1부터 10까지의 합
  • public class ExFor {
    	public static void main (String[] args)
    	{
    		int i , sum = 0;   
            for ( i=1 ; i<=10 ;  i++) {
            	System.out.printf(i==10?"%d":"%d+",i);
    			sum+= i;    
    		}
            System.out.println("="+sum);
    	}
    }
    
    1+2+3+4+5+6+7+8+9+10=55
    

향상된 for문

  • 향상된 for문 선언 형식
  • for( 자료형  변수명 : 배열 또는 컬렉션 ) {
     // 명령코딩
    }
    
  • 예제: 배열에 담긴 국어 점수 출력
  • public class ExEnhancedFor
    {
    	public static void main (String[] args)
    	{
    		int [] kors = new int[5];
    		kors[0] = 100;
    		kors[1] = 90;
    		kors[2] = 77;
    		kors[3] = 23;
    		kors[4] = 88;
    		
    		for (int kor : kors) {
    			System.out.println(kor);
    		}
    	}
    }
    
    100
    90
    77
    23
    88
    

while문

  • while문 선언 형식
  • while( 조건식 ) {
     // 조건식이 참일 동안 반복될 명령 코딩
    }
    
  • 예제: 10부터 0까지의 합
  • public class ExWhile
    {
    	public static void main (String[] args)
    	{
    		int i = 10 , sum = 0;
    		while( i >= 0 ){
    			System.out.printf(i==0?"%d":"%d+",i);
    			sum += i; 
    			i--;
    		}
    		System.out.println("="+sum); 
    	}
    }
    
    10+9+8+7+6+5+4+3+2+1+0=55
    

do-while문

  • do-while문 선언 형식
  • do{
    // 먼저 한번 실행하고, 조건식이 참일 동안 반복할 명령 코딩
    }while( 조건식 );
    
  • 예제: 증가치에 따라 증가하는 항 값의 누적 합
  • public class ExDoWhile
    {
    	public static void main (String[] args) throws java.lang.Exception
    	{
    		int h = 1; // n 항의 누적 합
    		int n = 1; // 각 항: [1]+[2]+[4]+[7]+[11]+[16]+[22]
    		int k = 0; // 증가치:   1   2   3   4    5    6
     
    		do{
    			k+=1;
    			n += k;
    			if( n > 100) break;
    			h += n; // (누적)
    			System.out.printf("%d - %d - %d\n",n,k,h);
    		}while(true);	
    	}
    }
    
    2 - 1 - 3
    4 - 2 - 7
    7 - 3 - 14
    11 - 4 - 25
    16 - 5 - 41
    22 - 6 - 63
    29 - 7 - 92
    37 - 8 - 129
    46 - 9 - 175
    56 - 10 - 231
    67 - 11 - 298
    79 - 12 - 377
    92 - 13 - 469
    

제어문(Control Flow Statement)

  • 제어문이란, 프로그램 실행 흐름을 개발자가 원하는 방향으로 바꿀 수 있도록 해주는 것이다.
  • 일반적으로 조건식과 실행 구문인 중괄호(블록, { })으로 구성되어 있다.

제어문의 종류

  • 조건문(decision-making statements): if문, switch문
  • 반복문(looping statements): for문, while문
  • 분기문(branching statements): break, continue, return

조건문-if문

  • 조건식의 결과에 따라 블록 실행여부가 결정
  • 조건식에는 boolean 변수 또는 true/false 값을 산출하는 연산식
  • 조건식이 true이면 블록 실행, false이면 실행하지 않음

if문 종류

  • if문
  • if(조건식) {
    
     // 조건식이 참일 경우 실행 구문
    
    }
    
    • 조건식의 결과에 따라 블록 실행여부가 결정
    • 조건식에는 boolean 변수 또는 true/false 값을 산출하는 연산식
    • 조건식이 true이면 블록 실행, false이면 실행하지 않음
  • if-else문
  • if(조건식) {
    
     // 조건식이 참일 경우 실행 구문
    
    }else {
    
     // if문의 조건식이 거짓일 경우 실행 구문
    
    }
    
    • if문이 false일 경우 else 문으로 넘어감
    • 조건식의 결과에 따라 이 두 개의 블록 중 한 블록만 실행 후 if문을 벗어남
  • if-else if-else문
  • if(조건식A) {
    
     // 조건식A가 참일 경우 실행 구문
    
    } else if(조건식B) {
    
    // 조건식A가 거짓이고, 조건식B가 참일 경우 실행 구문
    
    } else if(조건식C) {
    
    // 조건식A, B가 거짓이고, 조건식C가 참일 경우 실행 구문
    
    } else {
    
    // 모든 조건식이 거짓일 경우 실행 구문
    
    }
    
    • 조건문이 여러 개인 다중 if문
    • if 블록 끝에 else if문을 통해 false 일 경우 계속 다음 else if 문으로 넘어감
    • else if문의 수는 제한이 없다
    • 여러 개의 조건식 중 true가 되는 블록만 실행하고 전체 if문을 벗어남
  • 중첩 if문
  • if(조건식 A) {
         // 조건식 A가 참일 경우 실행 구문
         if(조건식 B) {
                    // 조건식 A와 B가 참일 경우 실행 구문
         }
    }
    
    • if문 블록 내에 또 다른 if문을 사용하는 것
    • 중첩의 단계는 제한이 없어 실행흐름을 잘 판단하여 작성
  • 참고: Oracle JAVA Documentation에서는 if-then (=if)문과 if-then-else(if-else문과 if-else if-else문)문 두개로 나눈다. (여기서는 if-else문 설명을 위해 좀더 자세히 분류했다.)

switch문

  • if문과 달리 변수가 어떤 값을 갖느냐에 따라 실행문이 선택
  • if문의 경우의 수가 많아질 수록 switch 문을 사용하는 것이 효과적
  • 괄호 안의 동일한 값을 갖는 case로 가서 실행문을 실행
  • 동일한 값의 case가 없으면 default로 가서 실행문 실행(생략 가능)
  • 변수 값에 따라 case가 실행된 후 제어문을 빠져나가기 위해 break; 사용

형식

switch(변수) {
	case 값1:
		실행문;
		break;
	case 값2:
		실행문;
		break;
	default: // 생략 가능
		실행문;
		break;
}

변수

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

변수의 선언

  • 타입 변수이름;
  • 타입은 변수에 저장되는 값의 종류와 범위를 결정지으므로 어떤 값을 변수에 저장할지 생각한 후 타입을 결정해야 한다.
  • 변수 이름은 메모리 주소에 붙여진 이름이다.
  • 프로그램은 변수 이름을 통해 메모리 주소에 접근하고, 그곳에 값을 저장하거나 그곳에 값을 읽는다.
  • 변수 이름은 자바 언어에서 정한 명명규칙을 사용해야 하며, 예약어는 사용할 수 없다.
  • 개발자는 변수 이름을 보고, 변수가 어떤 값을 저장하고 있는지 쉽게 알 수 있도록 의미 잇는 변수 이름을 지어주는 것이 좋다.
 int age; // 정수값을 저장할 수 있는 age 변수 선언
double value; // 실수값을 저장할 수 있는 value 변수 선언


변수 명명 규칙

작성 규칙

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

가능: price, $price, _companyName

불가: 1v, @speed, $#value

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

firstname firstName 다른 변수

문자는 영어 소문자로 시작하되, 다른 단어가 붙을 경우 문자를 대문자로 한다

maxSpeed, firstName, carBodyColor

문자 (길이) 제한은 없다

 

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

 



자바 예약어

분류

예약어

기본 데이터 타입

boolean, byte, char, short, int, long, float, double

접근 지정자

private, protected, public

클래스와 관련된

class, abstract, interface, extends, implements, enum

객체와 관련된

new, instanceof, this, super, null

메소드와 관련된

void, return

제어문과 관련된

if, else, switch, case, default, for, do, while, break, continue

논리값

true, false

예외 처리와 관련된

try, catch, finally, throw, throws

기타

transient, volatile, package, import, synchronized, native, final, static, strictfp, assert



변수의 범위

  • 변수는 선언된 { } (블록) 안에서만 사용 가능하다.
  • 클래스 블록안에 바로 선언된 변수를 전역 변수라고 한다.
  • 메소드(함수) 내에 선언된 변수를 지역 변수(local variable)
  • 변수는 선언된 블록 안에서만 사용 할 수 있다.
  • 엄밀히 말하면, 전역 변수는 인스턴스 변수와 클래스 변수로 구분할 수 있는데, 이는 추후 클래스를 다룰 때 더 자세히 설명하겠다.

비트 연산자

  • 0과 1로 표현이 가능한 정수타입만 비트 연산이 가능하다.

  • 피연산자를 int 형으로 자동 형변환

비트 반전 연산자(~), 틸드 연산자

  • 정수 타입의 피연산자에만 사용
  • 피연연사즐 2진수로 표현했을 때 비트값인 0을 1로, 1은 0으로 반전
  • 부호가 반대인 새로운 값이 산출됨

비트 논리 연산자(&, |, ^)

  • 비트논리 AND 연산자(&): 두 비트 모두 1일 경우에만 연산 결과가 1
  • 비트논리 OR 연산자(|): 두 비트 중 하나라도 1이면 연산 결과 1
  • 비트논리 XOR 연산자(^): 두 비트 중 하나는 1이고 다른 하나가 0일 경우 연산 결과는 1

비트 이동 연산자(<<, >>, >>>), 쉬프트 연산자

  • a << b: 정수 a의 각 비트를 b만큼 왼쪽으로 이동(빈자리는 0으로 채워짐)
  • a >> b: 정수 a의 각 비트를 b만큼 오른쪽으로 이동(빈자리는 정수 a의 최상위 부호 비트와 같은 값으로 채워짐)
  • a>>>b: 정수 a의 각 비트를 b만큼 오른쪽으로 이동(빈자리는 0으로 채워짐)





연산 관련 개념

  • 연산(Operation): 프로그램에서 데이터를 처리하여 결과를 산출하는 것

  • 연산자(Operator): 연산에 사용되는 표시나 기호

  • 피연산자(Operand): 연산되는 데이터
  • 연산식(Expressions): 연산자와 피연산자를 이용하여 연산의 과정을 기술한 것

연산자 정리표

연산자 종류

연산자

피연산자

산출값

기능 설명

산술

+, -, *, /, %

이항

숫자

사칙연산 나머지 계산

부호

+, -

단항

숫자

음수와 양수의 부호

문자열

+

이항

문자열

문자열을 연결

대입

=, +=, -=, *=, /=, %=,

&=, ^=, |=, <<==, >>==, >>>==

이항

다양

우변의 값을 좌변의 변수에 대입

증감

++, --

단항

숫자

1만큼 증가/감소

비교

==, !=, >, <, >=, <=,

instanceof

이항

boolean

값의 비교

논리

!, &, |, &&, ||

단항

이항

boolean

논리적 NOT, AND, OR 연산

조건

(조건식) ? A : B

삼항

다양

조건식에 따라 A또는 B 하나를 선택

비트

~, &, |, ^

단항

이항

숫자

boolean

비트 NOT, AND, OR, XOR 연산

쉬프트

>>, <<, >>>

이항

숫자

비트를 좌측/우측으로 밀어서 이동


연산의 방향과 우선순위

연산자

연산방향

우선순위

증감(++,--), 부호(+,-), 비트(~), 논리(!)

높음

산술(*,/,%)

 

산술(+,-)

 

쉬프트(<<, >>, >>>)

 

비교(<, >, <=, >=, instanceof)

 

비교(==, !=)

 

논리(&)

 

논리(^)

 

논리(|)

 

논리(&&)

 

논리(||)

 

조건(?:)

 

대입(=, +=, -=, &=, /=, %=, &=, ^=, |=, <<=, >>=, >>>=)

낮음


증감 연산자( ++ , -- )

  • 전위형: 피연산자 앞에 위치, 다른 연산보다 증감 먼저 수행 ( int i = 0; ++i )
  • 후위형: 피연산자 뒤에 위치, 다른 연산 수행 후 증감 실행 ( int j = 0; j++; )

논리 연산자( &&, ||, &, |, ^, !)

  • 일반논리AND연산자, 논리곱(&&): 피연산자 모두 true일 경우 연산 결과 true
  • 일반논리OR연산자, 논리합(||): 피연산자 중 하나만 true이면 연산 결과는 true
  • 배타적 논리합(^): 피연산자가 하나는 true이고 다른 하나가 false일 경우에만 연산 결과 true

논리 부정 연산자(!), (=not 연산자)

  • 참 또는 거짓을 부정한다.
  • !true → false
  • !false → true

덧셈연산자(+) / 문자열 연결 연산자(+) 비교

  • print( 4 + 5 ) => 정수 + 정수 => 9 // 덧셈연산자로 더하기 연산 수행
  • print( "4" + 5 ) => 문자열 + 정수 => "45" (문자열) // 문자열 연결 연산자로 4와 5 문자열을 연결
  • print( "4" + "5") => 문자열 + 문자열 => "45"(문자열) // 문자열 연결 연산자로 4와 5 문자열을 연결

0으로 나누기 또는 나머지 연산을 수행할 수 없음(오류 발생)

  • 실수를 0으로 나누면 무한대(Infinity) 결과값
  • 실수를 0으로 나머지 구하기 하면 NaN(Not a Number)결과값

조건연산자

  • 형식 => 항1 : 항2 : 항3;
  • 항1이 참이면 결과값은 항2
  • 항1이 거짓이면 결과값은 항3


자료형

  • 자바의 자료형은 크게 두 가지로 구분된다.

  • 첫째, 기본 자료형(Primitive Data Type)이다.

  • 둘째, 참조 자료형(Referenced Data Type)이다.
  • Wrapper Class : 기본자료형을 참조형 클래스로 만들어 놓은 클래스로, Object 클래스의 Number 클래스에 속한다. 모든 데이터를 단일 하게 일괄 관리하기 위해 Wrapper 클래스를 사용한다. 나중에 자세히 다룰 예정이니 지금은 참고만 하자.

자료형

명칭

크기

기본값

범위

Wrapper Class

논리

boolean

1byte

false

true, false

Boolean

문자

char

1byte

2byte

\u0000,

null

0~127,

0~65535

Character

정수

byte

1byte

0

-128~127

Byte

 

short

2byte

0

-32,768~32,767

Short

 

int

4byte

0

-2,147,483,658~2,147,483,647

Integer

 

long

8byte

0

-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

Long

실수

float

4byte

0.0

-3.4 * 1038 ~ 3.4 * 1038

Float

 

double

8byte

0.0

-1.7 * 10308 ~ 1.7 * 10308

Double

문자열

String

Resizable

null

Resizable

참조자료형


        * 정수형은 int, 실수형은 double이 기본 자료형이다.

기본 자료형(Primitive Data Type)

  • 숫자(정수, 실수)와 문자인 char 자료형과 논리형으로 구성되어 있다.
  • 스택 영역에 생성되고 실제 값을 변수에 저장한다.
  • 실수 자료형이 정수형보다 크다.
  • float 자료형의 값에는 F(또는 f) 접미사를 붙여야 한다.예) 3.14f, 3.14F
  • double 자료형도 명시할 경우 D(또는 d) 접미사를 붙일 수 있으나, 기본 실수형이므로 생략 가능하다.
  • long 자료형 값에는 L(또는 l) 접미사를 붙여야 하나, 정수형 중에 가장 큰 자료형이므로 자동 형변환이 되어 생략 가능하다.

참조 자료형(Referenced Data Type)

  • 객체(Object)의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스 타입이 있다.
  • 메모리의 번지(주소)를 값으로 갖는다.
  • 참조 변수는 스택(Stack)영역에 생성되고 객체의 값을 가진 힙 영역의 주소가 저장된다.
  • null 값을 가지면 주소를 참조하는게 아니라 null 값을 가지는 것, 힙 영역에 참조할 값들은 쓰레기(Garbage)가 되어 Garbage Collector가 처리하여 메모리를 확보한다.
  • 선언

자료형 변수명(참조변수명) = new 초기화;

예) 

int x = 3; double pi = 3.14; // 정수와 실수형 변수를 선언하고 값을 대입하여 초기화.

int x = getNumber(); // 정수형을 반환하는 임의의 함수인 getNumber()로부터 값을 받아 대입하여 초기화.

x = 4; // 스택 영역에 생성되어 있는 x의 값에 새로운 값인 4를 대입

Date today = new Date(); // Date 참조 자료형의 객체인 today 변수 선언 후, new 연산자로 Date() 객체로 초기화.

* new 연산자 = 참조타입의 값을 힙(heap)메모리에 생성




클래스 선언 형식

[접근지정자][기타제어자] class 클래스명 [extends Super클래스][implements 인터페이스…]
{
    클래스 내용
}

  • 클래스는 객체를 표현한다.

  • [ ]: 생략 가능

  • 접근지정자(접근제한자): public, protected, default(기본), private     

  • { }: 클래스/메소드/생성자의 내용이 들어가는 블록이다. 빈 내용이더라도 블록은 꼭 써야 한다.
  • 기타제어자: static, final, abstract, native, transient, synchronized, volatile, strictfp 등

주의사항

  • 클래스명은 반드시 대문자로 시작
  • 자바언어는 대소문자 구별
  • 하드코딩(개발도구를 사용하지 않는 코딩) 시, 저장 확장자명을 .java로 할 것


생성자 선언 형식

[접근지정자]class 클래스명(파라미터) 

    생성자 내용
}

  • 선언한 Class가 실제로 생성될 때 실행되는 작업을 기술하는 공간이다.

  • [ ]: 생략 가능

  • 접근지정자(접근제한자): public, protected, default(기본), private     

  • { }: 클래스/메소드/생성자의 내용이 들어가는 블록이다. 빈 내용이더라도 블록은 꼭 써야 한다.
  • 파라미터: 생성자를 통해 클래스를 생성할 때 사용되는 인자값을 받아오는 변수 선언 부

주의사항

  • 생성자는 클래스명과 동일해야 한다.
  • { } 블록 안의 내용이 빈 공간인 것은 기본생성자이다. 그리고 기본 생성자는 생략 할 수 있다. 자바 컴파일러가 자동으로 생성한다.

함수 선언 형식

[접근제한자] [기타제어자] 리턴자료형 함수명([파라미터]) 

    [return 리턴값;]
}

  • 반복되어지는 코딩을 함수로 만들면 코드의 중복이 줄어든다.

  • 함수를 사용하면 구조적 프로그래밍이 가능하다.

  • 함수를 만들기 전에 생각해야할 3가지: 기능, 매개변수(파라미터), 리턴값(리턴자료형)

함수를 호출하는 방법

  • Call by Name: 파라미터 없이 함수명으로만 호출, 예) swap();
  • Call by Value: 파라미터에 값을 주고 호출, 예) swap(30);
  • Call by Reference: 파라미터에 참조 변수 값을 주고 호출, 예) swap(참조변수);
  • Call by Point: 포인트 주소값으로 호출(C언어에서 사용)

메인 함수 선언 형식

public static void main(String[] args)
{
// 실행 내용
}
  • 클래스를 만들고 실제로 실행하기 위해서는 메인(main) 함수가 필요하다.

  • 운영체제로부터 메모리를 할당 받아 프로그램을 실행하는 시작 지점이다.

  • 꼭 암기하자!!


자바는 객체지향 프로그래밍 언어이다. 본격적인 자바 소개에 앞서 프로그래밍 언어에 대해 알아보자.



프로그래밍 언어란?

  • 컴퓨터가 이해할 수 있는 언어는 0과 1로 이루어진 이진 코드(binary code)의 기계어(machine language)이다.

  • 그래서 사람과 컴퓨터가 대화하기 위해서는 사람의 언어와 기계어의 다리 역할을 하는 프로그래밍 언어(programming language)가 필요하다.

  • 프로그래밍 언어는 고급 언어와 저급 언어로 분류 할 수 있다.

고급언어

  • 고급 언어는 컴퓨터와 대화할 수 있는 언어 중에서 사람이 쉽게 이해할 수 있는 언어를 말한다.
  • 즉, 사용자 입장에서의 언어로써 우리가 일반적으로 프로그래밍 언어라고 부르는 C, C++, Java 등이 대표적인 예이다.
  • 고급 언어로 작성된 소스(source)는 컴퓨터가 바로 이해할 수 없기 때문에(기계어가 아니므로), 컴파일(compile) 과정을 통해서 컴퓨터가 이해할 수 있는 기계어로 변환해줘야 컴퓨터가 사용할 수 있다.

  • 컴파일 해주는 것을 컴파일러(compiler)라고 하며, 자바에서는 javac.exe가 담당한다.

  • 우리가 흔히 말하는 프로그램(program)이란 컴퓨터에서 특정 목적을 수행하기 위해 프로그래밍 언어로 작성된 소스를 기계어로 번역한 것을 말한다.

저급언어

  • 저급 언어는 기계어에 가까운 언어로, 어셈블리어가 대표적인 저급 언어이다.
  • 사람이 이해하기 어려워서 배우기 매우 까다롭다.

자바의 역사

  • 자바는 1991년에 썬 마이크로시스템즈(Sun Microsystems)사에서 제임스 고슬링(James Gosling)이 다른 연구원들과 함께 고안한 오크(Oak)라는 언어에서 시작되었다.

  • 오크는 처음에 가전제품에서 사용될 목적이었으나, 인터넷의 등장과 함께 인터넷에서 실행되는 프로그래밍 언어로 사용되었고, 이름을 자바로 변경하였다.

  • 1995년에 자바 1.0을 발표하였고, "Write Once, Run Anywhere"(한번 쓰고 어느 곳에서도 실행)를 약속하였다.

  • 1995년~1999년까지는 윈도우 프로그램 개발이 주류여서 C++언어에 비해 자바는 열세였다. 또, 메모리 및 CPU를 지나치게 많이 사용한다는 문제점이 있었다.

  • 하지만, 1999년도부터 인터넷이 활성화되면서 웹 애플리케이션 구축을 위해 자바 활성화되었다. 단 한번 작성으로 모든 곳에서 실행 가능한 언어는 자바뿐이었기 때문이다.


자바의 특징

자바는 이식성이 높은 언어이다.

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

  • 예를 들면 윈도우 운영체제에서 실행하는 프로그램을 리눅스 또는 유닉스에서 실행할 수 있으면 이식성이 높은 것이다.

  • 자바는 자바 실행 환경(JRE:Java Runtime Environment)이 설치되어 있는 모든 운영체제에서 실행 가능하다.

자바는 객체 지향 언어이다.

  • 프로그램을 개발하는 기법으로 부품에 해당하는 객체들을 먼저 만들고, 이것들을 하나씩 조립 및 연결해서 전체 프로그램을 완성하는 것을 객체 지향 프로그래밍(OOP, Object Oriented Programming)이라고 한다.

  • 객체 지향 프로그래밍에 사용되는 언어를 객체 지향 언어라고 한다.
  • 자바는 객체를 만들기 위해 설계도인 클래스를 작성하고, 객체와 객체를 연결하여 목적에 맞는 프로그램을 만들어 낸다.
  • 자바는 객체 지향 언어의 특징인 캡슐화, 상속성, 다형성을 완벽하게 지원한다.

자바는 함수적 코딩 스타일을 지원한다.

  • 객체 지향 프로그래밍 이전에 Lisp 또는 Scheme와 같은 함수적 프로그래밍 언어들이 있었지만 큰 호응을 얻지 못했다.
  • 최근에 대용량 데이터 병렬 처리와 이벤트 지향 프로그래밍을 위해 함수적 프로그래밍이 다시 부각되고 있다.
  • 자바는 자바 8부터 람다식(Lambda Expressions)을 지원하여 함수적 프로그래밍을 지원한다.

  • 람다식을 사용하면 컬렉션의 요소를 필터링, 매핑, 집계 처리하는데 쉬워지고, 코드가 매우 간결해진다.

자바는 메모리를 자동으로 관리한다.

  • C++은 메모리에 생성된 객체를 제거하기 위해 개발자가 직접 코드를 작성해야 한다. 만약 이 작업을 성실하게 해주지 않으면, 프로그램은 불완전해지고 갑자기 다운되는 현상을 겪게 된다.

  • 자바는 개발자가 직접 메모리에 접근할 수 없도록 설계되었으며,. 메모리는 자바가 직접 관리한다.
  • 객체 생성 시 자동으로 메모리 영역을 찾아서 할당하고, 사용이 완료되면 쓰레기 수집기(Garbage Collector)를 실행시켜 자동으로 사용하지 않는 객체를 제거한다.

  • 자바 개발자는 메모리 관리의 수고를 덜고, 핵심 기능 코드 작성에 집중할 수 있다.

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

  • 자바는 다양한 운영체제에서 실행되는 프로그램을 개발할 수 있다.
  • 또, 단순한 콘솔 프로그램에서부터 클라이언트용 윈도우 애플리케이션, 서버용 웹 애플리케이션, 그리고 모바일용 안드로이드 앱 등 거의 모든 곳에서 실행되는 프로그램을 개발 할 수 있다.

  • 자바는 다양한 운영체제에서 사용할 수 있는 개발 도구와 API를 묶어 에디션(Edition) 형태로 정의하고 있다.

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

  • 운영체제에 따라서 멀티 스레드를 구현하는 방법이 다르지만, 자바는 스레드 생성 및 제어와 관련된 라이브러리 API를 제공하므로 운영체제에 상관 없이 멀티 쓰레드를 쉽게 구현할 수 있다.

동적 로딩(Dynamic Loading)을 지원한다.

  • 자바 애플리케이션은 클래스로부터 생성 된 여러 개의 객체가 서로 연결되어 실행된다.

  • 애플리케이션 실행 시 모든 객체가 생성되지 않고, 객체가 필요한 시점에 클래스를 동적 로딩해서 객체를 생성한다.

  • 또, 개발 완료 후 수정 사항이 발생하더라도 해당 클래스만 수정 하면 되므로 전체 애플리케이션을 다시 컴파일 할 필요가 없다. 따라서 유지보수를 쉽고 빠르게 진행 수 있다.

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

  • 자바는 오픈 소스(Open Source) 언어이므로 자바 프로그램에서 사용하는 라이브러리 또한 오픈소스의 양이 방대하다.
  • 고급 기능을 구현하는 코드를 작성하는 대신 검증된 오픈소스 라이브러리를 사용하면 애플리케이션 개발 기간을 단축하여 생산성을 높이고 안정성도 높일 수 있다.

작업 폴더 셋팅


1. C:\ 경로에 Java 폴더 생성


2. Java 폴더에서 workspace와 setup_download 폴더 생성


3. 이클립스 실행 후 workspace 경로 설정시 C:\Java\workspace 지정


4. 이 후 다운로드에 필요한 파일은 setup_download에 생성



JDK 설치



1. http://www.oracle.com 접속


2. Downloads 클릭


3. 좌측 Java SE 클릭 → 상단 탭 Overview 우측의 Download 클릭


4. Java 아이콘 모양 밑 Download 클릭(다운로드 경로 C:\Java\setup_download)



5. Java SE Development Kit 8u51 하단 Accept License Agreement 체크

a. JDK = Java Development Kit (자바 개발 도구)

b. SE = Standard Edition

c. 8u51 = JDK 8버전, Update 51


6. 운영체제에 맞는 설치파일 다운로드 클릭

a. 윈도우 운영체제 확인: 윈도우키+s → '시스템' 검색 → '시스템 종류' 확인

b. 64비트: x64 파일, 32비트: x86 파일


7. 4번 화면으로 이동하여 스크롤을 내려 'Additional Resources' → Java SE 8 Documentation 우측 DOWNLOAD 클릭


8. Java SE Development Kit 8u51 Documentation 항목 Accept License Agreement 체크하고 다운로드

a. Java API(매뉴얼 라이브러리)


10. JDK SE 1.8_51 설치파일 실행 후 계속 Next

a. 기본 설치 위치: C:\Program Files\Java\jdk1.8.0_51

b. 처음에 JDK가 설치 된 후 JRE(Java Runtime Environment)가 설치 됨

c. JDK와 같이 C:\Program Files\Java\ 에 설치됨


11. JDK가 어느 경로에서든 사용 가능하도록 path 설정 작업

a. 6-a와 같이 시스템 창에 진입

b. 좌측에 고급 시스템 설정 클릭

c. 시스템 설정 창에서 하단 환경 변수 클릭

d. 시스템 변수란에서 Path 변수를 클릭 후 편집

e. 변수 값에서 맨 마지막 글자 뒤에 ; (세미콜론) 입력

f. C:\Program Files\Java\jdk1.8.0_51\bin 붙여넣기

g. 참고: 추후 톰캣 설치 시에는 시스템 변수에 JAVA_HOME을 새로 만들고 path를 수정해야함


11. 10번 작업 수행 여부 확인

a. 윈도우 키 + S → cmd

b. javac -version 입력

c. 자바 버전이 나오면 10번 작업이 잘 수행되었다는 것


12. CLASSPATH 설정

a. 10-c 이후 시스템 변수에 새로 만들기 클릭 변수명에 CLASSPATH, 변수 값에 . (온점) 입력

b. . (온점): 현재 디렉토리



이클립스(Eclipse) 설치



1. https://eclipse.org/downloads/ 접속

2. 첫번째 Eclipse IDE for Java EE Developers 다운로드(운영체제에 맞게)

3. 압축 풀기(경로: C:\eclipse)
a. 경로가 길어 오류가 난다면 root 디렉토리(C:\) 에서 압축파일 명을 임의로 줄인 후 압축 풀기

4. eclipse.exe 실행

5. workspace 경로 설정(C:\Java\workspace)





+ Recent posts