JAVA -1

sangeun·2026년 5월 10일

System.out.print와 System.out.println의 차이

class hello{
    public static void main(String[] args){
        int year=0;
        int age=14;
        System.out.println(year);
        System.out.println(age);

        year=age+2000;
        age=age+1;
        System.out.print(year);
        System.out.print(age);
    }
}

추가로, c언어와 같이 System.out.printf()형태로 입력가능하다.

단. \n 대신 %n사용

  • [%5d] : [ 10] 5칸을 만들고 뒤에 %d만큼 채우기
  • [%-5d]: [10 ] 5칸을 만들고 앞에서 채우기
  • [%05d]: [00010] 5칸을 만드는데 뒤에서 채우고, 남은 건 0으로 메꾸기
  • %#x : 16진수의 0x와 함께 출력, %#X(대문자로 0X)
  • 10진수→2진수 지시자 없으므로. Integer.toBinaryString(binNum)을 통해 바꿔서 %s로 출력
  • %14.10f : 소수점 앞 14, 뒤 10자리 출력 (float는 소수점 아래 6자리까지 가능. 나머지 0)
  • %014.10f: f가 13이었다면 0013.0000000000 으로 출력. (소수점 앞 0으로 메꾸기)
  • [%.8s]: 왼쪽에서 8글자만 출력. 문자열 일부 출력 가능.

swap 및 print내 문자&변수의 활용

public class Main{
    public static void main(String[] args){
        int x=10, y=20;
        int tmp;
        System.out.println(("x: "+ x +"y: "+y));
        tmp=x;
        x=y;
        y=tmp;
        System.out.println("x: "+x+"y: "+y);
    }
}

변수의 타입

  • 기본형
    • 논리형(boolean)
    • 문자형(char)
    • 정수형(byte,short,int,long)
    • 실수형(float,double)
  • 참조형
    • 객체의 주소 저장

상수와 리터널

public static void main(String[] args){
        final int MAX_SPEED=10;

        int octNum=010;//8진수
        int hexNum=0x10;//16진수
        int binNum=0b10;//2진수

        long big=100_000_000_000L;
        long hex=0xFFFF_FFFF_FFFF_FFFFL;
        //정수형인데 10진수면 생략 가능
        float pi=3.14f; //f 대신 F가능
        double rate=1.618d; //d대신 D가능
        double pi1=3.14;
        //실수형은 double만 생략가능
        // float pi=3.14(x)
        char ch='j' //문자 리터럴
        String s="n" //문자열 리터럴 
        
    }

객체와 var(지역변수의 타입 추론)

public static void main(String[] args){
        LinkedHashMap map=new LinkedHashMap;
        var map=new LinkedHashMap;
        String str="";
        String name=new String("");
    }

var은 초기화 내역으로 데이터의 타입을 추론해 직접 타입형을 지정하지 않아도 된다.

추가로, String은 객체이므로 new를 통해 선언 초기화하며, String str처럼 선언할 수도 있다.

String의 특성

public static void main(String[] args){
        String name="ja"+"va"; 
        String str=name+21;
        System.out.println(name); //java
        System.out.println(str); //java21
        System.out.println(" 1"+7); // 17
        System.out.println(7+7+" 1");//14 1 
        System.out.println(" 1"+7+7);//177
    }

println내 “ “을 통해 string형태가 들어간다면 이후에 들어가는 타입들을 전부 string으로 처리.

“”” “””의 형태로 \n을 사용할 수 있으며, .indet(num)을 통해 들여쓰기 가능. (\t,\n)허용

public static void main(String[] args){
        String name= """
                
                
                Hello
                """.indent(2); //indent:들여쓰기
        System.out.println(name);
    }

화면에서 입력받기. Scanner

import java.util.*;

public class scanner {
    Scanner scanner=new Scanner(System.in);
    System.out.print("두자리 정수를 하나 입력해주세요.>");
    String input=scanner.nextLine();
    int num=Integer.parseInt(input);
    //int num=scaner.nextInt(); (input->num 과정 획일화)

    System.out.println("입력내용: "+input);
    System.out.printf("num=%d%n",num);
}

