Java

자바 기본 프로그래밍

종퐁이 2024. 6. 27. 20:59

1. 기본 구조

 

2. 코드 설명

(1) 클래스 만들기

- Hello 이름의 클래스 선언

EX) public class Hello {  }

- class 키워드로 클래스 선언

- public 선언하면 다른 클래스에서 접근 가능

- 클래스 코드는 { } 내에 모두 작성

 

(2) 메서드

- C/C++에서의 함수를 메서드로 지칭

EX) public static int sum(int n, int m){  }

- 클래스 바깥에 작성할 수 없음

 

(3) 메서드 호출

 - sum() 메서드 호출

EX) int i = 20;

        s = sum(i,10);

- sum() 호출 시 변수 i의 값과 정수 10을 전달

- sum()의 n, m에 각각 20, 10 값 전달

- sum() 은 n과 m 값을 더한 30 리턴

- 변수 s는 정수 30을 전달받음

 

(4) main() 메서드

- 자바 프로그램은 main()에서 실행 시작

EX) public static void main(String [] args){  }

- public static void으로 선언

- String[] args로 실행 인자를 전달받음

 

(5) 주석문

- // 한 라인 주석

- /* 여러 행 주석 */

 

(6) 변수 선언

- 변수 타입과 변수 이름 선언

EX) int i = 20;

       char a;

-메서드 내에서 선언된 변수는 지역 변수 (지역 변수는 메서드 실행이 끝나면 자동 소명)

 

(7) 문장

- ;로 한 문장의 끝을 인식

EX) int i = 20;

        s = sum(i,20);

 

(8) 화면출력

- 표준 출력 스트림에 메시지 출력

EX) System.out.println("Hello");

- 표준 출력 스트림 System.out의 println() 메서드 호출

- pinrtln()은 여러 타입의 데이터 출력 가능

- println()은 출력 후 다음 행으로 커서 이동

 

3. 식별자 (identifier)

(1) 식별자란?

- 클래스, 변수, 상수, 메소드 등에 붙이는 이름

 

(2) 식별자의 원칙

- '@', '#', '!'와 같은 특수 문자, 공백 또는 탭은 식별자로 사용할 수 없으나 '_', '$'는 사용 가능

- 유니코드 문자 사용 가능, 한글 사용 가능

- 자바 언어의 키워드는 식별자로 사용불가

- 식별자의 첫 번째 문자로 숫자는 사용불가

- '_' 또는 '$'를 식별자 첫 번째 문자로 사용할 수 있으나 일반적으로 잘 사용하지 않는다.

- 불린 리터럴(true, false)과 널 리터럴(null)은 식별자로 사용불가

- 길이 제한 없음

 

(3) 대소문자 구별

- Test와 test는 별개의 식별자

 

4. 식별자 이름 사례

 

5. 좋은 이름 붙이는 언어 관습

(1) 기본

- 가독성 높은 이름

- 목적을 나타내는 이름 붙이기 : s 보다 sum

- 충분히 긴 이름으로 붙이기 : AVM보다 AutoVendingMachine

 

(2) 자바 언어의 이름 붙이는 관습 : 헝가리언 이름 붙이기

- 클래스 이름

- 첫 번째 문자는 대문자로 시작

- 각 단어의 첫 번째 문자만 대문자

EX) public class HelloWorld {  }

        class AutoVendingMachine {   }

 

(3) 변수, 메서드 이름

- 첫 단어 이후 각 단어의 첫 번째 문자는 대문자로 시작

 

(4) 상수 이름

- 모든 문자를 대문자로 표시

EX) final static double PI = 3.141592;

 

6. 자바의 기본 타입

(1) 특징

- 기본 타입의 크기가 정해져 있음

- CPU나 운영체제에 따라 변하지 않음

 

7. 문자열

- 문자열은 기본 타입이 아님

- String 클래스로 문자열 표현

- 문자열 리터럴 - "JDK", "한글", "계속하세요"

EX) String toolName = "JDK";

- 문자열이 섞인 + 연산 -> 문자열 연결

EX) toolName + 18 ---> "JDK1.8"

        "(" + 3 + ", " + 5 + ")" ----> "(3,5)"

       System.out.println(toolName + "이 출시됨");

 

