자바(Java)

[Java 문법 종합반] 기초언어 1주차

JAVABOZA 2023. 5. 23. 10:50
int number = 11;​
자바

대표적인 객체(object)  지향언어

 

자바의 장점

* 자바라는 언어가 현재 시대에 닮아있는 개발언어 그래서 코드를 이해하기가 쉽고 안정성이 높다.

   또한, 프로그래밍 오류를방지하고 보안상 안전하다.

 

* 다양한 기기의 운영체제에서 실행할 수있는 언어

* 대규모 웹(앱) 개발이 가능하다.

   - 다양한 많은 양의 라이브러리가 존재

   - 네트워크 및 데이터베이스 연결 및 통신 등의 작업을 처리하는 api제공을 한다.

 


용어 정리

'JVM' 란 무엇일까

 : Java Virtual Machine 의 약자로써 "자바 가상 머신" 이라는 뜻을 가지고 있다.

--> 다른말로 하면 여러가지 기기 위에서 Java 프로그램을 실행시킬 수 있는 가상의 기기를 만들어준다.

 

'바이트 코드' 란 무엇일까

:  Java 프로그램 변환코드

--> 운영체제가 읽을 수 있는 코드로 자바 컴파일러가 변환한 코드 

 

'compiler' 란 무엇일까 // compile = 변환하다

 : Java -> class

--> 개발자가 작성한 Java코드(.java 파일)들을 운영체제가 읽을 수 있는 바이트코드(.class 파일)로 변환하는 변환기

 

'인터프리터' 란 무엇일까

(Java .class 코드 해석기)

 : 운영체제가 읽은 바이트 코드를 기계가 실행할 수 있는 기계어

 

'JIT 컴파일러' 란 무엇일까

(빠른 Java .class 코드 해석기)

 : Just It Time 의 약자로 인터프리터의 효율을 높혀준다. (= 서포터 해석기)

 

'메모리 영역'란 무엇일까

(Java 데이터를 저장하는 영역)

 : 운영체제로 부터 JVM 이 할당받은 메모리 영역

 

'클래스 로더' 란 무엇일까

(Java .class 바이트 코드를 메모리 영역에 담는 운반기)

 : JVM 으로 class를 불러와서 메모리에 저장함

 

'가비지 컬렉터'

(Java 쓰레기 청소기)

 : 메모리영역에서 안쓰는 데이터를 주기적으로 흡수해가는 청소기 역할

 

 

그림으로 표현

 

'JRE' 란 무엇일까

 : Java Runtime Environment 의 약자로 '자바 실행 환경' 

오로지 자바 프로그램만 실행 시킬 수 있다.

 

'JDK' 란 무엇일까

: JRE를 포함하고 있다! , Java Development Kit (자발개발키트)

* .java 파일들을 .class 파일ㄷ로 Java Compiler (javac) 기능을 가지고 있다.

* 코드를 디버깅 하는 jdb 기능을 가지고 있다.

 

 

※디버깅이란?

중담점 일시정지 + 코드 라인단위 수행

 



public class main{
	public static void main (String[] args){
    	System.out.println ("항해 시작");
    }
}

자바의 main 메서드 

자바는 실행되면서 제일먼저 클래스의 main 메서드를실행시킨다. 이것은 JVM 약속!

 

코드를 해석해보면

 

● public class main {}

 - public 은 클래스 경로 외부 에서 실행시킬 수 있따고 하는 '접근제어자'

     접근제어자로는 public , private , protected, default 있다 자세한 내용은 후에 공부하자

 

 - class : 객체를 만드는 클래스 라고 선언!

 - Main : 클래스명 

    파일명과 일치해야함

 

public static void main()

 - main : 메서드

 - public : 외부에서 실행시킬 수 있다고 표시해준 "접근제어자"

 - static : 자바컴파일러가 바이트 코드로 변환을 할때 미리 정의되는 메서드 표기

    = 앱 실행시 한번만 정의 static 메서드 또는 변수 끼리만 호출 가능

 - void : void가 있는 자리는 메서드의 응답값을 정의 , void는 응답할 값이 없다고 정의한 것

    // ex_)  int는 정수, char는 하나의 문자, string 은 문자열 
 - (String[] args)

   메서드가 시작이 될때 넘겨받을 데이터들(변수들)

      String[] = 문자열 여러개 데이터 타입

      args = 문자열  여러개 데이터의 이름 --> 이거는 개발자가 아무거나 작명해도됨

 

  System.out.println("항해 시작")

  - System.out.println 메서드는 괄호안에 있는 데이터를 출력

 