java.util.*을 불러서 scnner를 활용해 next로 입력받고. parse로 변환할 수 있다.

형변환

  • 2의 보수법
    • 2진법으로 데이터값을 표현→xor→+1 ⇒ a의 값을 기준으로 -a값 도출
  • 2의 보수법으로 표현된 데이터값을 형변환할 때는 표현된 자료형에 따라 절사 후 저장.
    • 만약, 절사데이터의 처음이 1로 끝나면 당연히 올림. 0이면 내림.
    • 단, 실수형→정수형인 경우는 반올림 x (소수점을 버리고 남은 정수가 정수형의 저장범위)
  • 자동 형변환
    • 형변환간에 값의 손실이 없는 경우, ex) float f=1234라고 하면 //(float)1234 내포
    • double x=y+i; 시, 표현범위가 더 큰 것으로 자동 형변환
💡
  1. boolean을 제외한 나머지 7개의 기본형은 서로 형변환이 가능하다.
  2. 기본형과 참조형은 서로 형변환할 수 없다.
  3. 서로 다른 타입의 변수 간의 연산은 형변환을 하는 것이 원칙이지만, 값이 범위가 작은 타입에서 큰 타입으로의 형변환은 생략할 수 있다.
  • 타입간의 변환 예제
   public static void main(String[] args){
        String str="3";

        System.out.println(str.charAt(0)-'0'); //문자열의 특정 문자 지정->정수
        System.out.println('3'-'0'+1);//문자를 정수로
        System.out.println(Integer.parseInt("3"+1)); //문자열->숫자로 변환
        System.out.println("3"+1); //문자열로 변환
        System.out.println((char)(3+'0')); //아스키 코드 '0'의 수를 정수 3에 더해서 "3"의 아스키 수변환
    }
  • 연산자 우선순위
👉
  1. 산술 > 비교 > 논리 > 대입.
  2. 단항(1) > 이항(2) > 삼항(3).
  3. 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽.
  • 산술연산. ex) ‘+’와 같은 경우. byte(a) + byte(b)의 자료형이 올때 +는 정수로 형변환 후 처리하기에 명시적 형변환(btye) 해야함.

  • 형변환(큰 타입→ 작은 타입)

    • 자료형을 초과하는 범위는 버려서 내림을 한다.
    • 만약, 내림을 하지 않고 반올림을 원한다면 0.5를 더하면 된다.
public static void main(String[] args){
        double pi=3.141592;
        double shortPi=(int)(pi*1000+0.5)/1000.0;
        System.out.println(shortPi);
    }
  • 소수점 자료형의 근사
    • 단. 정수인 경우는 자료형이 달라도 정수값이 제대로 저장되어 있으므로 비교연산 가능.
    public static void main(String[] args){
        float i=0.01f;
        double j=0.01; 
        //0.1의 근사값을 각 자료형의 변수에 저장.
        System.out.println(i==j); //float과 double은 자료형에 따라 0.01을 정확히 저장 x
    }
  • 문자열의 비교(문자열이 같으면 true, 다르면 false)
    public static void main(String[] args){
        String str= new String("abs");
        boolean result=str.equals("abs"); //대소구분없이 비교(equalsIgnoreCase())사용
    }

switch

  1. 조건식을 계산한다.
  2. 조건식의 결과와 일치하는 case문으로 이동한다. (else == default)
  3. 이후의 문장들을 실행한다.
  4. break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나간다.
💡

제약 조건

  1. swich문의 조건식 결과는 정수 값(long타입 제외) 또는 참조형(객체 주소)만 허용
  2. case문에는 정수 값, 문자열 리터럴 또는 참조형만 가능(중복불가)
import java.util.*;

