TIL_240205

라미·2024년 2월 5일

TIL

목록 보기
8/25
post-thumbnail

1. Java 기초

1.1 Java 역사와 특징

  • 어디서나 마시는 커피처럼 어디서나 동작이 가능한

  • 핵심기능 : C언어 기능 + 공통 실행환경(JVM -> 어디서나 동작이 가능) / 클래스 / 객체

  • JAVA의 특징

    • 앱 개발에 적합 (운영체제 위에서 실행되는 프로그램)
    • 여러 기기의 운영 체제(OS:Window, Android, iOS, Linux...) 에서 실행할 수 있는 언어
    • 객체(Object) 지향 언어
    • 다양한 개발 도구와 라이브러리

1.2 JVM(Java Virtual Machine)

JVM 이란?

자바 가상 머신
여러가지의 기기위에(여러 OS 환경) Java를 실행시킬 수 있는 가상의 기기를 만들어 주는 것

바이트코드

Java 프로그램 변환 코드 : 컴퓨터가 읽을 수 있는 코드

Java compiler

.java 파일(사용자 작성 파일)을 .class 파일(컴퓨터가 읽을 수 있는 파일)로 변환해 주는 것

인터프리터

Java .class 코드 해석기

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

JIT 컴파일러

빠른 Java .class 코드 해석기

  • 인터프리터의 효율을 높여주는 해석기

메모리 영역

Java 데이터를 저장하는 영역

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

클래스 로더

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

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

가비지 컬렉터(GC)

Java 쓰레기 청소기

  • 메모리 영역에서 사용하지 않는 데이터를 주기적으로 정리

java 프로그램의 동작 흐름

JRE : Java Runtime Environment, 자바 실행 환경

  • 자바 프로그램 실행만 가능, 개발은 불가능

JDK : Java Development Kit, 자바 개발 키드

  • JRE를 포함하고 있다.
  • 컴파일러 역할을 한다.(javac) .java -> .class
  • 디버깅 기능 제공

1.3 환경 설정 및 pjt 생성

JDK 설치 (v 17) 이미 jdk 17 버전 사용 중으로 생략
intelliJ 설치 이미 학생 버전으로 있기 때문에 생략

// Main.java 파일
public class Main{ // class 명과 파일명 일치
	//main 메소드
	public static void main(String[] args) {
        System.out.println("Our First Project! :)");
}

클래스 명명 규칙 : 파일 명과 일치해야 한다.
main 메소드 : 자바 프로그램은 가장 먼저 class의 main 메소드를 실행
static 키워드 : 프로그램 시작될 때 무조건 실행되는 녀석
void 위치 : 메서드 출력값의 데이터 타입 (output)
void 뜻 : 아무것도 없다 → 출력이 없음을 나타냄(반환값이 없다)
String[] args : 매개변수 자리 (input)


1.4 변수와 기본형 변수

변수 : 하나의 값을 저장하기 위한 공간(변경 O)

상수 : 한 번만 값이 저장 가능한 변수(변경 불가)

변수의 선언과 할당

변수타입 변수이름; 과 같이 선연

int number; // int : 변수 타입, number : 변수 이름
String name; // String : 변수 타입, name : 변수 이름

1. 선언 후 할당

int number; // int : 변수 타입, number : 변수 이름
number = 10;
String name; // String : 변수 타입, name : 변수 이름
name = "가람"

2. 선언과 동시에 할당(초기화)

int number = 10;
String name = "가람";

상수의 선언

final 키워드

final int NUM = 10; // 상수로 선언
NUM = 15; // error : 'final' 키워드로 상수로 선언됐기 때문에 값 변경 할 수 없다.

변수의 타입

기본형 변수 : 논리형(boolean), 문자형(char), 정수형(byte,short,int,long), 실수형(float, double)

변수의 종류값 속성접미사(대,소문자 구별 x)
논리형(boolean)true, false / 논리값없음
문자형(char)문자 - '가','a','A' / 문자하나없음
정수형(byte, short, int, long)0, 25,....., 100 같은 정수형 숫자L(long)
실수형(float, double)3.14, -0.1 같은 실수형 숫자f(float), d(double) ← 생략허용(double)

참조형 변수 : 사용자 정의

