20230403 TIL

박우현 (Joshua)·2023년 4월 3일

항해99_TIL

목록 보기
1/20

20230403 TIL
오늘은 자바와, 자바 기본 코드 형식, 및 변수의 종류를 배웠다.

📋 자바 JAVA

대표적 객체지향언어
C 언어 + 공통 실행환경 (JVM) + 클래스 (데이터, 메서드 포함) + 객체 
가장 많이 쓰이는 언어

📌 자바를 배워야하는 이유

1.) 공통 실행환경이 있어 여러 기기에서 실행 가능
2.) 세상과 닮아있는 개발언어라 코드를 이해하기 쉽고 유지 보수가 쉬움
3.) 안정성이 높아서 프로그래밍 오류를 방지하고 보안상 안전
4.) 네트워크 및 데이터베이스 연결 및 통신 등의 작업을 처리하는 API를 제공
5.) 다양한 개발 도구와 라이브러리를 사용

📌 JVM (Java Virtual Machine)

여러 기기 위에 Java 프로그램을 실행시킬 수 있는 가상의 기기를 만들어주는 것

Byte Code = .java 파일을 운영체제가 읽을수 있도록 Java compliler가 변환한 파일 (.class)
Compiler = .java 파일을 .class로 변환하는 변환기
Interpreter = byte code를 기계어로 번역
JIT(Just In Time) Compiler = Interpreter의 효율을 높여주는 서포터 해석기
메모리 영역 = 운영체제로 부터 JVM이 할당받은 메모리 영역
Class Loader = JVM으로 byte code를 불러와서 메모리에 저장
Garbage Collector = 메모리 영역에서 안쓰는 데이터를 주기적으로 흡수해가는 청소기

JRE (Java Runtime Environment) = 자바 실행 환경 = .class 파일만 실행 가능
JDK(Java Development Kit) = 자바 개발 키츠 = JRE, javac(Java Compiler), 및 디버깅 기능 포함


📌 자바 기본 프로그램 코드 이해

	public class Main {
      public static void main(String[] args) {
          System.out.println("Hello world!");
      }
	}
  • public class main {}
    • 클래스 정의
    • public = 클래스 경로 외부에서 실행시킬 수 있다고 표시해주는 “접근 제어자”
      ( private 과 protected 도 있다. )
    • class = 객채를 만드는 클래스라고 선언
    • Main = 클래스 명, 파일 이름과 같아야한다.
  • public static void main {}
    • main 메서드 정의
    • public = 외부에서 실행시킬 수 있다고 표시해주는 “접근 제어자”
    • class = Java 컴파일러가 바이트 코드로 변환할때 미리 정의되는 메서드 표기
    • void = 메서드의 응답값을 정의하는 곳인데 void 는 응답할 값이 없다는 정의
  • (String[] args)
    • 메서드가 시작될때 넘겨받을 데이터들
    • String[] = 문자열 여러개 데이터 타입
    • args = 문자열 여러개 데이터의 이름 (사용자가 정의한값 아무거나 써도됨)

💻 System.out.println() 과 print()의 차이

  • println() = 출력창에 괄호() 안으로 전달된 데이터를 출력 후 줄바꿈을 해준다.
  • print() = 출력창에 괄호() 안으로 전달된 데이터를 출력 후 줄바꿈을 해주지 않는다.

✔ 주석이란?

설명을 달아놓는 기능
개발자들끼리 협업할때 코드에 대한 설명을 추가하거나 주의사항을 적어놓을 때 사용
실제 프로그램 실행에는 영향을 미치지 않는 유령코드
예시:
 	public class Main {
       public static void main(String[] args) {
           System.out.println("Hello world!"); //이것은 주석입니다. 
       }
	}

📌 변수 선언 방법

저장공간에 담을 데이터의 타입이름을 명시해서 선언한다.


📌 변수와 상수

  • 변수 = 저장한 값 / 데이터가 바뀔 / 변할 수 있다.
  • 상수 = 저장한 값 / 데이터가 바뀔 / 변할 수 없다. (데이터 앞에 final 붙이기)
    	public class Main {
          public static void main(String[] args) {
          		// 변수
              	int num = 10;
              	num = 20;
                
                //상수
                final int num = 10;
          }
	}

