목차
02 자바 프로그래밍 기초
2.1 자바 프로그램 구성 요소
- 자바의 기본적인 정책은 정적 자료형
클래스
- 자바와 같은 객체 지향 언어의 기본적인 빌딩 블록
- 필요한 클래스를 하나씩 만들어감으로써 전체 프로그램이 완성된다.
- 클래스 이름을 이루는 단어의 첫 번째 글자는 항상 대문자로 하는 것이 좋다.
예시) MyFirstProgram (CamelCase) - 소스 파일 이름은 public이 붙은 클래스의 이름과 동일
메소드
- 특정한 작업을 수행하는 코드의 묶음
- { } 사이에 원하는 문장 추가
자바 프로그램의 일반적인 구조
- 일반적으로 하나의 소스 파일은 하나의 클래스를 포함
- 하나의 클래스 안에 여러 개의 메소드 포함
- 메소드 안에 여러 개의 문장 포함
문장
- 사용자가 컴퓨터에게 작업을 지시하는 단위
- 문장의 끝은 항상 세미콜론(;)으로 끝나야 한다
주석
- 소스 코드가 하는 일을 설명하는 설명글로서 프로그램의 실행 결과에 영향을 끼치지 않는다.
- /* text*/ : 여러줄
- // text : 한줄
2.2 변수와 자료형
변수
- 데이터를 담아두는 상자
- 사용하기 전에 반드시 미리 선언
식별자 만들기
- 식별자 : 클래스, 메소드, 변수의 이름
- 규칙
- 알파벳 문자와 숫자, 밑줄 문자 _로 이루어진다.
- 숫자로 시작할 수 없다.
- 특수 문자는 $ _ 사용 가능.
- 대문자와 소문자를 구별하여 취급
- 자바 언어 키워드와 똑같은 이름은 허용안됨
- 식별자는 단순한 이름보다 의미 있는 이름을 사용하는 것이 좋다.
- 식별자의 관례
- 클래스명 : 각 단어의 첫 글자는 대문자
- 변수명, 메소드명 : 첫 단어의 첫글자는 소문자 두 번째 단어부터는 첫 글자가 대문자
- 상수 : 모든 글자를 대문자
자료형
- 변수에 저장되는 데이터 타입
- 상자의 종류와 크기를 나타낸다고 할 수 있음
- 크게 기초형(primitive)과 참조형(reference)의 자료형이 있음
기초형
- byte, short, int, long, float, double, char, boolean
- 자세한 내용은 https://kyeong-hoon.tistory.com/7 참고
문자형
- char는 하나의 문자 저장
- 자바에서 2바이트 유니코드를 사용하는 것은 아스키 코드만을 사용하는 다른 언어에 비하여 장점이 됨
- ASCII와 호환이 가능하면서 유니코드를 표현할 수 있는 UTF-8 인코딩이 많이 사용된다.
리터럴
- 소스 코드에 직접 쓰여 있는 값
- 정수형 리터럴 : 10진수, 8진수, 16진수(0x), 2진수(0b)
- 부동소수점형 리터럴 : 일반표기법이나 지수 표기법으로 표현 ( 300000 == 3e5 == 3 x 105)
- double형이 기본
- 필연적으로 오차 발생 : 비트가 한정적이고, 정확하게 표현할 수 없는 숫자가 있기 때문
(ex 0.1은 0.100000001490116119384765625과 같이 표현 - 큰 금액을 정확하게 계산하려면 java.math.BigDecimal 클래스 사용
- double형이 기본
- 논리형 리터럴 : 참과 거짓을 나타내는데 사용 (true, false)
상수
- 프로그램이 실행되는 동안, 값이 변하지 않는 수 또는 변경 불가능한 수
- final 키워드를 이용하여 상수 정의
변수 타입 추론 기능
- Java 10부터 var 키워드를 이용해 지역 변수의 타입을 자동으로 추론 가능
- 복잡한 변수 타입에 사용
- 징겨 변수 유형을 추론하기에 충분한 정보가 없으면 컴파일 실패
var id = 0; // 충분한 정보가 없어서 정수형으로 가정
var sum; // 변수 sum의 타입을 추측할 정보가 부족함. 컴파일 오류!!
문자열
- 문자들의 모임
- 내장된 문자열 자료형은 없고, String 클래스 제공 (String 클래스를 문자열 자료형이라고 생각)
형변환
- 하나의 자료형을 다른 자료형으로 변환
- 자동적인 형변환 : 수식을 계산할 때 가장 범위가 넓은 피연산자의 타입으로 변환됨
- 강제적인 형변환 : 형변환 연산자 사용 (ex double x = 3.5; int y = (int) x;)
더 작은 크기의 자료형에 값을 저장하는 형변환은 정보를 잃을 수 있다.int i; double f; f = 1 / 5; System.out.println(f); f = (double) 1 / 5; System.out.println(f); i = (int) 1.7 + (int) 1.8; System.out.println(i); 결과 0.0 // 피연산자가 정수 이므로 정수 연산으로 계산되어 0이 된다. 0.2 // 형변환 연산자에 의해 1은 부동소수점수 1.0으로 변환, 하나가 double형이므로 5도 자동 형변환됨 2
2.3 콘솔에서 입력받기
입력받기
- 콘솔에서 읽는 것은 System.in을 사용. 키보드에서 바이트를 읽어서 전달
- Scanner 객체를 이용해 바이트들을 정수나 실수, 문자열로 변환
import 문장
- Scanner 클래스는 자바 패키지에서 제공하는 클래스
java.util 패키지에 있음 - import를 통해 컴파일러에게 위치를 알려줌
- shift + ctrl + O : import
Scanner 클래스
- 키보드로부터 바이트 값을 받아서 분리자를 이용하여 각 바이트들을 토큰으로 분리
- 분리자는 공백문자 (' ', '\n', '\t')
- ex) "Kim 20 84.0" 입력시 "Kim"과 "20", "84.0"으로 분리
- next() : 공백문자로 분리된 다음 단어를 반환 (문자열로 반환)
- nextInt() : 정수 / nextDouble() : 부동소수점수 / nextLine() : 한 줄의 문자열
2.4 수식과 연산자
(https://kyeong-hoon.tistory.com/7 더 자세한 내용)
수식
- 연산자 : 특정한 연산을 나타내는 기호
- 피연산자 : 연산의 대상
연산자
- 연산자에는 우선순위가 존재
우선순위 연산자 내용 1 (), [] 괄호 / 대괄호 2 !, ~, ++, -- 부정 / 증감 연산자 3 *, /, % 곱셈 / 나눗셈 연산자 4 +, - 덧셈 / 뺄셈 연산자 5 <<, >>, >>> 비트단위의 쉬프트 연산자 6 <, <=, >, >= 관계 연산자 7 ==, != 8 $ 비트단위의 논리연산자 9 ^ 10 | 11 && 논리곱 연산자 12 || 논리합 연산자 13 ? : 조건 연산자(삼항 연산자) 14 =, +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, ~= 대입 / 할당 연산자
산술 연산
- + - * / %
초 단위의 시간을 받아서 몇 분과 몇 초인지를 계산하여 출력하는 프로그램
package practice;
import java.util.Scanner;
public class CalTime {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("초를 입력하시오 : ");
int time = sc.nextInt();
int min = time / 60;
int sec = time % 60;
System.out.println(time + "초는 " + min + "분 " + sec + "초 입니다.");
}
}
-------------------------------------------------------------------------------
초를 입력하시오 : 500
500초는 8분 20초 입니다.
증감 연산자
- ++x --x x++ x--
복합 대입 연산자
- 대입 연산자와 산술 연산자를 합친것
- += -= *= /= %=
관계 연산자
- 결과 : true / false
- == != > < >= <=
논리 연산자
- 여러 개의 조건을 조합하여 참인지 거짓인지를 따짐
- && (모두 참이여야 참) || (하나라도 참이면 참) ! (반대)
비트 연산자
- ~ : 비트 NOT : 비트 패턴을 반전
- & : 비트 AND : 하나라도 0이면 결과는 0
- ^ : 비트 XOR : 두 비트가 다르면 1 같으면 0
- | : 비트 OR : 하나라도 1이면 결과는 1
- 예시 : 특정한 센서 값이 1이 되었는지 검사 (원하는 위치만 1 나머지 0 넣고 & 연산해서 결과를 0과 비교)
비트 이동 연산자
- << : 비트 왼쪽 이동 : 2배 효과
- >> : 비트 오른쪽 이동 : 1/2 효과 (왼쪽 비트가 부호 비트로 채워짐)
- >>> : 비트 오른쪽 이동 : 1/2 효과 (왼쪽 비트가 0으로 채워짐)
조건 연산자
- 3개의 피연산자를 가지는 삼항 연산자
- 조건식 ? 결과1 : 결과2
사례
absolute_value = (x > 0) ? x : -x; // 절대값 계산
max_value = (x > y) ? x : y; // 최대값 계산
min_value = (x < y) ? x : y; // 최소값 계산
Mini Project
- 섭씨-화씨 온도 변환
package practice;
import java.util.Scanner;
public class FtoC {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("=============================");
System.out.println("1. 화씨-->섭씨");
System.out.println("2. 섭씨-->화씨");
System.out.println("=============================");
System.out.println();
System.out.print("\n번호를 선택하시오: ");
int choice = sc.nextInt();
if (choice == 1) {
System.out.print("화씨온도를 입력하세요: ");
double temf = sc.nextDouble();
double temc = (5.0/9.0)*(temf - 32);
System.out.println("섭씨온도는 " + temc);
break;
} else if (choice == 2){
System.out.println("섭씨온도를 입력하세요: ");
double temc = sc.nextDouble();
double temf = (9.0/5.0)*temc + 32;
System.out.println("화씨온도는 " + temf);
break;
} else {
System.out.println("잘못된 입력입니다. 다시 입력해주세요");
}
}
sc.close();
}
}
결과
=============================
1. 화씨-->섭씨
2. 섭씨-->화씨
=============================
번호를 선택하시오: 3
잘못된 입력입니다. 다시 입력해주세요
=============================
1. 화씨-->섭씨
2. 섭씨-->화씨
=============================
번호를 선택하시오: 1
화씨온도를 입력하세요: 200
섭씨온도는 93.33333333333334
Summary
- 클래스는 자바와 같은 객체 지향 언어의 기본적인 빌딩 블록이다. 클래스들이 모여서 하나의 자바 프로그램이 된다.
- 메소드는 특정한 작업을 수행하는 코드의 묶음이다.
- 문장은 사용자가 컴퓨터에게 작업을 지시하는 단위이다.
- 변수는 데이터를 담아두는 상자로 생각할 수 있다.
- 자바에는 크게 나누어서 기초형과 참조형의 자료형이 있다.
기초형은 다시 정수형, 실수형, 문자형, 논리형으로 분류할 수 있고 참조형에는 클래스, 배열, 인터페이스가 있다. - System.in과 Scanner 객체를 이용하여 콘솔에서 정수나 실수, 문자열을 읽는다.
- import 문장은 다른 클래스를 포함시키는 문장이다.
- 자바는 + - * / % 등의 산술 연산자를 제공한다.
- 자바는 < > <= >= 등의 관계 연산자를 제공한다.
- 자바는 && || !와 같은 논리 연산자를 제공한다.
'Java > 교재 정리' 카테고리의 다른 글
06 상속 (1) | 2024.04.23 |
---|---|
05 클래스와 객체 II (0) | 2024.04.18 |
04 클래스와 객체 I (0) | 2024.04.15 |
03 조건문, 반복문, 배열 (0) | 2024.04.14 |
01 자바 소개와 개발도구 설치 (0) | 2024.04.11 |