8. 변수와 선언

(1) 변수

- 프로그램 실행 중에 값을 임시 저장하기 위한 공간

- 변수 값은 프로그램 수행 중 변경될 수 있음

- 데이터 타입에서 정한 크기의 메모리 할당

 

(2) 변수 선언

- 변수의 타입 다음에 변수 이름을 적어 변수를 선언

 

9. 변수 선언 사례

(1) 변수 서언 사례

EX) int radius;

        char c1, c2, c3; 

 

(2) 변수 선언과 초기화

- 선언과 동시에 초기값 지정

EX) int radius = 10;

        char c1 = 'a', c2  = 'b', c3 = 'c';

        double weight = 75.56;

 

(3) 변수 읽기와 저장

- 대입 연산자인 = 다음에 식(expression)

EX) radius = 10 * 5;

        c1 = 'r';

       weight = weight + 5.0;

 

10. 리터럴과 정수 리터럴

(1) 리터럴(literal)

- 프로그램에서 직접 표현한 값

- 정수, 실수, 문자, 논리, 문자열 리터럴 있음

EX) 34, 42.195, '%', true, hello

 

(2) 정수 리터럴

- 10진수, 8진수, 16진수, 2진수 리터럴

- 정수 리터럴은 int 형으로 컴파일

- long 타입 리터럴은 숫자 뒤에 L 또는 I을 붙여 표시

EX) long g = 24L;

 

11. 실수 리터럴

- 소수점 형태나 지수 형태로 표현한 실수

EX) 12. , 12.0,. 1234, 0.1234, 1234E-4

 

- 실수 타입 리터럴은 double 타입으로 컴파일

EX)  double d = 0.1234;

         double e = 1234E-4;

- 숫자 뒤에 f(float)나 d(double)을 명시적으로 붙이기도 함

EX) float f = 0.1234f;

        double w =. 1234D;

 

12. 문자 리터럴

(1) 단일 인용부호(' ')로 문자 표현

- 사례) 'W', 'A', '가', '*', '3', '글', `u0041

- `u 다음에 4자리 16진수(2바이트의 유니코드)

- \u0041 ---> 문자 'A'의 유니코드(0041)

- \uae00 ---> 한글문자 '글'의 유니코드(ae00)

 

 

(2) 특수문자 리터럴은 백슬래시(\)로 시작

 

 

13. 논리 리터럴과 boolean 타입

- 논리 리터럴은 2개뿐 : true, false

- boolean 타입 변수에 치환하거나 조건문에 이용

 

 

14. 기본 타입 이외의 리터럴

(1) null 리터럴

- 레퍼런스에 대입 사용

 

(2) 문자열 리터럴(스트링 리터럴)

- 이중 인용부호로 묶어 표현 

EX) "Good", "Moring", "자바", "3.19", "26", "a"

 

 

15. JDK7부터 숫자에 '_' 허용, 가독성 높임

(1) 숫자 리터럴의 아무 위치에나 언더스코어('_') 허용

- 컴파일러는 리터럴에서 '_'를 빼고 처리

 

(2) 허용되지 않은 4가지 경우

 

 

16. var 키워드를 사용하여 변수 타입 생략

(1) var 키워드

- java 10부터 도입된 키워드 : var와 동일한 기능으로 C++(2011년 표준부터)의 auto 키워드

- 지역 변수의 선언에만 사용

- 변수 타입 선언 생략 : 컴파일러가 변수 타입 추론

- 변수 선언문에 반드시 초깃값 지정

EX) var name;   // 컴파일 오류, 변수 name의 타입을 추론할 수 없음

 

 

17. 상수

(1) 상수선언

- final 키워드 사용

- 선언 시 초기값 지정

- 실행 중 값 변경 불가

 

(2) 변수, 리터럴, 상수 활용

 

 

18. 자동 타입 변환

- 작은 타입은 큰 타입으로 자동 변환 : 컴파일러에 의해 이루어짐

- 치환문(=)이나 수식 내에서 타입이 일치하지 않을 때

 

 

19. 강제 타입 변환

(1) 자동 타입 변환이 안 되는 경우 

- 큰 타입이 작은 타입으로 변환할 때

 

(2) 강제 타입 변환

