TIL(22-11-07) Java 문법기초-1 (1~11)

C one·2022년 11월 7일

1-1 Java 시작하기

Java 프로그램은 항상 main 이라는 함수부터 실행한다, class명은 상관없음

public class Main {

    public static void main(String[] args) {
	// write your code here
        System.out.println("Hello Wolrd");
    }
}

> println 출력후 줄바꿈하라는 의미이다

System.out.println("") 자주사용될 함수이다

  • IDE(통합 개발 환경(Integrated Development Environment, 여기서는 intelij) 에서 자주 사용하는 코드를 쉽게 입력할 수있는 기능이 있다 intelij에서 sout라고 입력하면 추천목록이 뜨는데 목록의 맨위를 선택하면 System.out.println("") 가 입력되는것을 볼수있다

1-2 변수와 상수

변수와 상수가 무엇일까?

  • 변수 : 어떠한 데이터를 저장하기 위한 메모리 공간의 이름이다.
    지속적으로 변수의 값을 변경할수 있다
int num = 5; //정수형 변수 선언 int
System.out.println(num);

String sparta = "Hello Sparta!"; // 문자형 변수 선언 String
System.out.println(sparta);

sparta = "Goodbye Sparta"; // 이미 선언된 변수에 다른 값을 할당
System.out.println(sparta);

출력되는 것은 num, sparta가 아닌 해당 변수에 할당된 값이 출력된다

5
Hello Sparta!
Goodbye Sparta

  • 상수 : 중간에 값이 변할 수 없으며 초기값을 끝까지 사용해야 한다
final int num2 = 10; // 상수형 변수 선언 (final로 선언 가능)
System.out.println(num2);
num2 = 50;

상수는 처음 할당된 값을 끝까지 사용하기 때문에
위의 코드를 실행하면, 컴파일 에러 가 발생한다 - 프로그래밍 언어의 문법적으로 불가능한 코드를 작성할 경우 발생하는 에러이다

(이 화면에서는 보이지 않지만 맨아래 num2에 빨간줄이 그어져 있다)

  • 변수와 상수의 선언
    변수를 선언할 때는 [접근제어자][변수의 자료형] [변수의 이름] 의 방식을 이용한다
    ex) final[접근제어자] int[변수의 자료형] num[변수의 이름] -> final int num

  • 변수의 이름을 붙이는 규칙
    Java에서는 CamelCase 라는 규칙으로 이름을 선언하는 것을 표준으로함,
    첫 글자는 소문자, 그 이후에 단어의 단위마다 첫 글자만 대문자
    ex) lowerCamelCase

1-3 자료형 - 기본 자료형, Primitive Type

기본 자료형 4가지

  1. 숫자
short s = 1; // 2byte로 표현할수 있는 자료
System.out.println(a);

int a = 3; // 정수형 변수 선언, 4byte로 표현할수 있는 자료
System.out.println(a);

long b = 1234567890L; // Long 정수형 변수 선언, 8byte로 표현할수 있는 자료
System.out.println(b);

float c = 5.5F; // float 실수형 변수 선언, 소수점을 표현할수 있는 자료 F(type)붙여야함
System.out.println(c);

double d = 9.12345678901234567890d; // double 실수형 변수 선언, 소수점을 표현할수 있는 자료
System.out.println(d);

// 다음처럼 각 자료형의 MAX, MIN 값을 가져올 수 있다
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.MAX_VALUE);
System.out.println(Long.MIN_VALUE);
System.out.println(Float.MAX_VALUE);
System.out.println(Float.MIN_VALUE);
System.out.println(Double.MAX_VALUE);
System.out.println(Double.MIN_VALUE);

결과

1
3
1234567890
5.5
9.123456789012346
32767
-32768
2147483647
-2147483648
9223372036854775807
-9223372036854775808
3.4028235E38
1.4E-45
1.7976931348623157E308
4.9E-324
  1. 문자

char(character) 문자 하나만 표현하기 때문에 여러개의 문자 담을수 없다.
ex) A(가능) ABC(불가능)

char alphabet = 'A'; // 문자형 변수 선언
System.out.println(alphabet);
// char type은 default 값이 없습니다.

결과

A
  1. 논리

참 거짓의 값을 변수로 선언

boolean fact = true; // 논리형 변수는 true, false의 값을 가진다.
System.out.println(fact);
// boolean type은 default 값이 없습니다.

결과

true
  1. 바이트
byte data = 'd'; 
System.out.println(data); 

결과

100

알파벳 d는 ASCII code(아스키코드) 에서 십진법으로 100이기 때문에 100이라는 글자가 출력됩니다

1-4 자료형 - 참조 자료형, 배열, 코딩 실력 향상 꿀팁

기본 자료형이 아닌 모든 자료형을 참조 자료형이라 한다
정확히는 Java의 인스턴스(객체)를 가리킬수 있는 자료형이다

String sparta = "sparta !!";
System.out.println(sparta);

