231011 Java 문법 종합반 chapter1

MJ·2023년 10월 12일

Java 문법 종합반

목록 보기
1/5

[학습목표]

  • Java 프로그램을 만들때 사용하는 Java 언어에 대해서 이해합니다.
  • Java 의 실행환경인 JVM 에 대해서 이해합니다.
  • Java 의 데이터인 변수와 상수에 대해서 이해합니다.
  • Java 의 변수를 담는 저장공간의 종류에 대해서 이해하고 사용법을 익힙니다.
  • Java 의 저장공간 종류(변수 타입)간에 변환에 대해서 이해하고 사용법을 익힙니다.

1. 개발언어(JAVA)

사람과 컴퓨터 사이의 소통->프로그래밍 언어
(컴퓨터에게 사람이 대화 시도)

  • 컴퓨터는 0과1만 이해
  • 사람이 대화를 시도-> 연산 & 작업 부여 -> 컴퓨터에게 반복해서 시키기

결과물: 빅데이터, AI(이로운역할)

초창기에는 그렇지 않았음

<개발언어의역사>

A언어(첫 개발언어, 1960, 입력출력,문맥)

B언어(bell 사에서 개발, 데이터 타입,연산기능(+-*/),메서드(행동 정의))

C언어(b언어보다 좋은, 현재도 많이 사용, 자료형 데이터, 자료구조)

Java(C언어의 모든 기능 포함,어디서나 마시는 커피처럼 어디서나 동작가능, Java커피에서 이름땀(대표적인 객체지향언어 - 3주차에자세히)

<JAVA의 특징>

  • 공통실행환경(JVM)
  • 클래스와 객체
    -가장 많이 쓰이는 개발 언어 중 하나
    이유 :공통 실행환경 존재-어떤 운영체제(win,mac,linux)에서든 실행가능
    -앱개발에 적합(운영체제에 위에 실행되는 모든 프로그램)
    ex)데스트탑앱,모바일앱,서버앱

객체 지향??

객체 = Object
사람, 사물, 세상에 존재하는 모든 것
->특징(이름 나이 주소 혈액형 키), 행동(걷는다 숨쉰다 공부한다) 가지고 있음

  • 세상과 닮아있는 언어라 이해하기 쉽고 유지보수 쉬움
  • 안정성 높다
  • 오류방지, 보안성 높다(JS 파이썬보다 무겁다고 느껴짐)
    compiler(변환기,오류 체크),보안기술 존재
  • 은행권 금융권 대규모 SI 프로젝트->대세 / kotiln 안드로이드 개발(이전엔 Java로 많이 함) => 대규모 앱개발 관황
  • 중간과정(네트워크 개발, DB연결 등) 원활히 제공-> API로 연결
  • 다양한 개발도구 라이브러리 사용(많은사람이 Java에 종사하면서 업그레이드) ->서드파티(Third Party) : 원천기술과 호환되는 상품을 출시하거나 해당 기술을 이용한 파생상품을 생산하는 회사

2.JVM(java virtual machine)

자바의 가상환경을 만들어준다(자바가 구동될 수있는 가상의 기기 만들어줌)
어느 기기에서나 Java를 실행시킬 수 있는 가상의 기기만들어줌

바이트 코드

java코드를 운영체제가 읽을 수있는(readable) 코드로 Java 컴파일러가 변환한 코드

자바 컴파일러: java 파일(사람 이해)->class(운영체제가 이해) 파일로 변환

인터 프리터(해석)

운영체제가 읽은 바이트 코드를 기계가 이해할 수 있는 기계어로 번역(해석)
(low-level 언어)

JIT 컴파일러(just in time)

빠르게 인터 프리터 효율높여줌

메모리 영역

Java 데이터 저장(기억)
운영체제에 JVM이 할당받은 영역
데이터 쌓였다 죽었다가 반복

클래스 로더

-바이트 코드를 메모리 영역에 담아 운반

가비지 콜렉터

