[Java] 자바 입문1

wony·2024년 3월 23일

Java

목록 보기
1/30

0. 개요

주제 : 김영한님의 자바 입문 강의 총 정리
내용 : 이를 통해, 자바의 기본적인 코드를 작성할 수 있다!
최근 머신러닝, 딥러닝을 공부한다고 자바, 스프링 공부를 너무 소홀히해서 기록 및 정리도 할겸 올리려고 한다. 자바 ~ 스프링까지 꾸준히 올릴예정

1. 자바 표준 스펙

1) 자바 표준 스펙과 구현

자바는 표준 스펙과 구현으로 나눌 수 있다.

  • 자바 표준 스펙
    - 자바는 이렇게 만들어야 한다는 설계도이며, 문서이다.
    • 이 표준 스펙을 기반으로 여러 회사에서 실제 작동하는 자바를 만든다.
    • 자바 표준 스펙은 자바 커뮤니티 프로세스(JCP)를 통해 관리된다.
  • 다양한 자바 구현
    - 여러 회사에서 자바 표준 스펙에 맞추어 실제 작동하는 자바 프로그램을 개발한다.
    • 각각 장단점이 있다. 예를 들어, Amazon Corretto는 AWS에 최적화 되어 있다.

2) 컴파일과 실행

자바 프로그램은 컴파일과 실행 단계를 거친다.

  • Hello.java와 같은 자바 소스 코드를 개발자가 작성한다.
  • 자바 컴파일러를 사용해서 소스 코드를 컴파일 한다.
    - 자바가 제공하는 소스 코드를 컴파일 한다.
    • .java -> .class 파일이 생성된다.
    • 자바 소스 코드를 바이트코드로 변환하며 자바 가상 머신에서 더 빠르게 실행될 수 있게 최적화 하고 문법 오류도 검출한다.
  • 자바 프로그램을 실행한다.
    - 자바가 제공하는 java라는 프로그램을 사용한다.
    • JVM이 실행되면서 프로그램이 작동된다.

3) 자바와 운영체제 독립성

  • 일반적인 프로그램은 다른 운영체제에서 실행할 수 없다.

  • 예를 들어서 윈도우 프로그램은 MAC이나 리눅스에서 작동하지 않는다.

  • 왜냐하면 윈도우 프로그램은 윈도우 OS가 사용하는 명령어들로 구성되어 있기 때문이다. 해당 명령어는 다른 OS와는 호환되지 않는다.

  • but, 자바 프로그램은 자바가 설치된 모든 OS에서 실행할 수 있다.

자바 개발자는 특정 OS에 맞추어 개발을 하지 않아도 된다.
자바 개발자는 자바에 맞추어 개발하면 된다. OS 호환성 문제는 자바가 해결한다.

Hello.class 와 같이 컴파일된 자바 파일은 모든 자바 환경에서 실행할 수 있다.
윈도우 자바는 윈도우 OS가 사용하는 명령어들로 구성되어 있다. MAC이나 리눅스 자바도 본인의 OS가 사용하는 명령어들로 구성되어 있다. 개발자는 각 OS에 맞도록 자바를 설치하기만 하면 된다.

2. 변수

1) 변수 선언과 초기화

변수 선언

변수를 선언하면 컴퓨터의 메모리 공간을 확보해서 그곳에 데이터를 저장할 수 있다. 그리고 변수의 이름을 통해서 해당 메모리 공간에 접근할 수 있다. 쉽게 이야기해서 데이터를 보관할 수 있는 공간을 만들고 그곳에 이름을 부여한다.

public class Var4  {
	public static void main(String[] args){
    	int a;
        int b;
        
        int c,d;
        }
}

2) 변수 초기화

변수를 선언하고, 선언한 변수에 처음으로 값을 저장하는 것
**변수는 반드시 초기화 해주어야 한다!

3) 변수 타입 정리

실무에서 자주 사용하는 타입