int[] intArray = new int[] {1,2,3,4,5}; // int 배열을 만들면서(선언과) 동시에 1,2,3,4,5로 초기화
System.out.println(Arrays.toString(intArray));
  1. Class로 정의된 타입을 쓰는것이 참조자료형이다? String이 class

  2. [ ]는 배열이다
    int[ ] -> int배열(int기본자료형 아니기 때문에 참조 자료형이다), int를 여러개 담을수 있다

  • sout에 intArray적고 alt + enter 누르면 Arrays.toString() 추가된다 System.out.println(Arrays.toString(intArray));

  • Java에서는 Primitive Type을 빼고는 모두 Reference Type입니다. 이것은 Java의 언어적인 특징에서 기인함

Hello sparta
[1, 2, 3, 4, 5]

결과


배열이란?

동일한 자료형의 데이터를 연속된 공간에 저장하기 위한 자료구조이다
ex) 위의 결과, 정수형 변수를 저장하기위한 배열을 선언

  • 왜필요한가?
    10개의 데이터를 입력할 경우, 10개의 변수를 선언해야 하지만, 베열을 사용하면 짧고 간결하게 나타낼 수 있다

  • 선언방법
    자료형[] 변수 = new 자료형[배열의크기]

  • 인덱스
    배열은 데이터를 순차적으로 저장하는데, 인덱스를 통해 데이터에 접근할 수 있다
    인덱스 0 부터 시작함


int[] intEmptyArray = new int[5];
        System.out.println(Arrays.toString(intEmptyArray));
[0, 0, 0, 0, 0]

결과, 배열크기만 정했기 때문 int의 default값인 0으로 채워짐


 String[] stringEmptyArray = new String[5];
        System.out.println(Arrays.toString(stringEmptyArray));
[null, null, null, null, null]

결과, String은 int처럼 Primitive Type 아니기 때문에 default값이 없어, java에서 아무것도 없다는 뜻인 null


int[] intEmptyArray = new int[5]; // int의 5자리 배열 선언
        intEmptyArray[0] = 5; //인덱스를 통해 배열에 값 입력
        System.out.println(Arrays.toString(intEmptyArray));

        String[] season = {"spring", "summer", "autumn", "winter"};// 이렇게 선언과 동시에 값을 입력할 수도 있습니다.

        System.out.println(season[season.length-1]);//인덱스를 통해 배열에 접근하여 배열마지막 값 출력

        int[][] arr = new int[4][3];
        System.out.println(Arrays.deepToString(arr));//배열을 활용하여 2차원의 배열도 만들 수 있습니다
[5, 0, 0, 0, 0]
winter
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

결과


1-5 연산자

  • 산술연산자
int num1 = 10;
int num2 = 5; 

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); // 나머지 연산
15
5
50
2
0

  • 대입연산자
int num1 = 10;
        int num2 = 5;

        num1 += num2; // num1 = num1 + num2 
        System.out.println(num1);// 15

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

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

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

        num1 %= num2; // num1 = num1 % num2
        System.out.println(num1);// 0
15
10
50
10
0

  • 관계연산자
 int num1 = 10;
        int num2 = 20;
        int num3 = 10;

        System.out.println(num1 > num2); // 10 > 20
        System.out.println(num1 >= num3); // 10 >= 10
        System.out.println(num1 < num2); // 10 < 20
        System.out.println(num1 <= num2); // 10 <= 20
        System.out.println(num1 == num3); // 10 == 10 같다
        System.out.println(num1 != num2); // 10 != 20 같지않다
false
true
true
true
true
true

  • 논리연산자
boolean a = true;
boolean b = false;

    System.out.println(a && b);
// &&는 두가지 모두 참일 경우에는 true를, 그렇지 않을 경우에는 false를 반환합니다.
        System.out.println(a || b);
// ||는 두가지 모두 거짓일 경우에는 false를, 그렇지 않을 경우에는 true를 반환합니다.
        System.out.println(!b);
// !는 피연산자의 논리값을 바꿉니다. true는 false로 , false는 true로 반환합니다.
false
true
true

  • 비트 연산자
    스킵

1-6 조건문

  • if문
int check = 100;
int num1 = 150;
if (num1 > check) {
    System.out.println("100보다 큰 수입니다");
}
100보다 큰 수입니다

결과 : num1이 check보다 작았다면 아무것도 출력되지 않는다


int check = 100;
int num1 =50;

if(num1 > check){
	System.out.println("100보다 큰 수입니다");
} else if(num1 > 50){
	System.out.println("50보다 큰 수 입니다");
} else{
	System.out.println("50과 같거나 작은 수 입니다");
}
50과 같거나 작은 수 입니다

결과 : if / else if 위 순서대로 조건에 맞는지 확인하고 맞다면 그곳에서 출력한다
else 어느 조건에도 만족하지 않는다면 출력한다


  • switch문
char score = 'A';
switch (score) {
    case 'A':
        System.out.println("A등급입니다.");
        break;
    case 'B':
        System.out.println("B등급입니다.");
        break;
    case 'C':
        System.out.println("C등급입니다.");
        break;
    default:
        System.out.println("C등급보다 낮은 등급입니다.");
        break;
}
A등급입니다.