더보기

printlnprint 가사용되는데

      println : 문자를 출력 후 줄바꿈

      print : 줄바꿈 없이 문자 출력

 


변수

*자바 프로그램에서는 값을 사용하기 위해서는 값을 저장해둘 저장공간을 선언해야 한다

 * 저장공간에 담을 값의 타입과 이름을 명시하여 선언해야한다.

    ● 값의 타입 : 저장공간의 종류 ---> 초록색 박스에 있는 int가 값의 타입

    ● 값의 이름 : 저장공간의 이름 ---> 분홍색 박스에 있는 number가 값의 이름

 

값의 저장

 ○초기화 : 선언과 동시에 값을 저장한다

int num = 123;

 

- int는 타입 (=저장공간 타입)

- num은 변수 이름 (=저장공간 이름) 

- 10 은 값 (= 저장한 값)

 

*단 선언 이후에 값을 저장한다면 "덮어쓰끼" 라 한다

int num = 10;
 num = 123;

num = 123; 이 덮어쓰기

 

하지만 int num = 10; 앞에 final int num 10;

이렇게 final 을 붙히면 '상수'로 선언


변수는 쉽게 생각하면

저장공간에 담는 데이터

변수에는 '기본형 변수' , '참조형 변수' 가 있다.

 

먼저 기본형 변수에는 boolean(true/false) , char(문자형), byte,short,int,long(정수형)으로 구분 할 수가 있다.

여기서 정수형 long은 숫자 뒤에 알파벳 'L'을  붙여서 표기한다. L은 "접미사"라고 부른다

 

정수형변수는 표현 범위를 넘지않아야 하며 넘게 되면 오버플로우 발생

● byte  (= 1byte)

 short (=2byte)

 int (= 4byte)

 long (= 8byte) 로 long은 가장 큰수를 저장이 가능하다.

 

실수형 변수에는 float / double이 있는데

● float  (= 4byte)

● double  (= 8byte)

 

※ 정수형의 long과 마찬가지로 float도 접미사 f를 사용한다.

 

참조형 변수

문자열변수  String 과 Object(객체), Array(배열), List(리스트)와 같은 변수도 존재

 

래퍼 클래스 변수

"기본형 변수를 클래스로 한번 랩핑(감싸는) 변수"

기본적으로 기본형변수 타입명에 첫번째 글자를 대문자로 바꿔 사용

int number = 245;
Integer num = new Integer(number);

int n = num.intValue();

★래퍼 클래스 변수를 사용하는 이유

 - 클래스는 객체지향언어인 자바의 핵심기능

클래스로 변수를 관리하면 객체지향의 많은 기능을 사용할 수 있게 된다.

 

 


Stack 영역 / Heap 영역

 ● Stack = 정적으로 할당된 메모리영역 // 기본형 변수를 저장 + 크기가 정해진 참조형변수 저장가능

 ● Heap = 동적으로 할당된 메모리영역 // 크기가 변할 수있는 참조형 변수의 원본 저장

 

 

 

입력 과 출력

입력에는 기본적으로 자바에서는 Scanner.in 객체의 next() 명령 사용해서 입력받음

ex)

입력

Scanner sc = new Scanner(System.in);
String input = sc.next();

 

코드풀이

1. Scanner 객체를 new 명령어로 생성

2. sc(=Scanner)의 .next(); 를 싱행하면 input 변수에 입력한 글자를 받는다. 

 

출력

Scanner sc = new Scanner(System.in);
String input = sc.next();

System.out.println("출력값 작성")

 


형변환

변수 타입별 크기 순서를 기억하자!

byte (1), char 👉 short(2) 👉int(4) 👉 long (8) 👉 float(4) 👉 double(8)

 

※ 자동타입변환은 작은 크기에서 큰 크기의 타이브올 저장될때 큰 크기로 형변환 발생

 

자동형변환 ex
결과값

 

자동형변환 (작은 타입 > 큰 타입)

 - 값 손실이 없다

 - 값 손실이 없어서 컴파일러가 자동으로 형변환 시켜준다.

 

강제형변환 (=캐스팅) (큰타입 > 작은타입)

 - 값손실이 생긴다.

 - 값손실이 생기기 때문에 개발자가 선택하여서 형변환을 해야한다.