본문 바로가기
❤️‍🔥TIL (Today I Learned)

[TIL] 2022-11-07(6day)

by elicho91 2022. 11. 7.

JAVA 기초문법(1)



👉 프로그램 기본지식 사항 
ex) System.out.println("hello!"); 
.(점) : "가지고 있는~~"
;(세미콜론) : 하나의 명령이 종료되었다는 표시.
{} 중괄호 : 영역 

 

 

👉 자바란?
-1) 프로그래밍 언어
소스코드 -> 컴파일러 -> 실행파일 -> JVM .class 파일 실행 
 **.java               **.class
                              
-2) 자바
절차지향 : C           (순서대로)  - 속도가 빠름/ 메모리적음 (임베디드)
객체지향 : Java, C++   (모듈화)    - 유지보수 쉬움

-3) 자바의 특징
플랫폼 독립성(jvm을 통해 os 상관없이 실행)

 


👉 객체지향
멀티스레드 : 동시에 일 처리
가비지컬렉션 : 자바는 메모리 할당기능은 있지만, 반환(해제)기능은 없다.
자바 가상 기계의 가비지 컬렉션이 사용되지 않은 메모리를 자동 회수합니다.

-4) 자바 가상 기계 : jvm JAVA virtual machine
소프트웨어, 서로다른 플랫폼에서 자바 프로그램이 실행되는 동일한 환경을 제공한다. 
jvm 자체는 플랫폼 종속적이다.

자바소스파일 (.java) -> 컴파일 -> 실행파일 (.class) -> .class 실행 -> jvm 메모리 로딩 -> 
실행중 다른 클래스파일 or jdk 클래스파일이 필요하면 jvm이 파일 로딩/실행


-5) 자바 플랫폼
JDK : Java Development Kit : 자바 응용프로그램 개발할때 필요.
JDK 자바 컴파일러, 라이브러리, 샘플 소스등
Jre : 자바 응용 프로그램이 실행될때 필요한 소프트웨어(JVM)를 담고 있다.
JRE : Java Runtime Environment : 자바 프로그램을 실행할때 필요.

JDK 1.6 (자바 6) JDK 1.8(자바 8) JDK11(자바11)

-6) Java API : 남이 만들어 놓은 클래스 
java11 공식 문서 : https://docs.oracle.com/en/java/javase/11/docs/api/



👉 변수 variable
-1) 변수 : "하나의" 값을 저장할 수 있는 공간. 마지막에 저장한 값만 남는다. 
-2) 변수의 타입 : 정해진 타입만 값으로 저장(대입) 할 수 있다. 
-3) 변수의 명명규칙 : ♥소문자로 시작(클래스명과 구분)
공백 x, 특수문자 _ $ 만 허용, 키워드 x , 블럭({}중괄화) 안에 같은 이름 x
의미있는 이름으로 작성, 한글x 

 


👉 데이터 타입

문자 : Char  

문자열 : String

숫자 : 정수 -> byte, short, int, long
숫자 : 실수 -> float, double 
논리 : boolean 

 

✏️ 예시보기

더보기
import java.lang.reflect.Array;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        //숫자
        int number = 5;
        System.out.println(number);

        //문자열
        String sparta = "Hello Sparta";
        System.out.println(sparta);

        //상수 final(접근제어자)
        final int finalNumber = 1;
        System.out.println(finalNumber);

        // **기본 자료형
        //정수
        short s = 1;
        System.out.println(s);

        int a = 3;
        System.out.println(a);

        long b = 4;
        System.out.println(b);

        //실수
        float f = 5.5f;
        System.out.println(f);

        double d = 5.5;
        System.out.println(d);

        //표현할 수 있는 최대값과 최소값
        System.out.println(Short.MAX_VALUE);
        System.out.println(Short.MIN_VALUE);
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);
        System.out.println(Long.MIN_VALUE);
        System.out.println(Float.MIN_VALUE);
        System.out.println(Double.MIN_VALUE);

        //문자 자료형
        char c = 'A'; //글자 하나만
        System.out.println(c);

        //논리 자료형
        boolean fact = true;
        fact = false;
        System.out.println(fact);

        byte data = 'd';
        System.out.println(data);

        //**참조 자료형
        //
        String sparta1 = "Hello sparta";
        System.out.println(sparta1);

        //int배열 (int를 여러가지 담을 수 있는 배열), 선언과 동시에 초기화 (사이즈 지정X)
        int[] intArray = new int[]{1,2,3,4,5};
        System.out.println(Arrays.toString(intArray));

        //아무것도 할당하지 않은 배열 (사이즈만 지정)
        //int의 default 값 = 0
        int[] intEmptyArray = new int[5];
        System.out.println(Arrays.toString(intEmptyArray));

        //String의 defualt 값 - null
        String[] stringEmptyArray = new String[5];
        System.out.println(Arrays.toString(stringEmptyArray));

        String[] season = new String[]{"봄", "여름", "가을", "겨울"};
        System.out.println(Arrays.toString(season));

        //배열이 가지고 있는 길이 리턴
        System.out.println(season[season.length -1]);

        int[] arrayList = new int[]{10, 20, 30};
        System.out.println(arrayList[arrayList.length-1]);

        //**산술연산자
        int num1 = 10;
        int num2 = 20;
        System.out.println(num1+num2);
        System.out.println(num1-num2);
        System.out.println(num1*num2);
        System.out.println(num1/num2);
        System.out.println(num1%num2);

        //**대입
        num1 += num2;
        System.out.println(num1); //30

        num1 -= num2;
        System.out.println(num1); //10

        num1 *= num2;
        System.out.println(num1); //200

        System.out.println(num1 > num2); //boolean 타입 결과

        boolean b1 = true;
        boolean b2 = false;
        System.out.println(b1 && b2); //두개 모두 참이여야 참
        System.out.println(b1 || b2); //둘중 하나라도 참이면 참
        System.out.println(!b2); //결과값을 반대로
















    }
}