📌 변수의 종류

  • 기본형 변수

    • 논리형 변수 boolean
      True/ False 값만 저장
    • char
      문자 값만 저장 ('A', '1')
    • byte, short, int, long
      정수형 숫자값을 저장
      • byte = -128 ~ 127 범위의 숫자만 저장 가능
      • short (2 byte) = -32,768~32,767 범위의 숫자만 저장 가능
      • int (4 byte) = -21억~21억 범위의 숫자만 저장 가능
      • long (8 byte) = 9백경 정도의 매우 큰수를 저장 가능
        int 와 long 데이터값을 구분하기 위한 구분자로 long으로 담을 숫자뒤에 L을 붙입니다.
    • float, double
      실수형 숫자값을 저장
      • float (4 byte) = (3.4 -10^38) ~ (3.4 10^38) (long 보다 큼)범위의 숫자 저장이 가능
        float 와 double 데이터값을 구분하기 위한 구분자로 float으로 담을 숫자뒤에 f를 붙입니다.
      • double (8 byte) = (1.7 -10^308) ~ (1.7 10^308)(long 보다 큼)범위의 숫자 저장이 가능
  • 참조형 변수

    • 문자열 변수 : String
      “Apple”, “텍스트” 와 같은 문장을 저장
    • 그 외 : Object, Array, List …
      객체, 배열, 리스트와 같은 단일 저장공간에 담을 수 없는 값을 저장
  • 래퍼 클래스 변수 (Wrapper Class)
    기본형 변수를 클래스로 한번 랩핑(감싸는) 변수
    기본형 변수 타입명에서 첫글자를 대문자로 바꾸어서 래퍼 클래스를 정의한다.

    • 박싱
      기본 타입에서 래퍼 클래스 변수로 변수를 감싸는 것

    • 언박싱
      래퍼 클래스 변수를 기본 타입 변수로 가져오는 것
      예시 :

      	// 박싱
          // Integer 래퍼 클래스 num 에 21 의 값을 저장
          int number = 21;
          Integer num = new Integet(number);
      
          // 언박싱
          int n = num.intValue(); // 래퍼 클래스들은 intValue() 같은 언박싱 메서드들을 제공해줍니다.

💻 String 과 Character 의 차이

  • 선언에서 차이점
    • Character
      문자 한개만 저장하며 따옴표를 사용하여 값을 지정합니다. (ex. ’A’)
    • String
      문자 여러개를 문장형태로 저장하며 쌍따옴표를 사용하여 범위를 지정합니다. (ex. “ABCDEFG”)
  • 저장에서 차이점
    • Character
      문자 뒤에 \0(널문자)가 없다.1 byte만 사용한다
    • String
      문장의 끝에 \0(널문자)가 함께 저장이 된다. n개의 byte가 사용된다.

📍 참조형 변수 저장법

기본형 변수 = 원본 값을 저장한다. Stack에 저장.
참조형 변수 = 원본 값을 저장한 저장 공간의 주소값을 저장한다. 주소값은 Stack, 원본 값은 Heap에 저장.  
  • Stack = 정적으로 할당된 메모리 영역
    • 크기가 몇 byte 인지 정해져있는 기본형 변수를 저장
    • 크기가 정해져있는 참조형 변수의 주소값도 저장
  • Heap = 동적으로 할당된 메모리 영역
    • 크기가 계속 늘어날 수 있는 참조형 변수의 원본을 저장

📌 변수 타입 바꾸기

  • 정수형, 실수형 간 발생하는 형변환
    • Double, Float to Int
      (Int)캐스팅 방식으로 실수를 정수로 치환하는 방법입니다.
      이때 실수형의 소수점아래자리는 버려집니다.
       double doubleNumber = 10.101010;
        float floatNumber = 10.1010
        int intNumber;
        intNumber = (int)doubleNumber; // double -> int 형변환
        intNumber = (int)floatNumber; // float -> int 형변환
    • Int to Double, Float
      (Double,Float) 캐스팅으로 정수형을 실수형으로 변환하는 방법입니다.
       int intNumber = 10;
       double doubleNumber = (double)intNumber; // int -> double 형변환
       float floatNumber = (float)intNumber;  // int -> float 형변환
  • 자동 형변환

📌 변수 타입별 크기 순서
byte(1) → short(2) → int(4) → long(8) → float(4) → double(8)

예시 :

byte byteNumber = 10;
int intNumber = byteNumber;    // byte -> int 형변환
System.out.println(intNumber); // 10

char charAlphabet = 'A';
intNumber = charAlphabet;   // char -> int 형변환
System.out.println(intNumber); // A의 유니코드 : 65 (ASCII 코드)

intNumber = 100;
long longNumber = intNumber; // int -> number 형변환
System.out.println(longNumber); // 100

intNumber = 200;
double doubleNumber = intNumber; // int -> double 형변환
System.out.println(doubleNumber); // 200.0  (소수점이 추가된 실수출력)

📓 오늘 느낀 점 한줄 요약

"여행은 시작 되었다!" 🚢

20230403 TIL

profile
매일 매일 성장하자

0개의 댓글