쓰레기 모아서 청소
메모리 영역에서 안쓰는 데이터 제거->효율적으로 관리

runtime system(구동(실행)이 되는 시스템)

개발환경 구성->프로그램 설치
1.JRE(java Runtime Environment,자바 실행 환경) 설치(=JVM 설치)
1)java->class 2)class->실행
2번만 가능하기 때문에
JDK 설치해야함

JDK(java Development Kit)
1) jre 기능 포함
2) 컴파일러 역할(java->class)
3) 디버깅(de+bug)-버그 없애기

인텔리제이 설치(editor + 확장기능)

 () 소괄호
 {} 중괄호
 [] 대괄호

java 프로젝트(앱)는 제일먼저 클래스의 main 메소드를 실행시킨다.=JVM의 약속

public class Main {
		public static void main(String[] args){
        	System.out.println("Our First Project");
    	}
    }

-public : 제어자(접근 범위) 공공의,공통의 src 폴더 어디서든 접근가능
-클래스 이름 .java 이름과 같아야함
-static : 이프로그램이 시작될 때 무조건 실행된다.

메소드(input,output 타입 제한)
문자만 된다 숫자만 된다.->데이터 타입

output
-void: 메소드 출력값의 데이터 타입/ 아무것도 없다 출력은 없다.

input
-String[] args:매개변수 자리
타입 변수명(아무거나 써도 상관없고 메소드 안에서 사용가능

객체:특징(속성, 변수), 행동(메소드)
System.out.println("Hello World");

System클래스에서 out이라는 객체가 문자열을 출력한다.(println 메소드)

System.out.println(7);
System.out.println(3);
System.out.println(3.14);//숫자는 "" 로 감싸지 않아도 됨 감싸면 문자로 인식
System.out.println("JAVA");//문자열은 ""로 감싸야함 안하면 변수로 인식

3. 변수&상수

변하는것(변수)과 변하지 않는 것(상수 constant, 항상 유지되는 지속되는)
-저장공간의 선언: int number;(저장공간 타입/저장공간 이름)
-값의 저장(할당):

1)선언과 동시에 저장(초기화)
int number=10;
2)선언 후 값 저장->덮어쓰기
number =10;

상수:변하지 않는 저장공간
final int number=10;
number=11;//오류 발생

4. 저장공간의 종류(=변수타입)

1.기본형(숫자형,문자형,boolean)
2.참조형(뭔가 복잡,한번에 저장X, 어딘가에 별도로 저장)

1)기본형

  • 논리형(boolean) true/false 값 저장

  • 문자형(char)(2byte) : 문자 하나만 저장 ex) 'A','1'

  • 정수형(byte,short,int,long)
    표현할 수있는 크기에 따라 나뉨

byte -128~127범위
short -32768~32767
int -21억~21억
long num=2147483647L;//숫자 뒤에 알파벳 L 표기(접미사)

데이터값 뒤에 구분값을 붙이는 것!

  • 실수형(float,double):소수점표현

정수& 실수형 표현범위 넘게 되면 오버플로우 발생해 다른 값으로 표현됨
실수는 표현범위 매우 넓어서 정수형 변수에 못담을 수있음(부동소수점 방식) 정수는 0과 1로 표현하기 쉽지만 실수는 어려움

고정소수점 방식(소수점 길이,표현 byte 제한)
vs 부동소수점 방식 (부호,지수,기수를 구분해서 저장, 이들을 곱한값을 표현해서 저장하는 방식)

-float(4byte)가 long(8byte)보다 더 넓은 범위 표현가능
float->long으로 자동 형변환 안됨

long num=3.14F;//오류 발생
(float 접미사 F, double은 접미사 없음)

float 3.4 10^38까지
double은 1.7
10^308 RKwl

2) 참조형 변수(어느 공간(reference)의 주소값을 바라고 있다. 길이 예측 불가)

  • 문자열(String) : char가모여서 완성
    String message = "Hello World";
  • 그외 Object,Array,List
    객체 배열 리스트 같은 단일 공간에 담을 수 없는 값 저장