# 메모리 단위
1bit = 0 or 1를 저장하는 공간
1byte = 8bit
1024KB = 1MB
bit< byte < KB < MB < GB < TB < PB < EB < ZB < YB

-1) 기본형 (primitive type) : 8가지 
논리형 : boolean : 1byte : true  / false (개발에서 true = 1, false = 0)
문자형 : char : 2byte (unicode) : 한글자
정수 (음수/양수) : 소수점 없는 수 
byte  : 1 byte : -128 ~ 127 
short : 2 byte : -32768 ~ 32767
int   : 4 byte : 약 -21억 ~ 약 21억  (* 기본형)
long  : 8 byte : 많이 ~~~

실수  (음수/양수) : 소수점 있는 수

상수 : final(접근제어자)
float  : 4byte : 소수점 8자리까지    
double : 8byte : 소수점 16자리까지   (* 기본형)
* 값 표현방법
문자1개 : '' : 홑따옴표로 묶어서 표현 'A'
문자열 : "" : 겹따옴표 묶어서 표현 "Hello"
숫자 : 10 111 123 1234 3.14
논리형값 : true/false 

-2) 참조형 (Reference type) : 나중에..
문자열 : String : 크기제한 x 

 


👉 변수의 선언과 사용
-1) 변수 선언 : 값을 저장할 그릇만 만들기

타입 변수명;
int score; -> score라는 이름으로 4byte 정수형 데이터 저장할 메모리 그릇을 만들어둠

-2) 변수 값 대입(저장)

변수명 = 값;   (오른쪽에 있는 것을 왼쪽에 저장한다)   
score = 100;   (100을 score라는 곳에 저장한다.)

= : 대입연산자 : 오른편에 있는 모든 연산을 마친후 결과를 왼쪽 변수에 저장

-3) 선언 + 대입

타입 변수명 = 값;
int score = 100;

 

 

👉 변수의 사용
-1) 접미사 :
리터럴값 뒤에 데이터 타입을 명시해주는 방법

-2) 기본값 :
boolean : false; 
char    : ''; .'\u0000'; 
int     : 0;
double  : 0.0;
참조열  : null;

 


👉 출력문 : 콘솔에 출력하는 명령문 : 개발자가 확인용으로 많이 사용
-1) 종류
System.out.println();  : 엔터기능 O
System.out.print();    : 엔터기능 X (옆으로 값이 출력)
System.out.printf();   : 엔터기능 X 값을 출력할때 서식문자를 사용해야함 (몰라도 됨)

-2) 출력문 내 연산 
숫자 + 숫자 ==> 더한 결과 출력
"문자열" + "문자열" ==> 문자로 연결된 문자열 출력
"문자열" + 숫자 ==>  문자로 연결된 문자열 출력 
'문자' + 숫자 ==> 문자의 아스키코드값 + 숫자 결과값 숫자 출력 

-3) 이스케이프 문자 
: 출력문 내에서 사용되며, 어떠한 기능을 가지고 있는 특수 문자
(홑따옴표나 겹따옴표 안에 작성) 

"\n" : 줄바꿈 
"\t" : 탭간격
"\"" : 쌍따옴표 문자로 취급
"\'" : 홑따옴표 문자로 취급
"\\" : 역슬래쉬를 문자로 취급

 


👉 형변환 Casting, Type Conversiom, Converting
boolean 타입을 제외한 다른 타입들을 변환 시키는 것
(타입)변수 
char < int < long           // float < double