  • 문자열 변수 : String
    "apple", "abc"와 같은 문장을 저장
  • 그외 : Object, Array, List ,...
    객체, 배열, 리스트와 같은 단일 저장 곹간에 담을 수 없는 값을 저장

래퍼 클래스 변수(Wrapper class)

  • 기본현 변수를 클래스로 한버 감싸는 변수
기본 타입wrapper class
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charcharacter
booleanBoolean
int number = 12;
//boxint (wrappper class 로 만들어줌)
Integer num = number;
//unboxing wrapper class에 넣어준 애를 기본타입으로 꺼냄
System.out.println(num.intValue());

1-5 ASCII 코드

American Standard Code for Information Interchange의 약자, ANSI에서 만든 표준 코드체계.

아스키는 각 문자를 7비트로 표현하므로 2^7 = 128개의 문자를 표현할 수 있다.

  1. int → char 변환
//scanner -> 사용자 입력값 scan
Scanner sc = new Scanner(System.in);

//asciiNumber 라는 변수에 입력받은 값을 저장
int asciiNumber = sc.nextInt();

//ch 라는 변수에  (char)asciiNumber 형변환 하여 저장
char ch = (char)asciiNumber;

System.out.println(ch); // 입력값 : 65, 출력값 : A
  1. char → int 변환
//scanner -> 사용자 입력값 scan
Scanner sc = new Scanner(System.in);

//charAt(index) → 문자열의(index) 값을 char 타입으로 변환
char letter = sc.nextLine().charAt(1);

//char → int 로 형변환
int asciiNum = (int)letter;

System.out.println(asciiNum); //입력값 : da , 출력값 : 97 

1.6 문자(char)와 문자열(String)

문자(char) : 문자 한개만 저장, ''로 값을 지정한다. ex) 'ㅁ', 'A'

char ch = 'a';

문자열(String) : 문자 여러개를 저장한다. "" 로 값을 지정. ex) "a", "abc", "가람"

String name = "가람";

Stack 영역 vs Heap 영역
Stack 영역 : 정적으로 할당된 메모리 영역, 기본형 변수, 참조형 변수의 주소값 저장
Heap 영역 : 동적으로 할당된 메모리 영역, 참조형(Reference Type) 데이터 타입을 갖는 객체(인스턴스), 배열 등이 저장


1.7 자바 입,출력

입력
Scanner.in 객체의 next() 명령을 사용하여 입력 받는다.

Scanner sc = new Scanner(System.in) // Scanner 객체 생성
String input = sc.next(); // scanner 의 .nert(); 실행 명령어 (사용자 입력값 받기위한 명령어)

출력
System.out 객체의 println() 명령어 사용하여 출력

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

System.out.println(input); //입력한 글자 출력, 입력값 : 사랑, 출력값 : 사랑

1.8 비트&바이트

컴퓨터는 10진수를 이해할 수 없어 2진수로 표현해줘야 한다.
ASCII 코드에 의해 A → 65(10) : 010000001(2) 이 되지만 길이가 너무 긴 단점이 있다
010000001(8bit) → 1byte -> (4bit, 4bit) 0100 0001 0x41(16진수) 로 간단히 표현할 수 있다.


형변환

형 변환 이란? : 변수 또는 상수의 타입을 다른 타입으로 변환하는 것

자동 형 변환(묵시적 형 변환) : 기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환

명시적 형 변환 : 선언된 변수를 다른 자료형으로 변환(형 변환), 큰 데이터에서 작은 데이터로 변환될 때 일부를 잘라서 작은 데이터 크기로 맞춰주는 것

작은 값을 큰 그릇에 넣어 줄 때는 생략이 가능하다

