기초

자바 기초 복기1

Bordercolli 2024. 12. 15. 15:06
728x90

[취준 스토리]

18개의 서류를 난사했다...^^

서합은 

대기업1 중견2 공기업1 

한 달동안 정말 많이 눈물흘렸지만....겨우 한 달인걸

무기력으로 기회를 놓칠 수 없다. 

토요일 시험 화이팅!

 

😀 변수

[main함수]

public class hello {

    public static void main(String[] args){ // 프로그램 시작점  hello 라는 파일을 만듦
        System.out.println("hello java"); 
        // println -> 값을 콘솔에 출력하는 기능
        // 세미콜론 필수
    }
}

 

[주석]

public class hello2 {
    public static void main(String[] args){
        /*   -> 여러 줄 주석
        System.out.println("hello java1");
        System.out.println("hello java2");
        System.out.println("hello java3");
         */

        // System.out.println("hello java1"); -> 한 줄 주석
    }
}

[자바란?]

장점

1. 표준 스펙에 맞춰서 개발 되어 있어서, 환경을 변경하여도 상관x

2. 자바가 설치된 모든 os에서 실행할 수 있다. ( os호환성 문제는 자바가 해결해줌 )

3. 자바의 운영체제 독립성 때문에, 환경에 맞추어 자바를 설치하는 것이 가능하다.

 

[package]

-> 디렉토리

1. 자바 파일을 구분하기 위한 폴더

2. variable라는 패키지를 만들었다면, 해당 패키지에 들어가는 자바 파일 첫 줄에 package variable와 같이 소속된 패키지를 선언해주어야 한다.

3 자바 파일이 위치하는 패키지와 package variable 선언 위치가 같아야 한다.

 

[변수타입]

package variable;

public class var7 {
    public static void main(String[] args) {
        int a=100;  // 정수
        double b= 10.5;  // 실수
        boolean c=true;    //불리언(true, false) 입력가능
        char d='A';
        String e="hello java";  //문자열을 다루기 위한 특별한 타입

        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
        System.out.println(e);
    }
}

* 문자열만 문두에 대문자 사용함

 

package variable;

public class var8 {
    public static void main(String[] args) {
        byte b = 127; // -128 ~ 127 "2의 8승"
        short s = 32767; // -32,768 ~ 32,767 "2의 16승"
        int i = 2147483647; // -2,147,483,648 ~ 2,147,483,647 (약 20억) "2의 32승"
        long l=9223372036854775807L; // 20억 넘어가면 long 사용   "2의 64승"

        float f=10.0f;
        double d=10.0;
    }
}

 

타입 지정

1. 정수 리티럴은 int를 기본으로 사용한다. 숫자가 int범위인 약 20억을 넘어가면 L을 붙여서 정수 리터럴을 long으로 변경해야 한다. (대분자 L, 소문자 l 모두 가능하다. 그런데 소문자 l은 숫자 1과 착각할 수 있어서 권장x)

2. 실수 리터럴은 기본이 double을 사용한다. float형을 사용하려면 f를 붙여서 float형으로 지정해야 한다.

 

long : 8byte        int : 4byte        float : 4byte        double : 8byte        boolean : 1byte

 

f, L을 꼭 붙혀야 한다.

 

byte 1byte, 표현 길이가 너무 작다. 
대신에 파일을 바이트 단위로 다루기 때문에 파일 전송, 파일 복사 등에 주로 사용된다. 
short 2byte, 표현의 길이가 너무 작다
자바는 기본으로 4byte를 효율적으로 계산하도록 설계되어 있다. 
float 4byte, 표현 길이와 정밀도가 낮다. 실수형은 double을 사용하자.
char 2byte, 문자 하나를 표현할 일은 거의 없음

-> 실무에서 거의 사용x

 

[변수 명명규칙]

낙타 표기법: 변수 이름은 소문자로 시작하는 낙타표기법을 사용한다. 첫 번쨰 단어는 소문자로 시작하고 그 이후 단어는 대문자로 시작하는 낙타 표기법를 사용한다. ex) orderDetail, myAccount

* 대신 클래스는 첫 단어 대문자를 사용함

* 예외 

1) 상수는 모두 대문자를 사용하고 언더바로 구분한다(상수는 뒤에서 학습) : USER_LIMIT

