[원격 강의] Java 실무 기초(1)

우정·2022년 11월 7일
0

[내일배움캠프] TIL

목록 보기
1/50

- 공부범위 -
1주차 1강 ~ 9강

문법

  1. 변수
  • int
  • String
  1. 상수
  • 앞에 final 이라는 키워드 붙여서 선언을 함
    • 코드
      public class Main {
          public static void main(String[] args) {
              // write your code here
              
              int number = 5;
              System.out.println(number);
        
              String sparta = "Hello Sparta";
              System.out.println(sparta);
        
              final int finalNumber = 1;
              System.out.println(finalNumber);
              finalNumber = 2;
              System.out.println(finalNumber);
          }
      }
      final int finalNumber = 1;
              System.out.println(finalNumber);
              sparta = "Goodbye Sparta";
              System.out.println(sparta);
      즉, 상수는 다른 값으로 재할당이 안 되지만 일반 변수는 재할당이 됨
  • 구조 설명
    final int finalNumber
    • final = 접근제어자 : 있을 수도 있고, 없을 수도 있음
    • 변수의 자료형 : int(숫자), String(글자) + 그 이후 변수의 이름에는 아무것이나 써도 되는데 맨 첫 글자에 숫자, 특수문자는 오지 못 함.
    • compile error는 아니지만 통용되는 네이밍 규칙(Camel Case) : 첫 글자는 무조건 소문자, 그 뒤 단어의 의미 단위마다 첫 글자를 대문자로, 그 뒤에는 소문자를 넣음
  1. 자료형
  • 기본 자료형(Primitive Type)
    • 숫자
      • short : 컴퓨터에서 2 바이트로 표현할 수 있는 정수형 자료형을 의미한다.
        • -32768 ~ 32767
      • int : 컴퓨터에서 4 바이트로 표현할 수 있는 정수형 자료형을 의미한다.
        • -20억~20억 , 기본적으로 많이 사용함
      • long : 컴퓨터에서 8 바이트로 표현할 수 있는 정수형 자료형을 의미한다.
        • int 보다 큰 숫자를 담아야 할 때 사용
      • float : 소숫점을 표현할 수 있는 자료형, 뒤에 F를붙여줘야함
      • double : 소숫점을 표현할 수 있는 자료형, float보다 큰 범위
    • 문자
      • char ‘’ : 글자 하나만 표현
    • 논리
      • boolean : true 또는 false의 값만 가질 수 있음
        • 출력하는 데에 사용하기 보다 반복문, 조건문 등 어떤 경우의 수를 판단할 때 자주 사용됨
    • 바이트
      • byte data = ‘d’; 출력하면 100이라는 숫자가 출력됨
        • 컴퓨터에서 표현되는 모든 데이터는 사실상 byte의 연속
        • d는 아스키코드(우리가 사용하는 문자를 컴퓨터는 무엇으로 인식하냐라는 것을 정리한 표)에서 십진법으로 100이기 때문에 100이 출력됨
  • 참조 자료형(Reference Type)
    • 기본 자료형이 아닌 모든 자료형을 뜻함.
    • JAVA의 인스턴스, 객체를 가리킬 수 있는 자료형
      • String
        String sparta = "Hello sparta";
                System.out.println(sparta);
      • class란? 윈도우 ctrl 누른 상태로 String으로 커서를 갖다대면 String이 선언된 구현체로 넘어감 `public final class String` << 이렇게 뜸! class로 정의된 타입을 쓸 때는 다 참조 자료형이다.
      • int : 기본자료형이지만, int[] : 배열 = int배열 : int를 여러 개를 담을 수 있는 것
        int[] intArray =new int[] {1, 2, 3, 4, 5};  // int배열을 만들면서 1,2,3,4,5로 초기화한 코드
        System.out.println(intArray); // intArray에 노란색 밑줄이 있는데 거기에 Alt+Enter 를 하면 
          
        int[] intArray = new int[] {1, 2, 3, 4, 5};
                System.out.println(Arrays.toString(intArray));  // 이렇게 변함
  1. 배열
  • 동일한 자료형의 데이터를 연속된 공간에 저장하기 위한 자료 구조
  • 인덱스 : 몇 번째 데이터에서 몇 번째에 해당하는 것, 0번 부터 시작
  • 코드
    import java.util.Arrays;
      
    public class Main {
        public static void main(String[] args) {
            // write your code here
      
            int[] intEmptyArray = new int[5];
            System.out.println(intEmptyArray);
        }
    }
    import java.util.Arrays;
      
    public class Main {
        public static void main(String[] args) {
            // write your code here
      
            int[] intEmptyArray = new int[5];
            System.out.println(Arrays.toString(intEmptyArray));  //intEmptyArray에서 Alt+Enter하면 이렇게 변함. 이렇게 변한 상태로 실행해줘야 정상적인 값이 나옴.
        }
    } // 아무것도 할당하지 않은 방법
    // intEmptyArray로 선언 해 준 것
    int[] intEmptyArray = new int[5];
    System.out.println(Arrays.toString(intEmptyArray));
      
    // 선언과 동시에 1, 2, 3, 4, 5로 초기화 해 준 것
    int [] intArray = new int[] {1, 2, 3, 4, 5};
    System.out.println(Arrays.toString(intArray));
      
    // String으로 선언만 한 Array
    String[] stringEmptyArray = new String[5];
    System.out.println(Arrays.toString(stringEmptyArray));
      
    // 선언과 동시에 초기화 해 준 것
    String[] season = {"봄", "여름", "가을", "겨울"};
    System.out.println(Arrays.toString(season));
  • 선언만 하고 초기화하지 않으면 해당하는 타입의 초기화되는 값을 디폴트로 가지게 됨. int은 0이 기본값, String 같은 참조자료형은 기본값이 없어서 null이라고 나옴
  • 꿀팁!
    • 선언만 하고 배열에 아무 것도 할당하지 않으면 이렇게 노란 색 밑줄이 뜨고 거기에 마우스를 가져다대면 내용이 나옴
    • 몇 번째 인덱스인지 모르겠는데 마지막에 있는 배열 값을 출력하고 싶을 땐!
      • System.out.println(season[season.length -1]); 0번 부터 세기 때문,,
  • 퀴즈
    1. 문자 변수 s, 그리고 정수형 변수 10을 선언하고 출력해보세요
      • char c = 'S';
        int number = 10;
          
        System.out.println(c);
        System.out.println(number);
        char c = 'S';  // 아스키코드로 83
        int number = 10;
          
        System.out.println(c + number);
        char c = 'S';  // 아스키코드로 83
        int number = 10;
          
        System.out.println(c + "" + number);
        char c = 'S';
        int number = 10;
          
        System.out.println(c + "\n" + number);  // '\'백슬러시는 행을 바꿔줘 라는 의미
    2. 크기가 3인 세 개짜리인 정수형 배열을 선언하고 10, 20, 30이라는 숫자 세 개를 한번 할당해보자. 그리고 그 배열에 30이라는 값을 선언한 배열 변수를 이용해 한번 출력해보자.
      • 혼자 해본 코드
        int[] intEmptyArray = new int[3];
        System.out.println(Arrays.toString(intEmptyArray));
          
        int [] intArray = new int[] {10, 20, 30};
        System.out.println(Arrays.toString(intArray));
        System.out.println(intArray[intArray.length -1]);
        지저분혀~~~
      • int[] scores = new int[] {10, 20, 30};
        System.out.println(scores[scores.length -1]);
  1. 연산자: 수식을 도와주는 기호들
  • 산술 연산자( +, -, *, /, % )
  • 대입 연산자( +=, -=, *=, /=, %= )
  • 관계 연산자( >, ≥, <, ≤, ==, ≠ )
  • 논리 연산자( and&&, or||, not! )
  • 비트 연산자
  • 퀴즈 : 주어진 코드를 보고 출력 결과를 생각해보자
    • 코드
      public class Main {
      	public static void main(String[] args) {
        	// write your code here
        	int num1 = 10;
        	int num2 = 3;
        	boolean bool1 = true;
        	boolean bool2 = false;
        	num1 += num1;
        	num2 *= num1;
        	System.out.println(num1);  // 20
        	System.out.println(num2);  // 60
        	System.out.println(bool1 && bool2);  //false
      	}
      }
  1. 조건문
  • if문

    int check = 100;
    int num1 = 150;
            
    if (num1 > check) {
          System.out.println("100보다 큰 수 입니다.");
    // if (50 > 100) {} 이렇게 if가 해당이 안 될 때에는 출력이 안 됨.
    // 논리형에 맞게 true 값이 안 나오면 sout 안의 값을 실행하지 않는다.
    int check = 100;
    int num1 = 51;  // 50으로 바꾸면 아무 값도 안 나옴. 
             	    // 150으로 바꾸면 첫 번째 값이 출력됨. 순서대로 진행되기 때문
             
    if(num1 > 100) {
          System.out.println("100보다 큰 수 입니다.");
    }else if(num1 > 50) {
          System.out.println("50보다 큰 수 입니다. 100보다 작거나 같습니다.");
  • switch문

    • 어떤 조건들을 미리 계층적으로 선언해놓는 방법

      char score = 'A';
      switch(score) {
      case'A':
            System.out.println("A등급 축하합니다.");
      break;  //뒤에 있는 case문들을 확인하지 않고 이 switch블록을 탈출하겠다. (써주는 편이 좋음)
      case'B':
            System.out.println("B등급");
      break;
      case'C':
            System.out.println("C등급");
      default:  // A, B, C case가 아닌 경우에는 이 값으로 출력해줘
            System.out.println("C보다 아래 등급입니다.");
      char score = 'B';
      switch(score) {
      case'A':
            System.out.println("A등급 축하합니다.");
      case'B':
            System.out.println("B등급");
      case'C':
            System.out.println("C등급");
      default:
            System.out.println("C보다 아래 등급입니다.");
          
  • 삼항 연산자

    • 항이 3개인 연산자
       int a = 5;
       String result = ( a < 10 ) ? "10보다 작습니다." : "10보다 큽니다";  // ?의 앞이 true이면 "":의 값을 실행, false이면 :""의 값을 실행 // ?앞 괄호 굳이 안 해도 됨.
       System.out.println(result);
           
  • 퀴즈
    • Main 함수
      public static void main(String[] args) {
      Scanner sc = new Scanner([System.in](http://system.in/));
      int score = sc.nextInt();
      }
      import java.util.Scanner;
      
      public class Main {
          public static void main(String[] args) {
              Scanner sc = new Scanner(System.in);  // System.in : system input 을 받을 거야
              int score = sc.nextInt();  // sc.nextInt() : 다음에 들어오는 숫자를 받을 거야
              
          }
      }
    • 조건
      • 숫자를 입력 받으면 입력받은 점수가 무슨 등급인지 출력해보자!
      • 91~100 : A등급
      • 81~90 : B등급
      • 71~80 : C등급
      • 그 외의 점수는 F등급
    • public static voidmain(String[] args) {
          Scanner sc =newScanner(System.in);
      int score = sc.nextInt();
       
      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등급");
          }
       
      // 이대로 하면 아무 것도 출력이 안 됨
      // 중간에 로딩될 때 점수를 입력하면 그에 맞는 값이 출력됨
      무조건 switch문 일 줄 알았는데 if문이라니…
      그리고 논리연산자 이건 아예 생각을 못함
      또 else if를 여러 개 적을 수 있는지 몰랐음,, 심지어 else 라고만 적는 줄 알아서 오류남!
      else if는 여러 번 사용 가능, if와 else는 한 번씩만!!
      switch문으로도 가능하다고 함!
      import java.util.Scanner;
       
      public class Main {
          public static void main(String[] args) {
              Scanner sc = new Scanner(System.in);  // System.in : system input 을 받을 거야
              int score = sc.nextInt();  // sc.nextInt() : 다음에 들어오는 숫자를 받을 거야
       
              switch (score/10) {
                  case 10:
                      System.out.println("A등급");
                      break;
                  case 9:
                      System.out.println("A등급");
                      break;
                  case 8:
                      System.out.println("B등급");
                      break;
                  case 7:
                      System.out.println("C등급");
                  default:
                      System.out.println("F등급");
              }
          }
      // 이렇게 하면 90점도 A등급 뜸...
      // switch문 안에 if문 쓸 수 있다는데 이러면 너무 지저분하지 않나?
      어떻게 하면 switch문으로도 표현할 수 있을지는..... 내일 하겠음ㅜ 피곤해
      case 10:
          System.out.println("A등급");
          break;
      case 9:
          System.out.println("A등급");
          break;
      // 위처럼 적는 것보다 아래처럼 적는 게 나음
      case 10:
      case 9:
          System.out.println("A등급");
          break;
  1. 반복문

    : 반복해서 처리해야할 것들을 로직으로 한 번만 만들어놓고 코드가 반복해서 실행하게 만드는 것

    • for문
      • 코드 설명

        for(int i = 0; i < 10; i++) {
        // ;왼쪽에 있는 것, int i = 0은 초기화 블럭
        // for문에 진입할 때 한 번 실행하는 구문을 여기다 써 주면 됨 (i를 1부터 10까지 반복)
        //중간(i < 10)은 조건문,이 반복문을 괄호 안이 참일 때 수행하게 됨
        //한 번 수행이 되고 난 다음,그 다음 조건을 체크해기 전에 수행해 줄 구문을 입력하면 됨,지금은 i값에 숫자 1을 더한 연산을 넣음
        
        int sum = 0;
        for(int i = 0; i < 10; i++) {
            sum += (i +1);
        }
        System.out.println(sum);
        // int i = 0, 0은 10보다 작으니까 참, 참이면 sum += (i +1)을 수행함, sum은 1이 됨.
        // i++확인, i가 1이 됨, 참, sum수행, sum은 2
        int sum = 0;
        for(int i = 1; i <= 10; i++) {
            sum += i;
        }
        System.out.println(sum);
        // 이게 직관적일 것 같은데 왜 이렇게 안 하나?
        // 컴퓨터의 index는 0부터니까 그냥.. i=0부터 함, 작거나 같다도 그냥 작다라고 하는게 개발자들에게는 더 직관적인 표현임.
    • while문 : 조건을 먼저 확인
      int i = 0;
      int sum = 0;
          
      while (i < 10) {  // while은 조건이 하나만 옴.
          	sum += (i +1);
          	i++;
      }
      System.out.println(sum);
          
      // 만약 i를 증가시켜주지 않으면?
      // 아무것도 출력이 안 됨. 무한루프에 빠짐.
      int i = 0;
      int sum = 0;
          
      while(i < 10) {// while은 조건이 하나만 옴.
      sum += (i +1);
          i++;
      if(i == 5) {
          	break; // 중간에 빠져나오고 싶으면 이렇게 만들어 주면 됨.
          }
      }
      System.out.println(sum);
      int i = 0;
      int sum = 0;
          
      // 5를 빼고 계산하고 싶을 때,
      while(i < 10) {
      if(i == 4) {
              i++;
      continue;//이 반복문 블럭의 밑 부분을 한 번 스킵하고 그 다음을 실행해
      }
          sum += (i +1);// i가 4일 때에는 수행하지 않음, i +1은 5, 5가 빠지게 됨
      i++;
      }
      System.out.println(sum);
        
    • do-while문 : 수행을 먼저 함
      int i = 0;
      int sum = 0;
          
      do {
         sum += (i +1);
         i++;
      } while (i < 10);  // 우선 do를 수행하고 while의 조건에 맞으면 다시 처음으로 가서 수행해줘
      System.out.println(sum);
        
    • for-each문
      // days는 String의 배열
      String[] days = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
          
      for (String day: days) { // days 배열에 있는 String 값을 하나씩 꺼내서 이 String 타입의 day 변수에 할당해 줌
      System.out.println(day);  // 그리고 한 번씩 실행시켜줌
  • 퀴즈

    1. 1부터 100까지의 합을 구하는 반복문 코드를 작성해보자

      public class Main {
          public static void main(String[] args) {
                  
              int sum = 0;
              for (int i = 0; i < 100; i++) {
                  sum += (i +1);
              }
              System.out.println(sum);
          }
      }
    2. 5초부터 시작하는 카운트 다운을 만들어보자

      public class Main {
          public static void main(String[] args) {
         
              for (int i = 5; i >= 0; i--) {
                  System.out.println("카운트다운: " + i);
              }
          }
      }
    3. 1부터 30까지 홀수의 합과 짝수의 합을 구하고 각각 출력해보자

      • 혼자 해본 코드
        int sum = 0;
        int odd = 0;
        for (int i = 0; i < 30; i++) {
        		if ((i/2) == 0){
        			  sum += (i +1);
            } else {
                odd += (i +1);
            }
            System.out.println("짝수 합: " + sum);
            System.out.println("홀수 합: " + odd);
        }
      • 정답
        int sumOdd = 0;
        int sumEven = 0;
        for (int i = 0; i < 30; i++) {
            int value = i + 1;
            if( value % 2 == 0 ) {
                // even
                sumEven += value;
            } else {
                // odd
                sumOdd += value;
            }
            System.out.println("Odd: " + sumOdd);
            System.out.println("Even: " + sumEven);
        int sumOdd = 0;
        int sumEven = 0;
        for (int i = 0; i < 30; i++) {
        		int value = i + 1;
        		if ( value % 2 == 0 ) {
        				// even
        				sumEven += value;
        	  }else{
        				// odd
        				sumOdd += value;
            }
        }
        System.out.println("odd: " + sumOdd);
        System.out.println("even: " + sumEven);
        
        // for문 뒤에 sout을 입력했어야 했는데 if문 뒤에 입력해서 개별적인 값이 나왔나 봄...
  • 오류..?

    •      Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
      
           You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
           See https://docs.gradle.org/7.4/userguide/command_line_interface.html#sec:command_line_warnings

      이건 또 왜 뜨는데,,,, 왜 구글에서 하란대로 해도 뜨는데,,, 걍 포기함.. 뭐 거슬리기만 하는 거니까,, 보다보니까 눈에 안 띄는 것 같기도 하구,,, 에휴

    • compileJava FAILED 이게 자꾸 떠서 이것저것 만져보다 결국 다시 삭제하고 알려준 방식대로 깔아서 했더니 해결... 아마 버전이 안맞았던 듯..?

    • 이제 문제 없나.. 했더니 한글 깨짐ㅎㅎㅎ 이것저것 또 만져보고 하다가 이것도 그냥 포기했다!!! 한글을 안 치면 되지 않을까,,,, 진짜 왜 이러는데 << 끝나고 산책갔다가 마저 다시 공부하려고 하니까 갑자기 됨... 뭐지????????

  • 느낀 점

    • 대입 연산자 이해 잘 안 됐다.. 조금 눈치껏 풀긴 했는데? 내가 이해한 게 맞나..? 싶음
    • 그래도 기본 문법 공부라 재밌었다!!
    • 근데 집중을 못했음.. 왜지? 주말에 쉬었다고 그러나,,, 내일은 이러면 안 된다.. 정신차리자
  • 자랑하고 싶은 것

    • 슬랙 잡담방 보고 인텔리제이 테마 바꿨당
      다크모드 안 써서 적응이 안 됐는데 테마 바꾸고 나니 편안~
      누리끼리한게 뭔가 블루라이트 필터 씌운 거 같고,,, 굳

0개의 댓글

관련 채용 정보