[8일차] 자바 타입,문자열,변수,타입 변환,콘솔

유태형·2022년 5월 4일
0

코드스테이츠

목록 보기
9/77

오늘의 목표

  1. 타입
  2. 문자열
  3. StringTokenizer
  4. StringBuilder
  5. StringBuffer
  6. 변수,상수,타입변환
  7. 연산자
  8. 콘솔



내용

타입

정수

Long데이터 형식 사용시 8Byte의 데이터 값이라는 것은 컴파일러에 알려주기 위한 목적으로 L을 붙여줍니다. L은 int범위를 벗어날 때 붙인다고 이해하면 됩니다.

public class Main {
    public static void main(String[] args){
        long longNumber = 12345678910L;
    }
}

실수

float데이터는 뒤에 'f'나 'F'를 붙여야 합니다. 하지만 double데이터는 'd'나 'D'를 생략할 수 있습니다.

public class Main {
    public static void main(String[] args){
        float num1 = 3.14F;
        double num2 = 3.141592D;
        double num3 = 3.141592;
    }
}

불린

boolean = true or false;

public class Main {
    public static void main(String[] args){
        boolean isRainning = true;
        if(isRainning){
            System.out.println("우산을 들고 나간다.");
        }
    }
}

문자

자바는 유니코드에 기반하여 문자를 표현합니다. 모든 컴퓨터에서 동일하고 일관되게 다루기 위한 국제 표준입니다. 2Byte의 char타입에 하나의 유니코드를 저장합니다.

public class Main {
    public static void main(String[] args){
        char letter1 = '가';
        System.out.println(letter1);

        char letter2 = 44032; // '가'의 유니코드
        System.out.println(letter2);
    }
}



문자열

String

String 클래스는 리터럴로 만들 수도 있고 객체로도 만들 수 있습니다.

public class Main {
    public static void main(String[] args){
        String var;
        var = "문자열";
        
        String var2 = "문자열"; //문자열 리터럴
        
        String var3 = new String("문자열"); //문자열 객체
    }
}

단순히 문자열 리터럴로 만들면 변수에 값을 저장하는 것이 아니라 리터럴로 만든 객체의 주소를 변수에 저장하는 것이므로 동일한 문자열 리터럴 = 동일한 문자열 객체입니다.

public class Main {
    public static void main(String[] args){
        String name1 = "김코딩";
        String name2 = "김코딩";
        String name3 = new String("김코딩");

        System.out.println(name1 == name2);
        System.out.println(name1 == name3);
    }
}

charAt(인덱스) : charAt()메서드는 특정 인덱스의 문자를 출력합니다.

public class Main {
    public static void main(String[] args){
        String str = new String("Java");
        System.out.println("문자열 : " + str);

        System.out.println(str.charAt(0));
        System.out.println(str.charAt(1));
        System.out.println(str.charAt(2));
        System.out.println(str.charAt(3));

        System.out.println("\ncharAt() 메서드 호출 후 문자열 : " + str);
    }
}

compareTo(문자열) : 해당 문자열과 인수로 전달된 문자열을 사전순으로 비교합니다. 해당 문자열이 인수 문자열 보다 먼저 오면 '음수', 같으면 '0', 뒤에 오면 '양수'를 출력합니다. 대소문자 구분하지 않기를 원한다면 compareToIgnoreCase()메서드를 사용합니다.

public class Main {
    public static void main(String[] args){
        String str = new String("abcd");
	System.out.println("문자열 : " + str);
	System.out.println(str.compareTo("bcef"));
	System.out.println(str.compareTo("abcd") + "\n");
	System.out.println(str.compareTo("Abcd"));
	System.out.println(str.compareToIgnoreCase("Abcd"));
	System.out.println("compareTo() 메서드 호출 후 문자열 : " + str);
    }
}

concat(문자열) : 해당 문자열에 인수로 전달된 문자열을 이어 붙힙니다. 1회성이며 해당문자열에는 변화가 없습니다.

public class Main {
    public static void main(String[] args){
        String str = new String("Java");
        System.out.println("문자열 : " +  str);
        System.out.println(str.concat("수업"));
        System.out.println("concat() 메서드 호출 후 문자열 : " + str);
    }
}

indexOf(문자열) : 특정 문자나 문자열이 처음 등장 한 위치의 인덱스를 반환합니다. 존재하지 않을 시 -1을 반환합니다.

public class Main {
    public static void main(String[] args){
        String str = new String("Oracle Java");
        System.out.println("문자열 : " + str);
        System.out.println(str.indexOf('o'));
        System.out.println(str.indexOf('a'));
        System.out.println(str.indexOf("Java"));
        System.out.println("indexOf() 메서드 호출 후 원본 문자열 : " + str);
    }
}

trim() : 해당 문자열의 맨 앞과 맨 뒤의 모든 공백을 제거합니다.

