본문 바로가기

개발 공부/Java

자바 프로그래밍 입문 강좌 2~10 JAVA 기초 문법

자바 프로그래밍 입문 강좌 (renew ver.) - 초보부터 개발자 취업까지!!

 

2. Java 프로그램의 실행 구조

 

2-1 환경 변수 설정.

java.exe(JVM 구동 명령), java.exe(컴파일러)를 다른 디렉토리에서도 실행할 수 있도록 등록

제어판 - 시스템 - 속성 - 고급 - 환경 변수에 bin 경로 등록

시스템 변수 - 새로 만들기

변수 이름을 JAVA_HOME으로 변수 값을 bin 경로로 설정.

 

2-2 Java 컴파일러와 JVM

 

클래스 이름과 파일 이름은 맞춰줘야 한다.

 

2-5. 가비지 컬렉터 Garbage Collector

프로그램 실행에 필요한 메모리를 GC가 알아서 관리해준다.

 

C계열 프로그램 : 개ㅐ발자가 직접 메모리 관리해야 함. 잘못 관리할 경우 메모리 누수가 발생하고 타 프로그램 동작이 멈출 수 있음.

JAVA 프로그램 : 개발자가 메모리에 접근할 수 없음. 개발자는 메모리 관리를 할 수 없고 가비지 컬렉터가 불필요한 메모리를 회수해서 메모리를 최적화함.

 

3. 변수

 

3-1. 변수란?

데이터를 임시로 담을 수 있는 공간(메모리 공간)

 

3-2. 변수 선언과 초기화

int i = 10;

자료형 변수이름(선언부) = (대입연산자) 10(변수값); 

 

3-3. 메모리 할당과 진법

int 자료형은 메모리에서 4byte 공간을 차지함.

8bit = 1byte.

 

3-4. 변수 데이터 변경

변수에 저장된 데이터는 언제든 변경할 수 있다.

 

package pjtTest;

public class Main {
	public static void main(String[] args) {
		System.out.println("Hello Java World");
		int i = 10;
		System.out.println("i = " +  i);
		i = 100;
		System.out.println("i = " + i);
	}
}

 

 

4. 기본자료형

4-1. 기본자료형과 객체자료형

 

기본 자료형은 데이터가 변수에 직접 저장되고, 객체 자료형은 객체 메모리 주소가 변수에 저장된다.

C계열에선 포인터라고 하고, Java에선 레퍼런스라고 한다.

 

4-2. JAVA 기본 자료형

기본 자료형 - 정수형 : byte(1byte), char(2byte), short(2byte), int(4byte), long(8byte)

               실수형: float(4byte), double(8byte)

               논리형: boolean(1byte)

 

package pjtTest;

public class Main {
	public static void main(String[] args) {
		char c = 'a';
		System.out.println("c = " + c);
		int i = 10;
		System.out.println("i = " + i);
		double d = 10.258;
		System.out.println("d = " + d);
		boolean b = false;
		System.out.println("b = " + b);
		String s = "Hello Java World!";
		System.out.println("s = " + s);
	}
}

 

4-3 ; 형 변환

자동(묵시적) 형 변환: 작은 공간의 메모리에서 큰 공간의 메모리로 이동.

명시적 형 변환 : 큰 공간의 메모리에서 작은 공간의 메모리로 이동. 데이터가 누실될 수 있다.

 

 

 

5. 특수 문자와 서식 문자

 

5-1. 특수 문자

특수 문자가 아닌 특수한 목적으로 사용되는 문자

\t : tab

\n : 줄 바꿈

\' : 작은 따옴표

\" : 큰 따옴표

\\ : 역슬래시

 

 

5-2. 일반 문자가 아닌 서식에 사용되는 문자

 

print() 메서드 이용 : f는 format(형식)을 뜻함

%d : 10진수

%o : 8진수

%x : 16진수

%c : 문자

%s : 문자열

%f : 실수

 

