[Java/자바] 1. 기초 Basic

자바 프로그램 구조

public class FirstClass{
    //실행할 내용
}

``public``: 자바 예약어
``class``: 자바 프로그램의 최소 구성 단위. 내부에 변수, 메소드 등이 정의됨.
``/** */``: javadoc 형태 주석처리 시 사용
``/* */``: 다중행 주석 처리 시 사용
``//``: 단일 행 주석 처리 시 사용

자바 애플리케이션 구조

  • 바이트 코드로 번역된 후에 바로 실행할 수 있는 일반 프로그램
  • 클래스 내에 java라는 명령어로 프로그램을 실행할 때 자동으로 호출되어 프로그램을 시작하는 main()메소드를 가져야 함

    public class JavaApp{
        // 변수 선언
        // 메소드 선언
        public static void main(String args[]){
            // 실행될 프로그램 코드
        }
    }

구문/문법

출력 문장 java.io 패키지

처리하기 어려운 입출력 작업을 효율적으로 지원하기 위한 패키지로, 이 패키지를 이용하여 입출력 프로그램을 구현

System.out.println("Hello World!");

//System: 클래스
//out: 변수
//println: 메소드

식별자 명명 규칠 Naming

식별자는 클래스, 변수, 메소드에 주어지는 이름으로 각 요소의 식별을 가능하게 함

  • 첫 문자는 A-Z, a-z, _, $, 유니코드로 시작
  • 특수문자 사용 불가
  • 대소문자 구별, 길이 제한 없음
  • 예약어 포함 가능
  • 숫자 사용 가능

👀 관례상 클래스 이름과 상수는 대분자로, 메소드 이름과 변수는 소문자로 시작

예약어

  • 시스템에서 일정 특성을 가진 언어로 등록된 것 for data type, program definition
  • 자바의 모든 예약어는 소문자로 이뤄짐

데이터 타입 Data type

  • 프로그램 언어에서는 사용할 데이터를 변수에 저장/관리
  • 정의된 변수를 통해 데이터의 의미를 정확하게 해석하여 사용

bit: 0, 1로 표현되는 데이터 표현의 가장 기본단위
byte: 1byte는 8bit로 하나의 문자를 표현함

표현형태 데이터타입 정의
논릿값 boolean 참/거짓
단일문자 char 16bit 유니코드 문자 데이터 - Unsigned
정수 byte 부호 있는 8bit 정수 - Signed
정수 short 부호 있는 16bit 정수 - Signed
정수 int 부호 있는 32bit 정수 - Signed, default
정수 long 부호 있는 64bit 정수 - Signed
실수 float 부호 있는 32bit 부동소수점 실수 - Signed
실수 double 부호 있는 64bit 부동소수점 실수 - Signed, default

데이터 타입의 범위 초과 시 발생하는 오류

  • 변수 초기화 시 데이터 타입의 범위를 초과하는 값을 저장하면 컴파일 시에 오류 발생
  • 연산 결과로 범위 초과 시에도 발생

변수

프로그래머가 메모리상의 데이터에 접근하기 위한 방법

  • 기본형 Primitive type boolean, char, byte, short, int, long, float, double
  • 참조형 Reference type 기본형 8가지를 제외한 나머지 타입

선언: JVM에게 데이터를 저장하기 위한 메모리 할당을 요청하는 것
할당: 선언 후 변수 초기화


전역(Global) 변수: 클래스 선언부 밑에 선언된 변수로, 여러 메소드에서 공통으로 사용 가능
지역(Local) 변수: 메소드 선언부 밑에 선언된 변수 또는 메소드 매개변수로 선언된 변수

형변환

변수의 타입을 다른 타입으로 변경하고자 할 때 형변환 연산자를 사용하여 변환

묵시적 형변환 Promotion

작은 데이터 타입에서 큰 데이터 타입으로 변환 시, 데이터 손실의 우려가 없어 자동 캐스팅. 즉, 형변환 연산자 사용하지 않아도 됨.

byte → short → int → long → float → double
char → int → long → float → double

순서로 변환 가능

명시적 형변환 Demotion

큰 데이터 타입에서 작은 데이터 타입으로 변환 시, 데이터 손실의 우려로 명시적 캐스팅. 축소 형변환