2) 패키지는 모두 소문자를 사용한다. : org.spring.boot

 

[문제와 풀이]

1. 다음 코드에 반복해서 나오는 숫자 4,3을 다른 숫자로 한 번에 변경할 수 있도록 다음을 변수 num1, num2를 사용하도록 변경해보세요.

package variable.ex;

public class VarEx1Question {
    public static void main(String[] args) {
        int num1=4, num2=3;
        System.out.println(num1+num2);
        System.out.println(num1-num2);
        System.out.println(num1*num2);
    }
}

 

2. long타입의 변수를 선언하고, 그 변수를 백억으로 초기화한 후 출력하는 프로그램을 작성하세요

boolean타입의 변수를 선언하고 그 변수를 true로 초기화한 후 출력하는 프로그램을 작성하세요

package variable.ex;

public class VarEx1Question {
    public static void main(String[] args) {
        long longVar=10000000000L;
        System.out.println(longVar);

        boolean booleanVar=true;
        System.out.println(boolVar);
    }
}

 

😀 연산자

[산술 연산자]

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        int a=5;
        int b=2;

        int sum=a+b;
        System.out.println("a+b="+sum); // 띄어쓰기 없이
    }
}

 

0으로 나누는 건 허용x -> arithmeticException

 

[문자열 연산자]

+ 기호를 사용하여 문자열을 연결할 수 있다.

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        String result1= "hello" + "world";
        System.out.println(result1);

        String s1="string1";
        String s2="string2";
        String result2=s1+s2;
        System.out.println(result2);

        // 문자열과 숫자 더하기
        String result3="a+b="+10;  //10을 문자열로 바꾸어 버림
        System.out.println(result3);
    }
}

 

[연산자 우선순위]

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        int sum1=1+2*3;
        int sum2=(1+2)*3;
        System.out.println("sum1="+sum1);
        System.out.println("sum2="+sum2);
    }
}

 

* 암기법 

대입 연산자가 우선순위가 제일 낮고 괄호가 제일 높음

1. 괄호()

2. 단항-> 산술 -> shift연산자 -> 비교 -> 등식 -> 비트 -> 논리 -> 삼항 -> 대입 

 

[증감 연산자]

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        int a=0;
        a=a+1;
        System.out.println("a= "+a);  //1

        a=a++;   // a의 현재 값을 a에 먼저 대입하고 그 후 a값을 증가시킴
        System.out.println("a= " + a);//1

        a=++a;
        System.out.println("a= " + a); //2
    }
}

 

 

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        int a=0, b=0;
        b=a++;
        System.out.println("b = " + b + " a= " + a);//0,1
    }
}
package Operator;

public class Operator1 {
    public static void main(String[] args) {
        int a=0, b=0;
        b=++a;
        System.out.println("b = " + b + " a= " + a);//1,1
    }
}

 

-> 전산인적성에 나옴...주의

 

[비교 연산자]

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        int a=2;
        int b=3;

        System.out.println(a==b);  //  false
        System.out.println(a!=b);  //  true
        System.out.println(a>b);  //  false
        System.out.println(a<b);  //  true
        System.out.println(a>=b);  //  false
        System.out.println(a<=b);  //  true
    }
}

 

☆ 단, 문자열이 같은지 비교할 때는 ==이 아니라 .equals() 메서드를 사용 ☆

 

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        String str1="문자열1";
        String str2="문자열2";

        boolean result1="hello".equals("hello");
        boolean result2=str1.equals("문자열1");
        boolean result3=str1.equals(str2);

        System.out.println(result1);  // true
        System.out.println(result2);  // true
        System.out.println(result3);  // false
    }
}

 

[논리연산자]

boolean형인 true, false를 비교하는데 사용한다.

 

&& (그리고)   ||  (또는)   ! (부정)

 

[대입 연산자]

+=    -=      %=      *=

 

[문제풀이]

1. int형 변수 score가 80점 이상이고, 100점 이하이면 ture를 출력하고, 아니면 false를 출력하세요

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        int score=80;
        boolean result=score>=80&&score<=100;
        System.out.println(result);
    }
}

 

😀 조건문

 

 