package pjtTest;

public class Main {
	public static void main(String[] args) {
		System.out.printf("오늘의 기온은 %d입니다.\n", 10);
		int num1 = 100;
		System.out.printf("오늘의 기온은 %d입니다.\n", num1);
		
		int num2 = 30;
		System.out.printf("10진수 : %d\n", num2);
		System.out.printf("8진수 : %o\n", num2);
		System.out.printf("16진수 : %x\n", num2);
	}
}

 

5-3. 서식 문자의 정렬과 소수점 제한 기능

 

package pjtTest;

public class Main {
	public static void main(String[] args) {
		System.out.printf("%d\n", 123);
		System.out.printf("%d\n", 1234);
		
		System.out.printf("\n");
		System.out.printf("%4d\n", 123);
		System.out.printf("%5d\n", 1234);
		
		System.out.printf("\n");
		
		System.out.printf("f\n", 1.23);
		System.out.printf(".3f\n", 1.23);
	}
}

 

6. 연산자

 

6-1 피연산자 개수에 의한 연산자 구분

 

단항) 피연산자가 하나

+x, -x, !x

 

이항)

x=y, x<y, x!=y

 

삼항)

조건식 : true? false

 

6-2. 대입 연산자.

오른쪽의 결과를 왼쪽에 대입한다.

(프로그램에서 오른쪽과 왼쪽이 같다는 의미는 ==이다)

 

6-3. 산술 연산자 : +, -, *, /, %

6-4. 복합 연산자 : +=, -=, *=, /=, %=

6-5. 관계 연산자 : >, <, >=, <=, ==, !=

6-6. 증감 연산자 : ++, --

6-7. 논리 연산자 : &&, ||, !

6-8. 조건 연산자 : 조건식? 식1 : 식2

조건식이 참이면 식1, 거짓이면 식2 실행

 

6-9 : 비트 연산자 

데이터를 비트단위로 환산해 연산을 수행. 다른 연산자보다 연산 속도가 향상된다.

& : a 와 b가 모두 1이어야 1

| : a와 b 중 하나라도 1이면 1

^ : XOR 연산으로, a와 b가 같으면 0

 

 

 

7. 배열

7-1. 배열이란?

인덱스를 이용해서 자료형이 같은 데이터를 관리하는 것

 

7-2. 배열 선언 및 초기화

package pjtTest;

public class Main {
	public static void main(String[] args) {
		int[] arr1 = new int[5];
		arr1[0] = 100;
		arr1[1] = 200;
		arr1[2] = 300;
		
		int[] arr2= {10, 20, 30, 40, 50};
		
	}
}

7-3. 배열 활용

package pjtTest;

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		String[] name = {"박찬호", "이승엽", "박병호", "이병규", "류현진"};
		int[] score = new int [5];
		Scanner scanner = new Scanner(System.in);
		
		System.out.printf("%s의 점수를 입력하시오 : " , name[0]);
		score[0] = scanner.nextInt();
		System.out.printf("%s의 점수를 입력하시오 : " , name[1]);
		score[1] = scanner.nextInt();
		System.out.printf("%s의 점수를 입력하시오 : " , name[2]);
		score[2] = scanner.nextInt();
		System.out.printf("%s의 점수를 입력하시오 : " , name[3]);
		score[3] = scanner.nextInt();
		System.out.printf("%s의 점수를 입력하시오 : " , name[4]);
		score[4] = scanner.nextInt();
		
		System.out.println(name[0] + " " + (double)score[0]);
		System.out.println(name[0] + " " + (double)score[1]);
		System.out.println(name[0] + " " + (double)score[2]);
		System.out.println(name[0] + " " + (double)score[3]);
		System.out.println(name[0] + " " + (double)score[4]);
		
		double avg = (double)(score[0] + score[1] + score[2] + score[3] + score[4])/5;
		System.out.println("avg = " + avg);
	}
}

 

8. 배열과 메모리

 

