- Java
- C언어의 기능 + 공통 실행환경(여러 기기에서 실행가능하도록 도와줌) + 데이터,메서드를 담는 클래스(바구니 틀)를 통해 객체(바구니)를 만들 수 있는 언어
- 객체 지향 언어
- 객체(object)란? 사람, 사물 등 세상에 존재하는 모든 것
- 특징 : 이름 , 나이, 주소, 혈액형 등
- 행동 : 걷는다, 숨쉰다 등
▶ 이러한 모든 세상의 객체를 담아서 만든것이 객체지향언어
* Java 컴파일러 (사람이 이해) ------------> Java -- 변환해 주는 것 --> class (운영체제가 이해)
* Input - System - Output : 인풋과 아웃풋 제한됨 (ex. 숫자만, 문자만)
-> 인풋이 들어가면 아웃풋이 나오는게 시스템!!
- JVM
- Java Virtual Machine 의 약자
- 여러가지 기기위에 Java 프로그램을 실행시킬 수 있는 가상의 기기를 만들어주는것
- JVM에서 프로그램 동작의 흐름
- Runtime : 프로그램이 실행중인 상태
- Runtime 시스템 : 프로그램이 실행중인 상태를 관리하는 시스템
- 바이트 코드
- Java 프로그램 변환코드 : 작성한 코드를 운영체제가 읽을 수 있는 코드로 Java 컴파일러가 변환한 코드
- Java 컴파일러 : 작성한 Java 코드을 운영체제가 읽을 수 있는 바이트 코드(.class 파일)로 변환하는 변환기
- 인터프리터 : Java .class 코드 해석기 / 운영체제가 읽은 바이트 코드💬를 기기(기계)가 실행할 수 있는 기계어로 번역
- JIT 컴파일러 : 빠른 Java .class 코드 해석기 / 인터프리터의 효율을 높여주는 서포터 해석기
- 메모리 영역 : Java 데이터를 저장하는 영역 / 운영체제로 부터 JVM이 할당받은 메모리 영역
- 클래스 로더 : Java .class 바이트 코드를 메모리 영역에 담는 운반기 / JVM으로 class(바이트 코드)를 불러와서 메모리에 저장
- 가비지 컬렉터 : Java 쓰레기 청소기 / 메모리 영역에서 안쓰는 데이터를 주기적으로 흡수해가는 청소기
- main 메소드 / System.out.print() / 주석
//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
// 클래스
// public : 제어자, 공공의, 공통의 -> 어디든 접근 가능
public class Main {
// [JDK]
// compiler : .java -> .class
// JRE
// JDB : 디버깅
// () : 소괄호
// {} : 중괄호
// [] : 대괄호
// main 메소드
// 자바 프로젝트(앱)은, 가장 먼저 클래스의 main 메소드를 실행한다
// = JVM의 약속
// static : 이 프로그램이 실행될 때 무조건 실행되는 녀석임
// void : 메서드의 출력값의 데이터 타입
// void : "아무것도 없다" -> 출력은 없다
// String[] args : 메개변수 자리
public static void main(String[] args) {
// 객체 : 특징(속성, 변수), 행동(메소드)
// print : 즐 바꿈 x
// println : 줄 바꿈 0
// System.out.println("Our First Project! :)");
// System.out.println("Our First :)");
// ln : line
System.out.println(7);
System.out.println(3);
System.out.println(3.14);
System.out.println("java");
}
}
- 변수와 상수
- 상수 : 항상 유지되는 것
- 변수 : 변하는 것기본형 변수
▶ 기본형 변수
- 논리형 변수 : boolean (True/False 값만 저장)
- 문자형 변수 : char (A, 1 같은 문자 하나만 저장)
- 정수형 변수 : byte, short, int, long (정수형 숫자값 저장)
- 정수형 변수 표현 범위
- byte : -128 ~ 127 범위의 숫자만 저장 가능
- short (2byte) 는 -32,768~32,767 범위의 숫자만 저장 가능
- int (4byte) 는 -21억~21억 범위의 숫자만 저장 가능
- long (8byte) 은 9백경 정도의 매우 큰수를 저장 가능
-> 각 변수 표현 범위를 넘는 숫자를 넣게되면 오버플로우가 발생하고, 해당 숫자를 출력해보면 입력값과 다른 값으로 표현됨 (표현 범위를 초과한것이기 때문에 입력한 값보다 작거나 음수인 값이 표현)
- 실수형 변수 : float, double (0.123, 0.99999 와 같은 소수점 실수값을 저장)
- float (4byte) : 3.4 * -10^38 ~ 3.4 * 10^38(long 보다 큼)범위의 숫자 저장이 가능
- double (8byte) : 1.7 * -10^308 ~ 1.7 * 10^308(long 보다 큼)범위의 숫자 저장이 가능
- float 는 소수점 7자리까지 double 은 소수점 16자리 까지 저장 가능
public class Main {
public static void main(String[] args) {
// 우리의 플레이 그라운드
// 1. boolean
// 변수를 선언해보자 => 타입 이름 = 값;
boolean flag = true;
flag = false;
System.out.println((flag));
}
}
public class Main {
public static void main(String[] args) {
// 우리의 플레이 그라운드
// 2. 문자형(char)
// 변수를 선언해보자 => 타입 이름 = 값;
char alphabet = 'A';
System.out.println((alphabet));
public class Main {
public static void main(String[] args) {
// 우리의 플레이 그라운드
// 3. 정수형(byte, short, int, long)
// 변수를 선언해보자 => 타입 이름 = 값;
byte bytenumber = 127; // -128 ~ 127 ( 1byte만 표현 가능 )
short shortnumber = 32456; // -32,768 ~ 32,767
int intnumber = 21384856;
long longnumber = 334328483285L;
System.out.println(bytenumber);
System.out.println(shortnumber);
System.out.println(intnumber);
System.out.println(longnumber);
}
}
public class Main {
public static void main(String[] args) {
// 우리의 플레이 그라운드
// 4. 실수형 float(4byte) = double(8byte)
// 변수를 선언해보자 => 타입 이름 = 값;
float floatnum = 0.123f;
double doublenum = 0.1231232;
// 참조한다.
System.out.println(floatnum);
System.out.println(doublenum);
}
}
▶ 참조형 변수 : 뭔가 복잡(한 번에 저장이 어렵기 때문에 어떤 곳에 별도로 저장)
- 문자열 변수 : String (Apple, 텍스트와 같은 문장 저장)
- 그 외 : Array, List 등 (객체, 배열, 리스트와 같은 단일 저장공간에 담을 수 없는 값을 저장)
public class Main {
public static void main(String[] args) {
// 우리의 플레이 그라운드
// 참조형
// 1. 문자열 변수
String helloworld = "Hello World!";
System.out.println(helloworld);
}
}
import java.lang.reflect.Array;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// 우리의 플레이 그라운드
// 참조형
// 1. 문자열 변수
// String helloworld = "Hello World!";
// 2. 배열
int[] a = {1,2,3};
System.out.println(Arrays.toString(a));
}
}
▶ 래퍼 클래스 변수 : 기본형 변수를 클래스로 한 번 랩핑(감싸는)하는 변수
import java.lang.reflect.Array;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// 우리의 플레이 그라운드
// 래퍼 클래스 (Wrapper Class 변수)
int number = 21;
Integer num = number; // 박싱
System.out.println(num.intValue()); // 언박싱
}
}
- 문자와 문자열
- 선언 관점 - 문자 (char) : 문자 한개만 저장하며 따옴표를 사용하여 값을 지정 (ex. char ex1 = 'a' )
- 저장 관점 - 문자 뒤에 \0(널문자)가 없음. (1 byte 만 쓰기 때문에 끝을 알아서 데이터만 저장)
- 선언 관점 - 문자열 (String) : 문자 여러개를 문장형태로 저장하며 쌍따옴표를 사용하여 범위를 지정 ( String ex1 = "a" )
- 저장 관점 - 문장의 끝에 \0(널문자)가 함께 저장 (몇개의 byte 를 쓸지 모르기 때문에 끝을 표시해야함)
- 참조형
- 참조형 변수 = 주소형 변수?
- 다른 기본형 변수가 실제 값을 저장하는 저장공간 이라면 참조형 변수는 실제 값이 아닌 원본값의 주소값을 저장
- 참조형 변수는 주소값을 저장하는 주소형 변수라고 불러도 됨
- 저장 관점에서 차이점
- 기본형 변수 : 원본값이 Stack 영역
- 참조형 변수 : 원본값이 Heap 영역 -> Stack 영역에는 따로 저장 해둔 원본값의 Heap 영역주소를 저장
- Stack : 정적(int->4byte)으로 할당된 메모리 영역
- 그래서, 크기가 몇 byte 인지 정해져 있는 기본형 변수를 저장
- 추가로, 크기가 정해져 있는 참조형 변수의 주소 값도 저장
- Heap : 동적(알 수 없을 때)으로 할당된 메모리 영역 / 별도 공간
- 크기가 계속 늘어날 수 있는 참조형 변수의 원본을 저장
// 숫자 -> 문자
// import : im(in) + port(항구)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int asciiNum = sc.nextInt();
char ch = (char)asciiNum; // 문자로 형변환을 해주면 숫자에 맞는 문자로 표현됨.
System.out.println(ch);
}
}
public class Main {
public static void main(String[] args) {
// 형 변환 예제 : 변수의 타입을 바꾸는 방법
// 문자열 -> 숫자
// 정수 -> 실수
// 실수 -> 정수
// double / float 형 -> int
// 실수 -> 정수(0.xxxx -> 0)
double doublenum = 10.101010;
float floatnum = 10.1010f;
// 변환(int)
int intnum;
intnum = (int)floatnum;
System.out.println(floatnum);
System.out.println("Int Type =>" + intnum);
// intnum = (int)doublenum; // double -> int
// System.out.println(doublenum);
// System.out.println("Int Type =>" + intnum);
}
}
public class Main {
public static void main(String[] args) {
// 형 변환 예제 : 변수의 타입을 바꾸는 방법
// 정수 -> 실수
// 실수 -> 정수
int intnum = 10;
double doublenum = (double)intnum;
float floatnum = (float)intnum;
System.out.println("doublenum =>" + doublenum);
System.out.println("floatnum =>" + floatnum);
}
}
public class Main {
public static void main(String[] args) {
// 변수 타입별 크기 순서
// byte(1) -> short(2) -> int(4) ->long(8) -> float(4 부동형 소수점을 쓰고 있어서 표현할 수 있는 식이 더 많음) -> double (8)
// 1. byte
byte byteNumber = 10;
int intNumber = byteNumber; // byte -> int 형변환
System.out.println(intNumber); // 10
// 2. char(1 byte) -> int(4 byte) 변환
char charAlphabet = 'A';
intNumber = charAlphabet; // char -> int 자동 형변환
System.out.println(intNumber); // A의 유니코드 : 65
// 3. int -> long number 형변환
intNumber = 100;
long longNumber = intNumber; // int -> number 형변환
System.out.println(longNumber); // 100
// 4. int -> double 형변환
intNumber = 200;
double doubleNumber = intNumber; // int -> double 형변환
System.out.println(doubleNumber); // 200.0 (소수점이 추가된 실수출력)
}
}
작은 타입 -> 큰 타입 ( 값 손실 x )
큰 타입 -> 작은 타입 ( 값 손실o )
- 1주차 과제
요리 레시피 메모장 만들기
- 입력값
- 내가 좋아하는 요리 제목을 먼저 입력합니다.
- 요리 별점을 1~5 사이의 소수점이 있는 실수로 입력해주세요. (ex. 3.5)
- 이어서 내가 좋아하는 요리 레시피를 한 문장씩 10문장을 입력합니다.
- 출력값
- 입력이 종료되면 요리 제목을 괄호로 감싸서 먼저 출력 해줍니다.
- 이어서, 요리 별점을 소수점을 제외한 정수로만 출력해줍니다. (ex. 3)
- 바로 뒤에 정수별점을 5점만점 퍼센트로 표현했을 때 값을 실수로 출력해줍니다. (ex. 60.0%)
- 이어서, 입력한 모든 문장 앞에 번호를 붙여서 모두 출력 해줍니다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String title = sc.nextLine();
float star = sc.nextFloat();
String text1 = sc.next();
String text2 = sc.next();
String text3 = sc.next();
String text4 = sc.next();
String text5 = sc.next();
String text6 = sc.next();
String text7 = sc.next();
String text8 = sc.next();
String text9 = sc.next();
String text10 = sc.next();
title = "[ " + title + " ]";
System.out.println(title);
int intRate = (int)star;
System.out.println(intRate);
double percentRate = intRate * 100 / 5.0 ;
System.out.println(percentRate);
System.out.println("1. " + text1);
System.out.println("2. " + text2);
System.out.println("3. " + text3);
System.out.println("4. " + text4);
System.out.println("5. " + text5);
System.out.println("6. " + text6);
System.out.println("7. " + text7);
System.out.println("8. " + text8);
System.out.println("9. " + text9);
System.out.println("10. " + text10);
}
}
보완해야하는 부분 / 부족한 점
깃허브 사용을 거의 안해봐서 익숙하지 않았다.
로컬저장소에 원본 저장소 등록까지는 했는데 커밋하고 푸쉬하는 과정에서 자꾸 src refspec master does not match any 을 비롯한 다양한 오류가 나서 main으로도 고쳐보고 했는데 해결되지 않았다. 무엇이 문제인지 도저히 모르겠어서 결국 다 지우고 포크부터 다시 해서 해결했다.
https://velog.io/@jisubin12/Github-%EC%99%B8%EB%B6%80%EC%A0%80%EC%9E%A5%EC%86%8C-fork-pull-request-%EB%8F%99%EA%B8%B0%ED%99%94-%ED%95%98%EA%B8%B0
https://corinediary.tistory.com/7
이 블로그가 정리가 잘 되어있어서 많은 도움을 받았다.
팀 프로젝트를 진행하면 깃허브 많이 사용할 텐데 열심히 공부해서 다음엔 시간을 반으로 줄여봐야겠다.