본문 바로가기

카테고리 없음

자바 기본 문법

먼저, jdk는 3가지 능력을 가졌다.

.java를 .class로 바꾸는 컴파일러, JRE, 디버깅

 

 

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello world!");
    }
}

이건 이런 역할을 가진다.

 

  • public class Main {
    • 클래스 정의
    • public : 클래스 경로 외부에서 실행시킬 수 있다고 표시해 주는 “접근 제어자” 입니다.
      • 클래스 경로 외부에서 호출 못하도록 막는 “접근 제어자”는 private (그 외 protected 도 있음)
    • class : 객체를 만드는 클래스라고 선언
    • Main : 클래스 명
      • 파일명과 일치 시켜야 합니다. (다르면 알림 문구가 뜹니다.)
      • 그렇게 해야 Java 컴파일러가 바이트코드 변환했을 때의 파일 확장명(.class )과 일치됩니다.
  • public static void main(
    • main 메서드 정의
    • public : 외부에서 실행시킬 수 있다고 표시해 주는 “접근 제어자” 입니다.
    • static : 프로그램이 실행될때 반드시 실행됨
      • 따라서 앱 실행 시 한 번만 정의되며 static 메서드 또는 변수(데이터) 끼리만 호출할 수 있습니다.
    • void : 메서드의 응답 값을 정의하는 곳인데 void는 응답할 값이 없다는 정의입니다. 출력이 있으면 밑에 return을 붙이게 됨. static void 이러면 반드시 문자로 출력
      • int는 정수, char는 문자, string은 문자열 등…
  • (String[] args)
    • 메서드가 시작될 때 넘겨받을 데이터들(변수들)
    • String[] : 문자열 여러 개 데이터 타입
    • args : 문자열 여러 개 데이터의 이름 (사용자가 정의한 값 아무거나 써도 됨) args123123이래도 됨

plint는 줄바꿈 안하고 plintln은 줄바꿈을 한다.

println("Hello");

println("world!"); 이러면 헬로 밑에 월드 나오는데 print로 똑같이 하면 그냥 헬로 월드! 하고 붙여버린다.

 

 

int number = 10; // 1. 선언과 동시에 값을 저장공간에 저장 (=초기화) 이러면 숫자는 10이 되고

 

number = 11; // 2. 선언 이후에 다른값을 저장공간에 저장. 이러면 10이 11로 일괄변경된다.

 

이것들은 변해서 변수라고 한다. 반대로 상수는 파이는 3.14처럼 안변하는것.

 

 

  • 기본형 변수
    • 논리형 변수 : boolean
      • True/False 값만 저장합니다.
      boolean flag = true; // 1. 논리형 변수 boolean 으로 선언 및 True 값으로 초기화
      
      flag = false; // 2. False 값으로도 저장할 수 있습니다.
      
    • 문자형 변수 : char
      • ‘A’, ‘1’ 와 같은 문자 하나만 저장합니다.
      char alphabet = 'A'; // 문자 하나를 저장합니다.
      
    • 정수형 변수 : byte, short, int, long
      • 0,1,2,99 와 같은 정수형 숫자 값을 저장합니다.
      • 정수형 변수 표현 범위
        • byte : -128 ~ 127 범위의 숫자만 저장 가능합니다.
        • short (2byte)는 -32,768~32,767 범위의 숫자만 저장 가능합니다.
        • int (4byte)는 -21억~21억 범위의 숫자만 저장 가능합니다.
        • long (8byte)은 9백경 정도의 매우 큰 수를 저장 가능합니다.
  • 실수형 변수 : float, double
    • 0.123, 0.99999 와 같은 소수점 실숫값을 저장합니다. 플롯은 4바이트, 더블은 8바이트.
    • float뒤엔 f를 붙인다.float floatNumber = 0.123f; 이렇게.
    • 그 둘의 차이는,
    • float floatNumber = 0.123f;
    • double doubleNumber = 0.123123123; 이렇게 더블이 더 크다.
  • string는 문장, Object, Array, List는 List<int> alphabet = [0,1,2,3]; // 기본형 변수 여러개를 저장

boolean flag = true;

flag = false 이러면 flag는 false가 되는데 final boolean flag = true; 이러면 상수가 되어 flag = false는 작동하지 않는다.

 

char은 작은 따옴표 사용. ""은 문자열이 됨

 

sout라고 치면 자동으로 System.out.println이 됨

이런식으로 위의 byteNumber과 println안의 이름이 같아야함.

 

 

이러면 a문자열인 1,2,3을 제대로 출력함. inr[] = 이러면 안됨

 

 

 

이런식으로 숫자를 문자로, 문자를 숫자로 바꿔주는 아스키 코드라는게 있다.

// 숫자 -> 문자
import java.util.Scanner;

public class Main {

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

		int asciiNumber = sc.nextInt();
		char ch = (char)asciiNumber; // 문자로 형변환을 해주면 숫자에 맞는 문자로 표현됩니다.

		System.out.println(ch);
	}

}

 

 

이제 실행을 누르고 창에 97을 입력하면 

C:\Users\asdf\.jdks\corretto-17.0.9\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2023.3.1\lib\idea_rt.jar=54207:C:\Program Files\JetBrains\IntelliJ IDEA 2023.3.1\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\asdf\Desktop\Firstjava\out\production\Firstjava Main
97
a 이런식으로 a라고 나온다.

 

// 문자 -> 숫자

import java.util.Scanner;

public class Main {

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

                char letter = sc.nextLine().charAt(0); // 첫번째 글자만 받아오기위해 charAt(0) 메서드를 사용합니다.
                int asciiNumber = (int)letter; // 숫자로 형변환을 해주면 저장되어있던 아스키 숫자값으로 표현됩니다.

                System.out.println(asciiNumber);
        }

}"

이건 문자를 입력하면 숫자로 나온다

 

  • 문자 (char)
    • 문자 뒤에 \0(널문자)가 없습니다. (1 byte만 쓰기 때문에 끝을 알아서 데이터만 저장하면 됩니다.) 작은 따옴표
  • 문자열 (String)
    • 문장의 끝에 \0(널문자)가 함께 저장이 됩니다. (몇 개의 byte를 쓸지 모르기 때문에 끝을 표시해야 합니다.) 큰 따옴표

Stack 영역 vs Heap 영역

  • Stack의 경우에는 정적으로 할당된 메모리 영역입니다.
    • 그래서, 크기가 몇 byte 인지 정해져 있는 기본형 변수를 저장합니다.
    • 추가로, 크기가 정해져 있는 참조형 변수의 주솟값도 저장합니다.
  • Heap의 경우에는 동적으로 할당된 메모리 영역입니다.(동적이란건 알수없을때, 몇글자인지 모른다던가)
    • 그래서, 크기가 계속 늘어날 수 있는 참조형 변수의 원본을 저장합니다.