-1) 강제형변환 : (다운캐스팅, 디모션) : 큰타입 -> 작은타입 : 형변환 공식 적는다!
int a = 300;
byte b = a; ==> error !!
byte b = (byte)a; ==> 문법적으로 error는 안나지만, 값이 깨짐

double d = 1.5;
int i = (int)d; => i = 1

(int)3.5 + 4 => 7 
(double)4 + 4 = 8.0000000

-2) 자동형변환 : (업캐스팅, 프로모션) : 작은타입 -> 큰타입 : 형변환 공식 생략가능 
 
double d = 3.14 * 10; 31.4
   3.14 * 10.0 (int -> double로 자동 변환)

5 + 3.5 ==> 8.5
5 / 2   ==> 2      5 / (double)2 ===> 2.5 
int/int ==> int


👉 배열 array 
-1) 같은 타입의 여러 변수를 합쳐놓은 것


-2) 데이터 저장 공간 수정/ 변경이 안된다


-3) 변수 = 값 1 개 저장, 배열은 값 여러개 저장


-4) 선언
타입[] 배열명; int[] score;
타입 배열명[]; int score[];
                       int [] score ;
int : 배열에 저장될 데이터의 타입 (숫자)
[]  : 배열 선언 (이건 배열이다!)
score: 배열에 대한 레퍼런스(참조- 저장위치 주소) 변수 

선언만으로는 배열의 공간이 할당되지 않으며, score 라는 레퍼런스 변수만 생성된다.  (stack / heap 메모리)
레퍼런스 변수는 배열공간에 대한 주소값 (레퍼런스값)을 가지며 그 변수 자체가 배열은 아니다.
배열 공간이 생성되지 않았으므로 선언만 할시, 레퍼런스 변수의 초기값은 null 이다.
-> 레퍼런스 : 주소, 레퍼런스변수 : 주소를 저장하는 변수

-5) 생성
레퍼런스 변수 = new 타입[방개수];
score = new int[5];
new : 메모리 할당 키워드
int : 배열 타입 : 실제 저장될 데이터의 타입
[5] : 배열 방의 개수

-6) 인덱스 index
배열의 방은 0부터 시작하는 방번호가 매겨지며 이를 인덱스라 한다.
인덱스를 이용하여 배열의 각 방에 접근 가능.
score[0] = 10;

-7) length
배열의 길이 (방개수)를 알여주는 명령어.
score.length --> 5

-8) 배열은 연속되는 숫자를 방 번호로 갖고 있어서 (index) 반복문과 함께 자주 사용된다.


-9) 초기화
int [] score = {100, 90, 80, 70 60}; //(줄임)
int [] score = new int[]{100,90, 80 ,70, 60}; //(원형)

중괄호 {}안의 요소 개수를 계산해서 방 크기를 자동으로 만들어주고, 순서대로 값도 대입시켜줌.
선언과 초기화를 따로 분리시키면 에러!!
int [] score;
score = {1,2,3,4} (x) 에러남
int [] score = {1,2,3,4};  



👉 입력문
Scanner : 자바패키지에서 제공하는 클래스. 입력 받을 때 사용. 

#1. import 문 사용 : 
자바 파일 최상단 package....; 명령문 밑에 작성
import java.util.Scanner;

#2. Scanner 객체 생성 (main 안에 작성) 
Scanner sc= new Scanner(System.in); 

#3. 입력받기 (받고싶은 만큼 메서드 작성)
String 변수 = sc.nextLine(); 

#4. Scanner 객체담기
sc.close();

 

import java.util.Scanner;

public class Main3 {
    public static void main(String[] args){

        Scanner sc = new Scanner(System.in);
        int score = sc.nextInt();

        if(score >= 90){
            System.out.println("A등급입니다.");
        }else if(score >= 80){
            System.out.println("B등급입니다.");
        }else if(score >= 70){
            System.out.println("C등급입니다.");
        }else{
            System.out.println("F등급입니다.");
        }
    }
}

 



🙋‍♂️ 소감 : 

오늘부터 본격적인 수업자료가 오픈되었다.

알고 있는 단순한 내용이라도 눈으로만 보는 것과 직접 타이핑해서 결과를 확인하는 것은 확실히 느낌이 다르다.

😈 아는 내용이라고 그냥 넘어가는건 금물! 😈

 

'❤️‍🔥TIL (Today I Learned)' 카테고리의 다른 글

[TIL] 2022-11-09(8day)  (0) 2022.11.09
[TIL] 2022-11-08(7day)  (0) 2022.11.08
[TIL] 2022-11-04(5day)  (0) 2022.11.04
[TIL] 2022-11-03(4day)  (0) 2022.11.03
[TIL] 2022-11-02(3day)  (0) 2022.11.02

댓글