8-1 배열의 메모리 크기.

배열을 구성하는 데이터의 자료형에 따라 배열의 메모리 크기가 결정된다

int[] arr = new int [3];

4byte * 3 = 12 bytes

 

8-2. 배열을 가리키는 배열 이름

기본 자료형 데이터를 담고 있는 변수와 달리 배열 변수는 배열 데이터의 주소를 담고 있다.

int[] i = new int[3];

i[]주소 --> i[0]의 값 | i[1]의 값 | i[2]의 값

 

8-3. 배열의 기본속성

package pjtTest;

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		int[] arrAtt1 = {10, 20, 30, 40, 50, 60};
		int[] arrAtt2 = null;
		int[] arrAtt3 = null;
		
		System.out.println("arrAtt.length : " + arrAtt1.length);
		System.out.println("arrAtt1 : " + Arrays.toString(arrAtt1));
		arrAtt3 = Arrays.copyOf(arrAtt1,  arrAtt1.length);
		System.out.println("arrAtt3 : " + Arrays.toString(arrAtt3));
		//배열1과 3은 요소는 같지만 주소는 같지 않다.
		
		arrAtt2 = arrAtt1; //배열 레퍼런스
		System.out.println(arrAtt1);
		System.out.println(arrAtt2);  //1과 2는 같은 배열의 레퍼런스
		System.out.println(arrAtt3);
	}
}

8-4. 다차원 배열

package pjtTest;

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		int[][] arrMul = new int[3][2];
		arrMul[0][0] = 10;
		arrMul[0][1] = 20;
		arrMul[1][0] = 30;
		arrMul[1][1] = 40;
		arrMul[2][0] = 50;
		arrMul[2][1] = 60;
		
		System.out.println("arrMul[0] : " + Arrays.toString(arrMul[0]));
		System.out.println("arrMul[1] : " + Arrays.toString(arrMul[1]));
		System.out.println("arrMul[2] : " + Arrays.toString(arrMul[2]));
	}
}

 

9. 조건문

9-1. 조건문이란? 조건의 결과에 따라 양자 택일 또는 다자 택일을 진행

양자택일 : 주로 if문

다자택일 : 주로 switch

 

package pjtTest;

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		int num1 = 10;
		int num2 = 20;
		if(num1<num2) {
			System.out.println("num1은 num2보다 작다.");
		}
		
		if(num1<num2) {
			System.out.println("num1는 num2보다 작다.");
		}
		else
		{
			System.out.println("num1은 num2보다 크거나 같다.");
		}
		
		
	}
}

9-3. switch

package pjtTest;

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		System.out.println("점수 입력 : ");
		Scanner inputNum = new Scanner(System.in);
		int score = inputNum.nextInt();
		
		switch(score) {
		case 100:
		case 90:
			System.out.println("A");
			break;
		case 80:
			System.out.println("B");
			break;
		default:
			System.out.println("Try again");
			break;
		}
		inputNum.close();
	}
}

 

10. 반복문

10-1 반복문이란? 프로그램을 특정 조건에 따라 반복적으로 진행하는 것

 

10-2. for문

 

package pjtTest;

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		System.out.println("input number : ");
		Scanner scanner = new Scanner(System.in);
		int inputNum = scanner.nextInt();
		for(int i=1; i<10; i++)
		{
			System.out.printf("%d * %d = %d\n", inputNum, i, (inputNum * i));
		}
	}
}

 

 

10-3. while문

package pjtTest;

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		int num = 10;
		int i = 1;
		while(i<10) {
			System.out.printf("%d * %d = %d\n", num, i, num*i);
			i++;
		}
	}
}

10-4. do-while문

while문과 비슷하며 차이점은 조건 결과에 상관없이 무조건 한번은 실행한다는 것이다.

 

package pjtTest;

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		int num = 1;
		do {
			System.out.println("최초 한번은 무조건 실행");
		} while(false);
	}
}