public class operator {
    public static void main(String[] args){
        int score=0;
        System.out.print("당신의 점수를 입력하세요>(1~100)>");
        Scanner scanner=new Scanner(System.in);
        String tmp=scanner.nextLine();
        score=Integer.parseInt(tmp);
        char grade=switch(score/10){
            case 9,10 ->'A';
            case 8->'B';
            case 7->'C';
            default -> 'F';
        };
        System.out.println("당신의 학점은 "+grade+"입니다");

    }
}
  • char grade={}; 로 switch의 반환값을 저장가능
  • case 1 : 과 같이 “:”으로 나누는 것 대신 →으로 처리할 수 있으며 반환값을 필요로 하므로 default가 필수
  • 반환값을 저장하는 변수를 yield ‘A’ 와 같이 대입할 수 있으며, case내부 블록이 길어지는 경우에 {}로 묶어서 처리할 수 있으나, 그런 경우에는 yield ‘A’과 같이 yield가 필수이다.

for문

  • for(초기화;조건식;증감식) 각 조건은 다중 선언가능.
  • for(타입 변수명 : 배열 또는 컬렉션)으로 선언 가능.

do - while문

  • do{} while(조건식)
  • 적어도 한번은 실행된다. → 실행→ 조건 확인(반복, 종료 판단)

이름 붙은 반복문 (break, continue)활용

이름 명 : for()

  • 이름에 해당하는 for문을 break하거나 continue함
public class Main{
    public static void main(String[] args){
       Loop1:for(int i=2;i<=9;i++){
        for(int j=1;j<=9;j++){
            if(j==5){
                break Loop1; //continue Loop1;
            }
        }
        System.out.println("pass");
       }
    }
}

배열은 같은 타입의 여러 변수를 하나로 묶는 것

  • int[] score = new int[5]; // 5개의 int값을 저장할 수 있는 배열 생성
  • 이때, score는 메모리의 위치를 나타내는 참조변수.

배열이름.length

  • 배열의 크기 반환. [0]~[arr.length-1]의 크기

배열의 선언및 초기화

    public static void main(String[] args){
       int[] score=new int[]{50,60,70,80};
       int[] arr={50,60,70};

       int[] arr1;
       arr1=new int[]{50,70};
       //arr1={50,70,80}(x)

        int result=add(new int[]{50,60});
        //int result=add({50,60,70}) (x)
        
        int[] a=new int[0];
        int[] b=new int[]{};
        int[] c={};
    }
  • 선언과 초기화를 동시에 할 경우는 new 생략 가능.
  • 배열의 참조자를 출력하면 타입@주소 반환.

배열의 복사

    public static void main(String[] args){
    //직접 for문을 통해 대입후, 참조 주소 대입.
       int[] arr={10,20,30,40,50};
       int[] tmp=new int[arr.length+2];
       for(int i=0;i<arr.length;i++){
           tmp[i]=arr[i];
       }
       arr=tmp;
	//arraycopy로 tmp에 arr2 배열 저장.
       int[] arr2={10,20,30,40};
       int[] tmp2=new int[arr.length+2];
       System.arraycopy(arr,0,tmp,0,arr.length);
       //기존 참조,시작위치,옮길 참조, 시작위치, 얼만큼
    }
  • 난수 생성시. math.random() → 0~1사이 랜덤한 수 생성.

  • 초기화와 동시에 출력

	System.out.print(numArr[i]=(int)(Math.random()*10));
	//같은 표현
	=> numArr[i]=(int)(Math.random()*10);
	   System.out.print(numArr[i]);

String 배열

💡

String클래스는 char배열에 기능(메서드)을 추가한 것이다.

String[] name=new String[3]; //문자열 3개 저장할 수 있는 배열 생성.
  • String클래스의 주요 메서드
char charAt(int index) // 문자열에 해당 위치 문자 반환
int length() // 문자열 길이
String substring(int fromt,int to) // from~to-1까지 반환
boolean equals(Object obj) // 문자열 내용이 같은 지
char[] toCharArray() //문자열을 문자 배열로 변환
String str=new String(chArr); //문자-> 문자열 변환.

다차원 배열

  • 2차원 배열의 선언과 인덱스
int[][] arr; (정석)
int arr[][];  (o)
int[] arr[];  (o)
int[][] arr;
for(int i=0;i.lengt;i++){
	for(int j:arr[i]){
	// 2차원 배열은 이렇게 출력
	}
}

가변 배열

int[][] arr= new int[5][];
arr[i]=new int[3]
//이와같이 배열의 세로크기만 정해두고 가로길이는 각각상이하게 가능.

0개의 댓글