[if~else]

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        int age=20;
        if(age>=18){
            System.out.println("성인입니다");
        }else{
            System.out.println("미성년자입니다.");
        }
    }
}

 

[else if]

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        int age=14;

        if (age<=7){
            System.out.println("미취학");
        }else if(age<=13){
            System.out.println("초등학생");
        }else if(age<=16){
            System.out.println("중학생");
        }else if(age<19){
            System.out.println("고등학생");
        }else{
            System.out.println("성인");
        }
    }
}

 

[if~else if / if 만 따로]

문제1)

1. 아이템 가격이 만원 이상일때, 1000원 할인

2. 나이가 10살 이하일때, 1000원 할인

-> 중복 할인이 가능한 경우

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        int item=10000, age=9;

        if(item>=10000){
            item-=1000;
        }

        if(age<=10){
            item-=1000;
        }
        System.out.println(item);
    }
}

 

문제2)

1. 아이템 가격이 만원 이상일때, 1000원 할인

2. 나이가 10살 이하일때, 1000원 할인

-> 중복 할인이 불가능한 경우

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        int item=10000, age=9;

        if(item>=10000){
            item-=1000;
        }else if(age<=10){
            item-=1000;
        }
        System.out.println(item);
    }
}

 

블럭{} 없이 실행하기

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        if(true)
            System.out.println("if문에서 실행됨");
            System.out.println("if문에서 실행안됨");  // 블럭없이 수행되는 것과 같음
    }
}

 

[switch]

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        int grade=2;
        
        int coupon;
        if(grade==1){
            coupon=1000;
        }else if(grade==2){
            coupon=2000;
        }else if(grade==3){
            coupon=3000;
        }else{
            coupon=500;
        }
        System.out.println("발급받은 쿠폰" + coupon);
    }
}

이 구조와 동일

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        int grade=2;

        int coupon;
        switch(grade){
            case 1:
                coupon=1000;
                break;
            case 2:
                coupon=2000;
                break;
            case 3:
                coupon=3000;
                break;
            default:
                coupon=500;
        }
        System.out.println("발급받은 쿠폰" + coupon);
    }
}

 

2등급도 3등급처럼 3000원 쿠폰을 준다고 하면?

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        int grade=2;

        int coupon;
        switch(grade){
            case 1:
                coupon=1000;
                break;
            case 2:
            case 3:    // 실행 문장이 없어서 다음 문장으로 넘어가게 됨
                coupon=3000;
                break;
            default:
                coupon=500;
        }
        System.out.println("발급받은 쿠폰" + coupon);
    }
}

 

[새로운 switch]

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        int grade=2;

        int coupon=switch(grade){
            case 1-> 1000;
            case 2-> 2000;
            case 3-> 3000;
            default -> 500;
        };
        System.out.println("발급받은 쿠폰 " + coupon);
    }
}

 

[삼항 연산자]

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        int age=18;
        String status=(age>=18)? "성인": "미성년자";
        System.out.println("age = " + age + " status = " + status);
    }
}

 

😀 문제풀이

1. 환율 계산하기

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        int dollar=1300;
        int count=0;

        if(count<0){
            System.out.println("잘못된 금액입니다.");
        }else if(count==0){
            System.out.println("환전할 금액이 없습니다.");
        }else{
            System.out.println("환전 금액은 " + count*dollar + "원입니다.");
        }
    }
}

 

2. 평점에 따른 영화 추천하기

요청한 평점 이상의 영화를 찾아서 추천하는 프로그램 작성

평점 9 -> 어바웃타임

평점 8 -> 토이 스토리

평점 7 -> 고질라

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        double rating=7.1;

        if(rating<=9){
            System.out.println("'어바웃타임'을 추천합니다.");
        }
         if(rating<=8){
            System.out.println("'토이 스토리'을 추천합니다.");
        }
         if(rating<=7){
            System.out.println("'고질라'을 추천합니다.");
        }
    }
}

 

3. switch문 사용하여 학점 성취도 출력하기

string grade라는 문자열을 만들고, 학점에 따라서 성취도를 출력하는 프로그램 작성하기

package Operator;

