02 자바 프로그래밍 기초

목차

    02 자바 프로그래밍 기초

    2.1 자바 프로그램 구성 요소

    • 자바의 기본적인 정책은 정적 자료형

    클래스

    • 자바와 같은 객체 지향 언어의 기본적인 빌딩 블록
    • 필요한 클래스를 하나씩 만들어감으로써 전체 프로그램이 완성된다.
    • 클래스 이름을 이루는 단어의 첫 번째 글자는 항상 대문자로 하는 것이 좋다.
      예시) MyFirstProgram (CamelCase)
    • 소스 파일 이름은 public이 붙은 클래스의 이름과 동일

    메소드

    • 특정한 작업을 수행하는 코드의 묶음
    • { } 사이에 원하는 문장 추가

    자바 프로그램의 일반적인 구조

    • 일반적으로 하나의 소스 파일은 하나의 클래스를 포함
    • 하나의 클래스 안에 여러 개의 메소드 포함
    • 메소드 안에 여러 개의 문장 포함

    문장

    • 사용자가 컴퓨터에게 작업을 지시하는 단위
    • 문장의 끝은 항상 세미콜론(;)으로 끝나야 한다

    주석

    • 소스 코드가 하는 일을 설명하는 설명글로서 프로그램의 실행 결과에 영향을 끼치지 않는다.
    • /* text*/ : 여러줄
    • // text : 한줄

    2.2 변수와 자료형

    변수

    • 데이터를 담아두는 상자
    • 사용하기 전에 반드시 미리 선언

    식별자 만들기

    • 식별자 : 클래스, 메소드, 변수의 이름
    • 규칙
      • 알파벳 문자와 숫자, 밑줄 문자 _로 이루어진다.
      • 숫자로 시작할 수 없다.
      • 특수 문자는 $ _ 사용 가능.
      • 대문자와 소문자를 구별하여 취급
      • 자바 언어 키워드와 똑같은 이름은 허용안됨
    • 식별자는 단순한 이름보다 의미 있는 이름을 사용하는 것이 좋다.
    • 식별자의 관례
      • 클래스명 : 각 단어의 첫 글자는 대문자
      • 변수명, 메소드명 : 첫 단어의 첫글자는 소문자 두 번째 단어부터는 첫 글자가 대문자
      • 상수 : 모든 글자를 대문자

    자료형

    • 변수에 저장되는 데이터 타입
    • 상자의 종류와 크기를 나타낸다고 할 수 있음
    • 크게 기초형(primitive)과 참조형(reference)의 자료형이 있음

    기초형

    문자형

    • 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 클래스 사용
    • 논리형 리터럴 : 참과 거짓을 나타내는데 사용 (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 목차로 돌아가기

    '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