public class Main {
    public static void main(String[] args){
        String str = new String(" Java     ");
        System.out.println("문자열 : " + str);
        System.out.println(str + '|');
        System.out.println(str.trim() + '|');
        System.out.println("trim() 메서드 호출 후 문자열 : " + str);
    }
}

toLowerCase() : 해당 문자열을 모두 소문자로 변환시킵니다.
toUpperCase() : 해당 문자열을 모두 대문자로 변환시킵니다.

public class Main {
    public static void main(String[] args){
        String str = new String("Java");
        System.out.println("문자열 : " + str);
        System.out.println(str.toLowerCase());
        System.out.println(str.toUpperCase());
        System.out.println("두 메서드 호출 후 문자열 : " + str);
    }
}




StringTokenizer

StringTokenizer : 문자열을 지정한 구분자로 쪼개주는 클래스입니다. 쪼개진 문자열을 토큰(token)이라고 부릅니다.
java.util.StringTokenizer를 import해야 합니다.

int countTokens()

남아 있는 token의 갯수를 반환합니다. 전체 token의 갯수가 아닌 현재 남아있는 token의 갯수입니다.

boolean hasMoreTokens()

남아있는 토큰(token)이 있는지 확인하는 메서드입니다. 남은 토큰이 존재한다면 true를 반환하고 모든 토큰을 반환하고 남은 토큰이 없으면 false를 반환합니다.

Object nextElement(), String nextToken()

이 두 메서드는 다음의 토큰을 반환합니다.

import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args){
        String str = "This is a string example using StringTokenizer";
        StringTokenizer tokenizer = new StringTokenizer(str);
        System.out.println(str);
        System.out.println();

        System.out.println("total tokens : " + tokenizer.countTokens());

        while(tokenizer.hasMoreTokens()){
            System.out.println(tokenizer.nextToken());
        }
        System.out.println("total tokens : " + tokenizer.countTokens());
    }
}



StringBuilder

여러번 String 객체를 리터럴로 생성하는건 매우 비효율적일 것입니다. 이런 비효율적인 문제를 해결하기 위해 StringBuilder를 사용합니다.

StringBuilder append(문자열)

String Builder객체에 마지막에 문자열을 추가합니다. 자기자신을 반환하므로 여러번 중복해서 사용가능합니다.
예를들어

StringBuilder.append(문자열1).append(문자열2).append(문자열3);

자기자신을 리턴하므로 원하는 만큼 이어 붙일 수 있습니다.

String toString()

목적에 맞게 문자열을 완성하면 String객체로 반환하는 메서드를 제공합니다.

public class Main {
    public static void main(String[] args){
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("문자열 ").append("연결");
        String str = stringBuilder.toString();
        System.out.println(stringBuilder);
        System.out.println(str);
    }
}



StringBuffer

String은 그 값을 변경할 수도 없고 삭제할 수도 없습니다. 여러번 수정해야할 경우 낭비가 생기게 됩니다.
이를 해결하기 위해 StringBuffer는 별도의 버퍼크기를 유지하며 그 속의 문자열들의 수정과 삭제가 가능합니다.

StringBuffer append(문자열)

StringBuffer내부의 문자열 마지막에 인수로 전달된 문자열을 추가합니다.

public class Main {
    public static void main(String[] args){
        StringBuffer str = new StringBuffer("Java");
	System.out.println("문자열 : " + str);
	System.out.println(str.append(" programming"));
	System.out.println("append() 메서드 호출 후 문자열 : " + str);
    }
}

int capacity()

현재 버퍼의 크기를 반환합니다.

public class Main {
    public static void main(String[] args){
        StringBuffer str01 = new StringBuffer();
        StringBuffer str02 = new StringBuffer("Java");
        System.out.println(str01.capacity());
        System.out.println(str02.capacity());
    }
}

StringBuffer delete(시작, 끝)

해당 문자열에서 부분 문자열을 제거 합니다. 또한 deleteCharAt()메서드를 사용하면 특정 위치의 문자 한개만 제거할 수도 있습니다.

public class Main {
    public static void main(String[] args){
        StringBuffer str = new StringBuffer("Java Oracle");
        System.out.println("문자열 : " + str);
        System.out.println(str.delete(4,8));
        System.out.println(str.deleteCharAt(1));
        System.out.println("deleteCharAt() 메서드 호출 후 문자열 : " + str);
    }
}

StringBuffer insert(위치, 문자열)

지정된 인덱스 위치에 문자열을 삽입합니다. 마지막 위치에 삽입하면 append()와 동일한 결과입니다.

public class Main {
    public static void main(String[] args){
        StringBuffer str = new StringBuffer("Java Programming!!");
        System.out.println("문자열 : " + str);
        System.out.println(str.insert(4,"Script"));
        System.out.println("insert() 메서드 호출 후 문자열 : " + str);
    }
}