결과 :
break는 해당하는 case의 코드를 실행 후, switch문 밖으로 나가게 해주는 역할을 합니다
break; 를 작성하지 않으면 다음 case문도 실행되니 주의해야한다
default 어느 case도 해당하지 않으면


  • 삼항연산자
int a = 5;

String reuslt = (a < 10) ? "10보다 작습니다." : "10보다 큽니다.";
System.out.println(reuslt);
10보다 작습니다

결과 : (조건식) ? A : B
'?' 를 기준으로 조건식이 true일 경우에는 A 코드를, false일 경우에는 B 코드를 수행한다


1-7 조건문 퀴즈

Main함수

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int score = sc.nextInt();
}

스니펫을 붙여넣으면 Scanner 에 대해서 빨간줄(컴파일에러)가 뜰 것입니다. Scanner 가 어떤 클래스인지 찾을 정보가 코드에 없어서 인데요. IDE에서 alt+Enter를 누르셔서 추천에 나오는 첫 번째 java.util.Scanner 를 선택해서 엔터를 눌러주시면 자동으로 import 코드가 추가됩니다 , 직접 입력해도됨

import java.util.Scanner;
  • 입력받은 점수가 무슨 등급인지 출력해보세요.
    (100~91점 : A등급 , 90점~81점 : B등급 , 80점~71점 : C등급 , 그 외의 점수 : F등급)
if (score <= 100 && score > 90){
   System.out.println("A등급입니다.");
}
else if(score <=90 && score > 80){
   System.out.println("B등급입니다.");
}
else if(score <=80 && score > 70){
   System.out.println("C등급입니다.");
}
else{
   System.out.println("F등급입니다.");
}

정답


1-8 반복문

* 반복의 과정을 간단하게 하기위해 사용

  • for문
int sum = 0;

for (int i = 0; i < 10; i++) {
    sum += (i + 1);
}
System.out.println(sum);
55

결과 :
변수 i는 1부터 10까지 변할 때까지 1씩 더해집니다. i가 증감식에 의해 11이 되면 조건문에 위배되기 때문에 더이상의 반복문 실행은 진행 되지 않으며 출력됩니다.


  • for - each 문
String[] days = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};

        for ( day : days){
            System.out.println(day);
        }
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

결과 : 배열의 값들을 하나하나 변수에 담아서 출력한다


  • while문
int i = 0;
int sum = 0;
while (i < 10) {
    sum += i + 1;
    i += 1;
}
System.out.println(sum);
55

결과 : i가 10보다 작을때, sum은 i+1, i는 1씩더해줌 -> sum의 결과 1부터 10까지 더한값이 된다
만약, i +=1 코드가 없다면, i는 11을 넘길수 없기 때문에 실행시 무한루프에 빠지게 된다


break

int i = 0;
int sum = 0;
while (i < 10) {
    sum += i + 1;
    i += 1;
    if(i==5){
    break;
    }
}
System.out.println(sum);
15

결과 : i가 5와 같아질때 break; 되기 때문에 1부터 5까지 더한값인 15가 결과가 된다


continue

int i = 0;
        int sum = 0;
        while (i < 10) {
            if(i==4){
                i++;
                continue;
            }
            sum += i + 1;
            i += 1;

        }
        System.out.println(sum);
50

결과 : i가 10보다 작을때 반복하라, 만약 i가 4와 같다면 i에 1을 더하고 계속한다,
sum은 i+1, i는 1씩더해줌
(i가 4일때 위의 if를 만족하기 때문에 5가 빠진 1부터 10까지 더한값인 50이 결과가 된다)


  • do-while문
int i = 0;
int sum = 0;
	do{
    sum += i + 1;
    i += 1;
    } while (i < 10);
   
    System.out.println(sum);
55

결과 : do-while문은 while문과 다르게 코드블럭을 무조건 한번 실행후 , while 조건에 맞다면 돌아가서 다시 실행하게 된다


int i = 1;
int result = 0;
do {
    result += i;
    i += 1;
} while (i < 2);
System.out.println(result);
1

결과 : do안의 코드블럭을 실행하면 i값은 2가 되지만, do-while문은 do안의 코드블럭을 무조건 한번 실행후 while 조건에 부합하는지 확인하기 때문에, 첫번째 실행한 결과로 result값이 1이 나온다


1-9 반복문 퀴즈

/ 1
1부터 30까지 홀수의 합과 짝수의 합을 구하고 각각 출력하는 프로그램을 만들어보세요.

int evenSum = 0;
int oddSum = 0;
for (int i = 0; i < 30; i++) {
	int value = i + 1;
    if (value % 2 == 0) {
    //even
    evenSum += value;
    } else {
    //odd
    oddSum += value;
    }
 }
 System.out.println("odd : " + oddSum);
 System.out.println("even : " + evenSum);
odd : 225
even : 240
  • 결과 : value로 1부터 시작해서 30까지 반복 되도록 하였고, if문으로 짝수인지 홀수인지 구분하기위해 2로 나눈값이 0이면 짝수, 1이면 홀수로 구분함.

profile
🌽

0개의 댓글