Java 기본 개념

ChoRong0824·2023년 3월 6일
0

Java

목록 보기
7/31
post-thumbnail

해당 포스팅을 읽고 많은 분들의 도움이 되면,
좋겠다는 취지에서 작성하게 되었습니다.
자바의 기본 개념에 대해서 설명합니다.


JVM

  • 구성요소

Java Virtual Machine의 줄임말이며, '자바를 실행하기 위한 가상 기계(컴퓨터)'입니다.

Java 는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되기 위해선 OS 위에서 Java 를 실행시킬 무언가가 필요하다. 그게 바로 JVM이다.

즉, OS에 종속받지 않고 CPU 가 Java를 인식, 실행할 수 있게 하는 가상 컴퓨터입니다.


바이너리 코드

(== 이진코드)
컴퓨터가 인식할 수 있는 0과 1로 구성된 이진코드

즉, CPU가 이해하는 언어는 바이너리 코드, 가상 머신이 이해하는 코드는 바이트 코드입니다.


쓰레드

쓰레드란 프로세스 내에서 실제로 작업을 수행하는 주체를 의미합니다.
모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행하게 됩니다.
또하느 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스라고 합니다.


변수

변수를 사용하는 이유 : 데이터를 하나의 상징적인 의미로 담아두고 쉽게 재활용 하기 위해서 사용함

int : 메모리에서 4byte 공간 차지
8bit = 1 byte

참고)
int i =10;
10진수 : 10
2진수 : 1010

=> 위와같이 초기화 해줘도 컴퓨터는 2진수밖에 모르기 때문에 1010 으로 메모리에 대입됩니다.
(Tip, 계산기를 누르고 프로그래머 계산기를 이용하면 2진수를 쉽게 알 수 있음)


기본자료형과 객체자료형

  • 기본자료형은 데이터가 변수에 직접 저장되고,
    (기본자료형은 정수가 들어갈 때, 실수가 들어갈 때 등 다 메모리 크기가 다름)

  • 객체 자료형은 객체 메모리 주소가 변수에 저장된다.
    (항상 주소만 들어가기 때문에 4바이트의 크기만 가질 수 있습니다)
    (C계열에서 포인터라고 하고, JAVA에서는 레퍼런스라고 합니다)

기본 자료형

  • 정수형

    byte - 1byte
    char - 2byte (' '사용)
    short - 2byte
    int - 4byte
    long - 8byte

  • 실수형

    float - 4byte
    double - 8byte

  • 논리형

    boolean - 1byte (true || false)


객체 자료형

  • String

    문자열을 다룸


형 변환

  • 자동(묵시적) 형 변환
    작은 공간의 메모리에서 큰 공간의 메모리로 이동

    byte by =10;
    int in = by;
    sout

  • 명시적 형 변환
    큰 공간의 메모리에서 작은 공간의 메모리로 이동

    // 1
    int ivar = 100;
    byte bvar = (byte)ivar;
    sout
    // 2
    ivar = 123456;
    bvar = (byte)ivar;
    sout

참고, 명시적 형 변환은 데이터가 누실될 수 있습니다.


특수 문자와 서식 문자

특수 문자

\t: 탭
\n: 줄 바꿈
\': 작은 따옴표
\": 큰 따옴표
\\: 역슬래쉬

서식문자

printf()메서드 이용 (f는 format(형식)을 뜻함)
%d: 10진수
%o: 8진수
%x: 16진수
%c: 문자
%s: 문자열
%f: 실수

		//서식문자
		int num = 1;
        System.out.printf("%dㅇ", 10);
        System.out.printf("%d",num);
        System.out.printf("INFO: %d반 %d번",5,2);
		
        //문자
        System.out.printf("%c","A");
        
        //문자열
        System.out.printf("%s","Java");
        
        //실수
        float f =1.23f;
        System.out.printf("%f",f);
        double d = 1.231231d;
        System.out.printf("%f",d);

서식 문자를 이용해서 출력 문자의 정렬 및 소수점 제한 기능

	// 서식문자 정렬
    System.out.printf("%5d",1234); // 좌측정렬
	// 5칸을 만들어 놓고 우측정렬함
    System.out.printf("%5d",1234);
    // 서식문자 소수점제한
    System.out.printf("%.2f\n",1.23); //1.23 출력
    System.out.printf("%.3f\n",1.23); //1.230 출력 (좌측정렬)

연산자

피연산자 개수에 따라서 단항, 이항 그리고 삼항 연산자로 구분할 수 있습니다.

대입 연산자

= : 프로그램에선, 오른쪽 값을 왼쪽에 대입한다.

산술 연산자

/ : 나눗셈
% : 나머지

복합 대입연산자

+= : 더하고 대입
-= : 빼고 대입
*= : 곱하고 대입
/= : 나누고 대입
%= : 나머지를 대입

관계 연산자