public class Operator1 {
    public static void main(String[] args) {
       String grade="A";

       switch (grade){
           case "A":
               System.out.println("grade: " + grade);
               System.out.println("탁월한 성과입니다!");
               break;
           case "B":
               System.out.println("grade: " + grade);
               System.out.println("좋은 성과입니다!");
               break;
           case "C":
               System.out.println("grade: " + grade);
               System.out.println("준수한 성과입니다!");
               break;
           case "D":
               System.out.println("grade: " + grade);
               System.out.println("향상이 필요합니다.");
               break;
           case "F":
               System.out.println("grade: " + grade);
               System.out.println("불합격입니다.");
               break;
           default:
               System.out.println("잘못된 학점입니다.");
       }
    }
}

 

4. 더 큰 숫자 찾기

a의 값은 10이고, b의 값은 20이다. 삼항 연산자를 사용하여 두 숫자 중 더 큰 숫자를 출력하는 코드를 작성하자

package Operator;

public class Operator1 {
    public static void main(String[] args) {
       int a=10, b=20;
       int result=(a>b)? a:b;
        System.out.println("더 큰 숫자는? " + result);
    }
}

 

5. 홀수 짝수 찾기

정수x 가 주어지면 x가 짝수이면 "짝수"를, x가 홀수이면 "홀수"를 출력하는 프로그램을 ㅈ가성하자.

삼항연산자를 사용

package Operator;

public class Operator1 {
    public static void main(String[] args) {
       int x=10;
       String result=(x%2==0)? "짝수":"홀수";
        System.out.println(result);
    }
}

 

😀 반복문

[do-while]

package Operator;

public class Operator1 {
    public static void main(String[] args) {
       int i=10;
       do{   //do문은 최초 한 번 실행하고 조건을 검사 
           System.out.println("현재 숫자는:"+ i);
           i++;
       }while(i<3); 
}

 

[break, continue]

문제: 1부터 시작해서 숫자를 계속 누적해서 더하다가 합계가 10보다 처음으로 큰 값은 얼마인가?

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        int i=1, sum=0;
        while(true){
            sum+=i;
            if(sum>10){
                System.out.println("합이 10보다 크면 종료: i="+i+"sum="+sum);
                break;
            }
            i++;
        }
    }
}

 

문제2: 1~5까지 숫자를 출력하는데, 숫자가 3일때는 출력을 건너뛰어야 한다.

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        int i=1;
        while(i<=5){
            if(i==3){
                i++;
                continue;}
            System.out.println(i);
            i++;
        }
    }
}

 

😀 문제 풀이

1. 반복문을 사용하여 처음 10개의 짝수를 출력하는 프로그램을 작성하라.

이때 num이라는 변수를 사용하여 수를 표현

while, for문 두 가지 버전의 정답을 만들어야 한다.

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        int i=1;
        while(i<=20){
            if(i%2==1){
                i++;
                continue;
            }
            System.out.println(i);
            i++;
        }
    }
}

 

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        for(int i=0; i<=20; i+=2){
            if(i==0){
                continue;
            }
            System.out.println(i);
        }
    }
}

 

2. 누적 합 계산

반복문을 사용하여 1부터 max까지 합을 계산하고 출력하는 프로그램을 작성하라.

이때, sum이라는 변수를 사용하여 누적 합을 표현하고, i라는 변수를 사용하여 카운트를 수행해야 한다.

 while문, for문 2가지 버전으 정답을 만들어라.

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        int i=0, max=100, sum=0;
        while(i<=max){
            sum+=i;
            i++;
        }
        System.out.println(sum);
    }
}
public class Operator1 {
    public static void main(String[] args) {
        int i, max=100, sum=0;
        for(i=0; i<=max; i++){
            sum+=i;
        }
        System.out.println(sum);
	}
}

 

3. 피라미드 출력

int rows를 선언하라.

package Operator;

public class Operator1 {
    public static void main(String[] args) {
        int rows=5;
        for(int i=1; i<=rows; i++){
            for(int j=0; j<i; j++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

 

'기초' 카테고리의 다른 글

JSP기초1  (1) 2024.12.19
자바 기초 복기5 -> 다시 정리  (2) 2024.12.19
자바 기초 복기4  (3) 2024.12.18
자바 기초 복기3  (0) 2024.12.17
자바 기초복기2  (1) 2024.12.16