정수

  • int, long : 자바는 정수에 기본으로 int를 사용한다. 만약 20억이 넘을 것 같으면 long을 쓴다.

실수

  • double : 실수는 고민하지 말고 double을 쓰면 된다.

불린형

  • boolean : true, false 참 거짓을 표현한다. 이후 조건문에서 자주 사용된다.
public class VarEx3  {
	public static void main(String[] args){
    	boolean booleanVar  = true;
        System.out.println(boolenanVar);
        
    }
}

문자열

  • String : 문자를 다룰 때는 문자 하나든 문자열이든 모두 String을 사용하는 것이 편리하다.

4) 변수 명명 규칙 정리

클래스는 대문자로 시작, 나머지는 소문자로 시작

  • 자바에서 클래스 이름의 첫 글자는 대문자로 시작한다. 그리고 나머지는 모두 첫 글자를 소문자로 시작한다. 여기에 낙타 표기법을 적용하면 된다. 이렇게 하면 모든 자바 관례를 다 외울 수 있다!

예시: 클래스는 첫 글자 대문자, 나머지는 모두 첫 글자 소문자로 시작 + 낙타 표기법
- 클래스: Person , OrderDetail
- 변수를 포함한 나머지: firstName , userAccount

여기에 예외가 딱 2개 있다.

  • 상수는 모두 대문자를 사용하고 언더바로 구분한다. (상수는 뒤에서 학습)
    USER_LIMIT
  • 패키지는 모두 소문자를 사용한다. (패키지는 뒤에서 학습)
    org.spring.boot

3. 연산자

4. 조건문

1) if 문

if 문은 특정 조건이 참인지 확인하고, 그 조건이 참일 경우 특정 코드 블록을 실행

public class If1 {
	public static void main(String[] args) {
		int age = 20; // 사용자 나이
		
        if (age >= 18) {
				System.out.println("성인입니다.");
		}
		if (age < 18) {
				System.out.println("미성년자입니다.");
		}
	}
}

2) else 문

if (condition) {
	// 조건이 참일 때 실행되는 코드
} else {
	// 만족하는 조건이 없을 때 실행되는 코드
}

3) else if 문

if-else 코드**
if (condition1) {
	// 조건1이 참일 때 실행되는 코드
} else if (condition2) {
	// 조건1이 거짓이고, 조건2가 참일 때 실행되는 코드
} else if (condition3) {
	// 조건2이 거짓이고, 조건3이 참일 때 실행되는 코드
} else {
	// 모든 조건이 거짓일 때 실행되는 코드
}

4) switch 문

switch문은 조건식에 해당하는 특정 값으로 실행할 코드를 선택한다.
(switch -> case -> break -> default)
반드시 break 적어줘야 한다!

switch (조건식) {
	case value1:
	// 조건식의 결과 값이 value1일 때 실행되는 코드
	break;

	case value2:
	// 조건식의 결과 값이 value2일 때 실행되는 코드
break;

default:
	// 조건식의 결과 값이 위의 어떤 값에도 해당하지 않을 때 실행되는 코드
}

예시

public class Switch2 {
	public static void main(String[] args) {
		//grade 1:1000, 2:2000, 3:3000, 나머지: 500
		int grade = 2;
	
    	int coupon;
		switch (grade) {
			case 1:
				coupon = 1000;
				break;
			case 2:
				coupon = 2000;
				break;
			case 3:
				coupon = 3000;
				break;
			default:
        		coupon = 5000;
	    }	
   	 	System.out.println("발급받은 쿠폰 " + coupon);
	}
}

5. 반복문(크게 while, for)

1) while 문

while (조건식) {
// 코드
}

예시)
public class While1_2 {
	public static void main(String[] args) {
		int count = 0;

		while (count < 3) {
			count++;
			System.out.println("현재 숫자는:" + count);
		}

    }
}

2) do-while 문

do-while문은 while문과 비슷하지만, 조건에 상관없이 무조건 한 번은 코드를 실행시킨다.

