JAVA 문법종합반 1주차

SJ.CHO·2024년 9월 3일

개발언어의 역사

  • A언어 : 1960년 , 입/출력, 문맥,
    프로그램을 만들기위한 가장 기본적인 언어.
  • B언어 : 1960년 , A언어+데이터타입+연산기능+메소드, 데이터를 연산하고 묶어서 관리 구현이 가능한 언어.
  • C언어 : 1970년, B언어+자료형데이터타입+자료구조,
    더 다양한 데이터타입을 가지고 자료구조가 생김.
  • JAVA : 1990년, C언어+공통 실행환경(JVM)+클래스+객체,
    데이터와 메서드를 묶는 클래스,객체지향적 언어

JAVA의 장점

  1. JVM이라는 가상 OS환경을 사용하여 OS위에서 돌아가기에 디바이스 호환성이 높다.
  2. 실제로 존재하는 개념을 추상화하기 쉽다.
    (이해와 유지보수쉬움)
  3. 안정성이 높아 오류방지및 보안성이 높다. (Ex)컴파일러)
  4. 많은 분야의 작업처리 API를 제공. (네트워크,DB 등)
  5. 다양한 IDE와 라이브러리를 제공한다.

JVM

  • Java Virtual Machine의 약자로 “자바 가상 머신”이라는 뜻

  • 가상머신에서 구동되기에 OS를 따지지 않는다.

  • 바이트코드 : 개발자가 작성한코드(.java)파일을 바이트코드(.class)로 컴파일러가 변환.
  • 인터프리터 : 바이트 코드를 기계어로 번역
  • JIT : 인터프리터의 효율을 높여주는 기능
  • 메모리영역 : OS에게 할당받은 메모리영역
  • 클래스 로더 : 바이트코드를 메모리영역으로 이동
  • 가비지컬렉터(GC) : 메모리영역에서 사용하지않는 데이터를 자동적으로 관리.

(JVM 자세히알아보기)

JRE, JDK

JRE

  • JRE는 Java Runtime Environment 자바 실행 환경이라는 뜻
  • .class 파일만 실행만 가능.

JDK

  • JDK는 Java Development Kit 자바 개발 키트라는 뜻
  • JRE의 기능을 포함하며 Java Compiler(javac) + 디버깅 기능 제공

변수

  • 값을 저장하는 저장공간(그릇)
int number; // number 라는 이름의 int(숫자)타입의 저장공간을 선언
String name; // name 이라는 이름의 String(문자열)타입의 저장공간을 선언

  • 선언 과 동시에 초기화 및 값을 덮어쓰기가 가능하다.
  • 변수를 이용하면 조건등의 값이 변결될때 코드수정이 필요X

변수의 타입

  • long의 경우 맨뒤 대문자 L이 들어감
long longNumber = 2147483647L;
  • 실수 타입 또한 리터럴이 들어감
float floatNumber = 0.123f;
  • String의 경우 byte의 양을 계산할수 없기에 \0(null)이 포함됌

참조형

  • 변수의 원본을 직접 저장하는게 아닌 별도의 메모리영역의 저장 후 저장된 주소값을 참조한다
  • 기본형 : Stack 영역 - 정적으로 할당된 메모리영역.
    (참조형 변수의 '주소값'이기 때문에 크기가 정해져있음)
  • 참조형 : Heap 영역 - 동적으로 할당된 메모리영역.

고정소수점, 부동소수점

고정소수점 : 정수와 소수사이의 위치를 미리 '고정'하고 해당 비트만을 활용해 실수를 표현.

  • 장점 : 구현 및 표현방법이 간단하고 속도가 빠르다.
  • 단점 : 자릿수가 크지않으므로 표현 할 수 있는 범위가 적고 정밀도가 낮다. 높은정밀도가 필요하지 않은 소규모시스템에서 간혹 이용.

부동소수점 : 소수점이 고정되어있지않고 움직임. 지수부/가수부로 나눔.

  • 장점 : 고정소수점에 비해 더 큰 실수를 표현할 수 있다.(정수자리에 더 많은 비트를 할당)
  • 단점 : 실수연산이 부정확할수 있음. H/W가 가지는 본질적한계로 무한반복되는 값이 나올경우 표현할수있는 근사치로 표현된다.

래퍼클래스

  • 기본 자료형을 객체 타입의 자료형으로 변환이 필요할때 사용된다.
  • 사용용도
    • 객체로 저장해야할 경우.
    • Collection, 제네릭 같은 매개변수가 객체로 요구될경우.
    • 래퍼클래스의 메서드를 사용해야할 경우.
  • 특징
    • 산술연산을 위한 클래스가 아니기에 불변성을 지닌다.
    • JDK 1.5 이상부턴 오토 박싱/언박싱이 적용된다.

상수

  • 변하지않는 값을 필요로 할때 저장공간 효율성을 위해 사용.
    (원주율, 지구의 둘레 등)
final int number = 10; // 1. 상수로 선언 (데이터 타입 앞에 final 을 붙이면 됩니다.)

number = 11; // e2. 변수의 값을 바꾸려고하면 에러가 납니다!
  • final static 타입 변수명 을 주로사용함.

ASCII

  • int와 char를 매핑해서 표현 JAVA의 경우 아스키코드라는 규칙을 이용하여 표현

타입캐스팅(형변환)

  • 프로그래밍을 하며 기존의 변수타입이 아닌 내가 원하는 변수타입으로 바꿔주기 위한 방법.
  • 형변환은 주로 기본형 변수인 정수 ↔ 실수 ↔ 문자 들 사이에서 일어난다.
  • OOP의 특징중 다형성에 속한다.
double doubleNumber = 10.101010;
float floatNumber = 10.1010

int intNumber;
intNumber = (int)doubleNumber; // double -> int 형변환
intNumber = (int)floatNumber; // float -> int 형변환

오토캐스팅

  • 명시적으로 타입캐스팅을 하지않아도 컴파일러가 자동으로 캐스팅작업을 진행.

  • 작은 타입 -> 큰 타입으로 변환시 (자동 변환)

    • 작은 범위에서 큰 범위로 이동하는거기에 값의 손실이 발생하지않음.
    • 값의 손실이 없기에 컴파일러가 자동적으로 변환
  • 큰 타입 -> 작은 타입으로 변환시 (강제 변환)

    • 더작은범위로 표현하기에 값의 손실발생가능성이 있음.
      (Ex) double -> int 시 소수점 아래단위가 모두 사라짐.)
    • 손실이 발생하기 때문에 개발자에게 선택을 돌림.

숙제

답안 :

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String foodname = sc.nextLine();
        String recipes[] = new String[10];
        float star = sc.nextFloat();
        float per = ((int) star * 100 / 5);
        sc.nextLine();
        for (int i = 0; i < 10; i++) {
            recipes[i] = sc.nextLine();
        }
        System.out.println("[ " + foodname + " ]");
        System.out.println("별점 : " + (int) star + " (" + per + "%)");
        for (int i = 0; i < 10; i++) {
            System.out.println(i + 1 + ". " + recipes[i]);
        }
    }
}

profile
70살까지 개발하고싶은 개발자

0개의 댓글