- 개발자가 필요하여 강제로 타입 변환을 지시 : ( ) 안에 변환할 타입 지정

- 강제 변환은 값 손실 우려

 

 

20. 자바에서 키 입력

(1) System.in

- 키보드로부터 직접 읽는 자바의 표준 입력 스트림

- 키 값을 바이트(문자 아님)로 리턴

 

(2) System.in을 사용할 때 문제점

- 키 값을 바이트 데이터로 넘겨주므로 응용프로그램이 문자 정보로 변환해야 함

 

21. Scanner로 쉽게 키 입력

(1) Scanner클래스 

 - System.in에게 키를 읽게 하고, 읽은 바이트를 문자, 정수, 실수, 불린 문자열 등 다양한 타입으로 변환하여 리턴 : java.util.Scanner클래스

 

(2) 객체 생성

- System.in에게 키를 읽게 하고, 원하는 타입으로 변환하여 리턴

 

22. Scanner를 이용한 키 입력

- Scanner에서 키 입력받기

- Scanner는 입력되는 키 값을 공백으로 구분되는 아이템 단위로 읽음

- 공백문자 : '\t', '\f', '\r', ' ', '\n'

- 개발자가 원하는 다양한 타입의 값으로 바꾸어 읽을 수 있음

 

 

23. Scanner 주요 메서드

 

24. 식과 연산자

- 연산 : 주어진 식을 계산하여 결과를 얻어내는 과정

 

 

25. 연산자 우선순위

(1) 같은 우선순위의 연산자

- 왼쪽에서 오른쪽으로 처리

- 예외) 오른쪽에서 왼쪽으로

EX) 대입연산자, --, ++, +, -(양수 음수 부호),!, 형 변환은 오른쪽에서 왼쪽으로 처리

 

(2) 괄호는 최우선순위

- 괄호가 다시 괄호를 포함한 경우는 가장 안쪽의 괄호부터 먼저 처리

 

26. 산술 연산자

- 더하기, 빼기, 곱하기, 나누기, 나머지

- /와 % 응용

- 10의 자리와 1의 자리 분리

EX) 69/10 = 6 ---> 몫 6

        69%10 = 9 ---> 나머지 9

- n이 홀수인지 판단

EX) int r = n % 2; // r이 1이면 n은 홀수, 0이면 짝수

 

27. 증감연산

- 1 증가 혹은 감소시키는 연산

 

 

28. 대입연산

- 연산의 오른쪽 결과는 왼쪽 변수에 대입

 

29. 대입 연산자와 증감 연산자 사용

 

 

30. 조건 연산자?:

- condition? opr2 : opr3

- 세 개의 피연산자로 구성된 삼항(ternary) 연산자 : condition이 true 이면, 연산식의 결과는 opr2, false이면 opr3

 

31. 조건연산

 

 

31. 비트 연산

(1) 비트 개념

(2) 비트 연산

- 비트 논리 연산 : 비트끼리 AND, OR, XOR, NOT 연산

- 비트 시프트 연산 : 비트를 오른쪽이나 왼쪽으로 이동

 

 

32. 비트 논리 연산

- 피 연산자의 각 비트들의 논리 연산

 

 

33. 비트 논리 연산 응용

- 냉장고에는 8개의 센서가 있고 이들은 flag 변수와 연결되어 있다고 할 때, 냉장고의 온도가 0도 이상으로 올라가면 비트 3이 1이 되고, 0도 이하이면 비트 3이 0을 유지한다.

문제) 현재 냉장고의 온도가 0도 이상인지 판단하는 코드를 작성하라

 

 

 

34. 시프트 연산자의 사례

- 피 연산자의 비트들을 이동 연산

 

 

35. 비트 논리 연산과 비트 시프트 연산

 

 

36. switch문

(1) switch문은 식과 case문의 값과 비교

- case의 비교 값과 일치하면 해당 case의 실행문장 수행 : break를 만나면 switch문을 벗어남

- case의 비교 값과 일치하는 것이 없으면 default 문 실행

(2) default문은 생략 가능

 

37. case 문의 값

- case문의 값

- 문자, 정수, 문자열 리터럴만 허용

- 실수 리터럴은 허용되지 않음