두개의 피연산자를 비교해서 참/거짓의 결론을 도출함
> : a>b : a가 b보다 크면 참
< : a<b : a가 b보다 작으면 참
>= : a>=b : a가 b보다 크거나 같으면 참
<= : a<=b : a가 b보다 작거나 같으면 참
== : a==b : a와 b가 같으면 참
!= : a!=b : a와 b가 같지 않으면 참

증감 연산자

++ : 1만큼 증가
-- : 1만큼 감소

논리 연산자

&& 논리곱(AND) : a && b : a와 b가 모두 참이면 참
|| 논리합(OR) : a || b : a와 b중 하나라도 참이면 참
! 논리부정(NOT) : ! a:a의 상태를 부정

삼항 연산자

삼항 연산자로 두 개의 피연산자 연산 결과에 따라서 나머지 피연산자가 결정된다.
조건식 ? 식1 : 식2 : 조건식이 참이면 식1이 실행되고, 조건식이 거짓이면 식2가 실행된다.

비트 연산자

사실상, 자바에서는 메모리에 접근할 일이 거의 없기 때문에 잘 사용하진 않습니다.
(주로 c,c++)
그러나, 한번 숙지해두면 좋기 때문에 추가하였습니다.

& : AND 연산 = > a & b : a와 b가 모두 1이면 1
| : OR 연산 = > a | b : a와 b중 하나라도 1이면 1
^ ㅣ XOR 연산 = > a^b : a와 b가 같지 않으면 1

  // 비트 연산자
  x = 2; 
  y = 3;
  sout("x & y " + (x&y));
  sout("x | y" + (x|y));
  sout("x^y" + (x^y));
  //출력
  x & y : 2
  x | y : 3
  x ^ y : 1

배열

인덱스를 이용해서 자료형이 같은 데이터를 관리하는 것입니다.
(배열의 깅리 = n, 인덱스 0 ~ n-1 까지)
예) 아파트 호수 관리, 회사 사번 관리, 학급 학생 관리 등 ...

  //배열 선언 후 초기화
  int []arr = new int [배열 개수 입력];
  
  //인덱스 값 입력 방법 2가지
  // 1
  arr[0] = 100; ... 이런식으로 각각 입력 하거나,
  // 2
  arr[5] = {1,2,3,4,5}; 이런식으로 직접입력 가능

참고, Array 에러는 보통 인덱스 범위를 초과해서 나오는 에러입니다. (아닌 경우는 구글링)


배열과 메모리

기본 자료형 데이터를 담고 있는 변수와 달리 배열 변수는 배열 데이터의 주소를 담고 있습니다.

// 1 							//2
int i=10;						int [] i =new int[3];
// 변수 i 초기화				  	// 배열 i[] 주소
  • 배열 길이
    배열명.length

  • 배열 요소 출력
    Arrays.toString(배열명)

  • 배열 요소 복사

     ex)
     arrAtt3 = Arrays.copyOf(arrAtt1,arrAtt1.length);
     sout(Arrays.toString(arrAtt3));

    참고, 배열의 주소를 copy 한 것이 아니라 요소를 복사한 것임.
    즉, 내용은 같아도 주소는 다름



  • 배열 레퍼런스
    arrAtt2 = arr Att1;
    // 새로운 객체를 만드는 것이 아니라 배열1번을 배열 2번에 대입함.
    즉, 같은 레퍼런스를 가리키고 있다고 생각하면 됌.

    다차원 배열

    int [][] arrMul = new int [3][2]; // 3행 2열


조건문

조건의 결과에 따라 양자 택을 또는 다자 택일을 진행합니다.

  • 양자택일 : 주로 if 문
    문법) if(조건식) || if(조건식) else

  • 다자택일 : 주로 switch 문
    비교대상이 되는 결과값과 선택사항이 많을 경우 사용됩니다.

    //예
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int score = Integer.parseInt(br.readLine());
    
    switch(score){
    case 100:
    case 90:
    sout("수");
    break;
    
    case 80:
    sout("우");
    break;
    
    default:
    sout("재수강");
    break;
    }

반복문

프로그램 진행을 특정 조건에 따라 반복적으로 진행하는 것입니다.
for,while문 : 조건이 참일 때까지 반복 수행합니다.

for문

while문

while(true || false)

do-while문

while문과 비슷하며, 차이점은 조건 결과에 상관없이 무조건 최소한번은 {..}의 프로그램을 수행한다는 것입니다.

profile
컴퓨터공학과에 재학중이며, 백엔드를 지향하고 있습니다. 많이 부족하지만 열심히 노력해서 실력을 갈고 닦겠습니다. 부족하고 틀린 부분이 있을 수도 있지만 이쁘게 봐주시면 감사하겠습니다. 틀린 부분은 댓글 남겨주시면 제가 따로 학습 및 자료를 찾아봐서 제 것으로 만들도록 하겠습니다. 귀중한 시간 방문해주셔서 감사합니다.

0개의 댓글