Stack 영역 vs Heap 영역

  • Stack :정적으로 할당된 메모리 영역입니다.
    • 기본형 변수를 저장
    • 참조형 변수의 주소값 저장
  • Heap의 경우에는 동적으로 할당된 메모리 영역입니다.
    • 그크기가 계속 늘어날 수 있는 참조형 변수의 원본을 저장.
  • 래퍼 클래스 변수:기본형 변수를 클래스로 감싸는것

박싱(감싸기)
int number = 31;
Integer num= new Integer(number);//지원종료 오류
->Integer num = number;//이런식 할당
언박싱(풀기)
int n= num.intValue();

클래스는 객체지향 언어인 Java 의 핵심기능인데요. 그렇기 때문에 클래스로 변수를 관리하면 객체지향의 많은 기능을 사용할 수 있게됩니다!!

3)숫자와 문자

저장공간에 저장하는 값은 0,1 을 통한 숫자값을 저장한다

문자는 어떻게 숫자로 저장할까요?
바로, 숫자(int)를 문자(char)로 매핑해서(짝을 지어서) 표현합니다!=> 아스키 코드

'a' = 97
'A' = 65

4)문자와 문자열

문자(char):기본형,'A',끝에 '\0'(null 문자) 없음.
문자열(String):참조형,"a","hello",끝에 '\0'(null 문자) 들어감(java에선 없음)

5)입력과 출력

  • 입력 System.in 객체의 next() 명령 사용
    Scanner sc = new Scanner(System.in); 
    String input = sc.next();  
  • 출력
    System.out 객체의 println() 명령을 사용
Scanner sc = new Scanner(System.in);
String input = sc.next();  

System.out.println("입력값 : " + input);  

// 실행 결과
{입력}
입력값 : {입력}

6)비트와 바이트 **좀 어려움!

1byte = 8bit

  • Bit
    • Bit(비트)는 0,1 형태의 2진수 데이터로써 컴퓨터가 저장(표현)할 수 있는 최소 단위 입니다.
    • 정수형 값은 10진수 숫자(0~10범위의 숫자)이며 2진수(0~1범위)Bit 로 저장(표현) 합니다.
    • 4개의 Bit로 16진수 숫자(0~F(16)범위의 숫자)를 2진수(0~1범위)Bit 로 저장(표현) 합니다.
  • Byte = 8 Bit
    • Byte(바이트)는 8개의 Bit(비트)로 구성되어 있습니다.
    • 1 Byte 내에서 숫자 변수는 Bit 2진수를 10진수로 저장(표현)을 합니다.
      • 10진수로는 0~255(2의8승)까지 저장(표현) 합니다.
    • 1 Byte 내에서 문자 변수의 경우만 Bit 2진수를 16진수로 저장(표현)합니다.

5.형변환

byte(1)->short(2)->int(4)->long(8)->float(4)->double(8)
//부동 소수점 방식사용해서 long보다 float가 더 큰 값 저장가능

자동 형변환(암시적):작은크기->큰크기(연산 시에도 일어남)
강제 형변화(명시적):큰크기->작은 크기, 값의 손실 일어남.

숙제코드(요리 레시피 메모장 만들기)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        //입력
        String food = sc.nextLine();//요리 제목 입력
        double star = Double.parseDouble(sc.nextLine());

        String[] recipe = new String[10];
        for (int i = 0; i < 10; i++) {
            recipe[i] = sc.nextLine();
        }
        //출력
        System.out.println("[ " + food+ " ]");
        int change_star=(int)star;
        double percent = change_star * 100/5.0;
        System.out.println("별점 : " + change_star+ "("+percent+"%)");
        for (int i = 0; i < 10; i++) {
            System.out.println((i+1)+". " +recipe[i]);
        }
    }
}

0개의 댓글