double avgAge = 24.56;
int age = (int)avgAge;

❗️데이터 타입이 축소되어 변환된 후에도 해당값을 표현할 수 있어야 한다.

연산자

산술 연산자

  • For 정수형, 실수형
  • 종류

    • 증감 연산자 ++, --
    • 부호 연산자 +, -, *, /
    • 나머지 연산자 %

비교 연산자

  • 대소 비교나 객체의 타입 비교 등에 사용
  • 비교 연산을 수행한 결과에 따라 true/false의 boolean 데이터 타입 return
  • < =, > =, = =, ! =

논리 연산자

  • boolean 데이터 타입에 적용
  • and &, or |, not !
  • &, |, !
  • &&, ||: 단축연산자로 첫 번째 값이 false인 경우 두 번째 값 여부를 판단하지 않고 바로 값을 return → 빠른 연산 처리 가능

비트 연산자

  • 값을 비트로 연산하는 연산자
  • 메모리를 최대한 효율적으로 활용해야 하는 경우 비트 단위로 데이터를 관리해야 함
연산자 사용법 설명
& 값1 & 값2 비트 단위 논리곱(And) 연산
| 값1 | 값2 비트 단위 논리합(Or) 연산
^ 값1 ^ 값2 비트 단위 배타 논리합(Exclusive or) 연산
~ ~값 비트 단위 보수(Not) 연산
>> 값1 >> 값2 값1을 비트 단위로 값2의 비트 수만큼 오른쪽으로 shift하고 왼쪽에는 현재 부호 비트가 채워짐, 즉 양수이면 0, 음수이면 1이 채워짐
<< 값1 << 값2 값1을 비트 단위로 값2의 비트 수만큼 왼쪽으로 shift하고 빈자리에는 0이 채워짐
>>> 값1 >>> 값2 값1을 비트 단위로 값2의 비트 수만큼 오른쪽으로 shift하고 빈자리에는 0이 채워짐

기타 연산자

  • 대입 연산자 =
  • 조건 삼항 연산자 ex: int tmp = a==1 ? a : 0;

배열

  • 같은 타입 데이터들의 모임

참조형 메모리 할당 & 구조

String greeting; // 실제로 저장되는 값은 "Hi"가 저장된 메모리의 주소값이다.
greeting = new String("Hi");

선언 & 사용

int[] javaScore: 일차원 배열 선언 예시

int scoreList[] = new int[100]; 
int[] scoreList = new int[100];
int[] scoreList = {45, 80}
scoreList.lenght // 배열 길이 알 수 있음

int[][] javaScore: 이차원 배열 선언 예시

int scoreList[][] = new int[3][4]; //3by4 배열 생성
int[] scoreList = new int[3][]; // 3행 설정 후 열은 다른 길이로 생성할 수 있음

main()

자바 애플리케이션에 필수적으로 있어야 하는 특수한 메소드로 자바 애플리케이션이 실행될 때 자동으로 실행됨

명령행 매개변수 main(_String args[])

  • main()의 매개변수는 String 데이터 타입의 배열
  • 공백을 구분자로 하여 여러 개의 값을 전달함
  • 숫자 사용시 문자열을 숫자로 캐스팅 해야함 using Integer.parseInt() or Double.parseDouble()

    public class JavaApp{
        public static void main(String args[]){
            int num1 = Integer.parseInt(args[0]);
            int num2 = Integer.parseInt(args[1]);
            
            int sum = num1 + num2;
            System.out.println(sum);
        }
    }

제어문

조건 제어문

  • if

    if(조건){
        //실행 코드
    }
  • if else

    if(조건){
        //실행 코드
    }else{
        //실행 코드
    }
  • if else if

    if(조건){
        //실행 코드
    }else if(조건){
        //실행 코드
    }else{
        //실행 코드
    }
  • switch

    switch (표현식){
        case 경우:
        ...
    }

반복 제어문

  • for

    for(int i=0; i< 10; i++){
        //반복할 코드
    }
  • while

    while(1){
        // 참일 동안 계속 반복할 코드
    }
  • do while

    do{
        // 일단 수행할 코드
    }while(조건식);

이동 제어문

  • break
  • continue
  • return

Hi! I'm @Yeseul Lee
Passionate for what I love

GitHubLinkedIn