do {
	// 코드
} while (조건식);

3) for문

for문은 주로 반복 횟수가 정해져 있을 때 사용한다.

for (1.초기식; 2.조건식; 4.증감식) {
     // 3.코드
}
public class ForEx1 {
    public static void main(String[] args) {
        for(int count=1; count<=10; count++){
            System.out.println(count);
        }
    }
}

4) 정리

while문은 미리 변수의 타입을 지정하지만 for문은 for문 안에서 지정한다(너무 중요!)

while vs for

for문

  • 장점:
    - 초기화, 조건 체크, 반복 후의 작업을 한 줄에서 처리할 수 있어 편리하다.
    - 정해진 횟수만큼의 반복을 수행하는 경우에 사용하기 적합하다.
    - 루프 변수의 범위가 for 루프 블록에 제한되므로, 다른 곳에서 이 변수를 실수로 변경할 가능성이 적다.

  • 단점:
    - 루프의 조건이 루프 내부에서 변경되는 경우, for 루프는 관리하기 어렵다.
    - 복잡한 조건을 가진 반복문을 작성하기에는 while문이 더 적합할 수 있다.

while문

  • 장점:
    - 루프의 조건이 루프 내부에서 변경되는 경우, while 루프는 이를 관리하기 쉽다.
    - for 루프보다 더 복잡한 조건과 시나리오에 적합하다.
    - 조건이 충족되는 동안 계속해서 루프를 실행하며, 종료 시점을 명확하게 알 수 없는 경우에 유용하다.

  • 단점:
    - 초기화, 조건 체크, 반복 후의 작업이 분산되어 있어 코드를 이해하거나 작성하기 어려울 수 있다.
    - 루프 변수가 while 블록 바깥에서도 접근 가능하므로, 이 변수를 실수로 변경하는 상황이 발생할 수 있다.

한줄로 정리하자면 정해진 횟수만큼 반복을 수행해야 하면 for문을 사용하고 그렇지 않으면 while문을 사용하면 된다. 물론 이것이 항상 정답은 아니니 기준으로 삼는 정도로 이해하자

while문은 미리 변수의 타입을 지정하지만 for문은 for문 안에서 지정한다

[문1] 문제 : 자연수 출력

  • 처음 10개의 자연수를 출력하는 프로그램을 작성하세요.
# whilepublic class WhileEx1 {
    public static void main(String[] args) {
        int count = 1;

        while (count <= 10) {
            System.out.println(count);
            count++;
        }
    }
}

# forpublic class ForEx1 {
    public static void main(String[] args) {
        for(int count=1; count<=10; count++){
            System.out.println(count);
        }
    }
}

[문2] 문제 : 짝수 출력

  • 반복문을 사용하여 처음 10개의 짝수를 출력해 보세요.
# whilepublic class WhileEx2 {
    public static void main(String[] args) {
        int num =2;
        int count = 1;

        while (count<=10){
            System.out.println(num);
            num += 2;
            count ++;
        }
    }
}

# forpublic class ForEx2 {
    public static void main(String[] args) {
        for (int num=2, count = 1; count<10; num+=2, count++){
            System.out.println(num);
        }
    }
}

여기서 for문은 조건을 한 꺼번에 두 개씩 사용가능하다!

[문3] 문제 : 누적 합 계산

  • 반복문을 사용하여 1부터 max까지의 합을 계산하고 출력하는 프로그램 작성
# while문 작성
public class WhileEx3 {
    public static void main(String[] args) {
        int max = 100;

        int sum = 0;
        int i = 1;

        while (i<=max){
            sum +=i;
            i++;
        }
        System.out.println(sum);
    }
}

# for문 작성
public class ForEx3 {
    public static void main(String[] args) {
        int max = 100;

        int sum = 0;
        for (int i=0; i<=sum; i++){
            sum +=i;
        }
        System.out.println(sum);
    }
}
profile
안녕하세요. wony입니다.

0개의 댓글