//자동 형 변환
float f = 1234; //int 타입의 값을 float 타입의 변수에 저장. (컴파일러에 의해 자동 형변환)

int i = 3.14f; //error (int의 표현 범위 < float의 표현 범위) 이기 때문에 error

//명시적 형 변환
int i = (int)3.14f //수동적ㅇ로 형변환 해주기 때문에 error x

//byte → int
byte b = 10;
//자동 형 변환
int i = b; //생략가능

//int → byte
int i2 = 300;
//명시적 형 변환
byte b2 = (byte)i2; //생략불가 byte(1byte) < int(4byte)

산술 변환

  • 두 피연산자의 타입을 같게 일치시킨다 (큰 타입으로 일치)
    • long + int → long + longlong (int<long)
    • float + int → float + floatfloat (int<float)
    • double + float → double + doubledouble (float<double)
  • 피연산자의 타입이 int 보다 작은 타입이면 int로 변환
    • byte + short → int + int → int (byte,short < int)
    • char + short → int + int → int (char,short < int)

// 1주차 숙제
        //scanner -> 사용자 입력값 scan
        Scanner sc = new Scanner(System.in);

       //요리제목 입력 받기
        String title = sc.nextLine();
        
        // 별점 입력 받기
        int starRating = (int)sc.nextDouble();
        sc.nextLine(); //엔터 소비
        
        // 레시피 입력 받기
        String[] recipe = new String[10];
        for(int i = 0; i < recipe.length; i++) {
            recipe[i] = sc.nextLine();
        }

        System.out.println("["+title+"]");
        System.out.println("별점 : "+ starRating+ " ("+starRating/5f*100+"%)" );
        for (int i = 0; i < recipe.length; i++) {
            System.out.println(i+1+". " + recipe[i]);

새롭게 알게 된 사실 : 배열에 입력을 받는데 index[0] 번째가 공백으로 나와서 자꾸 왜그런가 했다.

원인 : next() / nextInt() / nextFloat() / nextLong() / nextBoolean() / nextDouble() 의 메서드들은 입력 버퍼에서 해당 형식의 값을 읽어오고 엔터나 공백 등을 구분자로 인식하여 처리하기 때문에 생기는 문제였다.
해결 : 따라서 명시적으로 nextLine() 메서드를 사용하여 엔터를 읽고 무시 하도록 처리해 줘야 했다.


git & gitHub

git 기본 명령어

  • 로컬 저장소 만들기
git init
  • 사용자 및 이메일 설정
git config user.name "GitHub 계정"
git config user.email "GitHub 이메일"
  • 원격 저장소 복사 (프로젝트 있을 때)
git clone gitHub경로
  • 원격 저장소 복사 (프로젝트 없을 때) : 원격 저장소 지정, branch 생성
git remote add origin gitHub경로
git branch 브랜치 명
  • 브랜치 전환
git checkout 브랜치명
  • 브랜치 생성과 전환을 동시에
git checkout -b 브랜치명
  • 브랜치 리스트 혹인
git branch
  • 설정 확인
git config --list
  • 소스코드 배포
git add 파일명 # 하나의 파일만 배포
git add . # 변경 파일 전체 배포
git commit -m "커멧 메시지"
git pust origin main # 
  • 저장소 상태 확인
git status
  • commit 취소 : git add 이전
git reset
  • 원격 저장소 업데이트 내용 가져오기
git pull
  • 확인 명령어 : git diff - 변경 파일 정보 / git log - commit 로그 호가인
git diff
git log

cli 명령어

$ pwd : 현재 작업중이 directory 확인
$ ls : 현재 위치의 모든 파일 및 폴더 리스트 확인
$ ls -a : 숨겨진 폴더까지 보여준다
$ mkdir 폴더명 : 현재 경로에 폴더 생성
$ touch 파일명 : 현재 경로에 파일 생성
$ cd 경로 : 터미널에서 폴더 위치 이동

0개의 댓글