변수,상수,타입변환

변수

변수를 사용하는 이유

  • 메모리에 데이터의 저장 공간을 확보합니다.
  • 다른 개발자와 협업 시 데이터에 이름(변수명)을 붙여 소통합니다.
  • 데이터를 재사용합니다.
public class Main {
    public static void main(String[] args){
        int number; // 변수를 선언합니다.
        number = 6; // 선언한 변수에 값을 할당합니다.

        int number2=6; // 선언과 할당을 동시에 할 수 있습니다.
    }
}

변수는 재할당이 가능합니다. 대입 연산자 =를 이용하여 오른쪽의 값을 왼쪽 변수에 저장합니다.

public class Main {
    public static void main(String[] args){
        int number; // 변수를 선언합니다.
        number = 6; // 선언한 변수에 값을 할당합니다.
        System.out.println(number);
        number=9; //변수에 9저장
        System.out.println(number);
    }
}

변수명은 숫자로 시작할 수도 없고 띄어쓰기도 안되고 예약어(시스템이 할당)도 사용이 불가능합니다.

상수

상수(Constant)는 프로그램의 시작부터 마지막까지 변하지 않고 고정된 값입니다. 가독성과 이해력을 높이는데 활용될 수 있습니다.

(static) final 자료형 상수명(대문자) = ;

public class Main {
    static final int TRUE = 1;
    public static void main(String[] args){
        final double PI = 3.14;
        
    }
}

타입 변환

자바에서는 2가지의 경우에 자동으로 타입이 변환됩니다.

  1. 바이트 크기가 작은 타입에서 큰 타입으로 변환할 때
  2. 덜 정밀한 타이벵서 더 정밀한 타입으로 변환할 때(3->3.0)
public class Main {
    public static void main(String[] args){
        long longValue = 12345L;
        float floatValue = longValue; // float이 long보다 정밀하므로, 자동으로 타입이 변환됩니다.

        System.out.println(floatValue);
    }
}

반면에 메모리 용량이 더 큰 타입에서 작은 타입으로는 자동으로 타입이 변환되지 않습니다. 사용자가 임의로 타입을 변환하는 것을 캐스팅(casting)이라고 합니다.

public class Main {
    public static void main(String[] args) {
        int intValue = 128;
        byte byteValue = (byte) intValue;
        //int 타입으로 선언된 변수 intValue를 더 작은 단위인 byte로 변환합니다.
        System.out.println(byteValue); //128은 오버 플로우 되어 -128
    }
}



연산자

산술 연산자

대소 비교 연산자

등가 비교 연산자

조건 연산자

조건식 ? 참일때 결과 : 거짓일때 결과;

연산자 우선순위




콘솔

콘솔 출력

System.out.print() : 내용을 단순히 출력 하기만 하고 줄바꿈을 하지 않습니다.

System.out.println() : 내용을 출력 하고 마지막에 줄바꿈을 수행합니다. ln은 line을 의미합니다.

System.out.printf() : 지시자를 이용해 변수의 값을 여러 형식으로 출력해주는 메서드 입니다. f= formatted의
약자입니다. C와 C++에서 사용하던 지시자와 동일합니다.

public class Main {
    public static void main(String[] args){
        String hello = "Hello";
        String world = "World";
        System.out.printf("%s, %s",hello, world);
    }
}

%b : 참 혹은 거짓
%d : 10진수
%o : 8진수
%x : 16진수
%c : 문자
%s : 문자열
%n : 줄바꿈

콘솔 입력

Scanner 객체를 통해 콘솔입력이 가능합니다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // Scanner 클래스의 인스턴스를 생성합니다.
        String inputValue = scanner.nextLine();   // 입력한 내용이 inputValue에 저장됩니다.

        System.out.println(inputValue);           // 입력한 문자열이 출력됩니다.
    }
}

Scanner scanner = new Scanner(System.in) : Scanner객체를 생성합니다. System.in은 키보드를 의미하는 변수입니다. 자바가 직적 키보드와 연결되기 보단 자바내 객체를 만들어 그 객체를 키보드와 연결 시킵니다.

String inputValue = scanner.nextLine() : 키보드로 부터 입력을 받습니다. nextLine()메서드는 엔터를 누를때까지 계속 입력을 받는 메서드이며 단순히 .next()는 스페이스바나 타 공백 문자를 만나면 반환합니다. 뿐만 아니라, nextInt(), nextChar(), nextFloat(), nextDouble()등등 문자열ㅇ르 다른 리터럴로 변환하여 입력받을 수도 있습니다.




느낀점

이미 여러번 배웠던 내용이지만 잊은 내용이 없는지 꼼꼼히 확인해야합니다. StringTokenizer와 StringBuffer는 거의 까먹었었지만 새롭게 다시 익혔습니다.

profile
오늘도 내일도 화이팅!

0개의 댓글