코드스테이츠 백엔드 8일차 | Java

hyoreal·2022년 7월 4일
0

CodeStates

목록 보기
10/32

드디어 백엔드개발의 시작인 Java를 공부한다!! 너무 기대되고 신난다!!

Java

Java의 특징

  1. 운영체제에 독립적
  2. 객체지향언어(Object Oriented Programming, OOP)
  3. 함수형 프로그래밍 지원
  4. 자동메모리관리

Java의 기본문법

public class 클래스명 {
  public static 반환타입 메서드명(매개변수타입 매개변수이름) {
    메서드바디
  }
}

-자바의 기본문법은 위와 같이 이뤄져있다.

public class 클래스명{ ... }
  • 기본문법중 위 코드는 "접근허용범위가 public인 클래스명의 이름을 가진 class를 정의한다." 는 의미이다.
반환타입 메서드명(매개변수타입 매개변수이름) { ... }
  • 기본문법중 위 코드는 메서드를 정의하는 문법이다.

  • 메서드는 *데이터를 입력받고 처리한 후 결과값을 반환하는 코드들의 집합이다.

  • 메서드바디에서는 return 키워드를 사용하여 어떠한 값을 반환할 수 있다.

  • 메서드를 호출할때에는

메서드명(인자, 인자);

와 같이 호출할 수 있다.


public static void main(String[] args) {

}
  • 위와 같은 코드가 있을때 아래처럼 생각하면 된다.
    • void : 반환타입
    • main : 메서드명
    • String[] : 매개변수의 타입
    • args : 입력데이터로 들어오는 값(인자)를 args라는 이름의 매개변수에 할당한다.
  • main 메서드는 자바 소스코드 중 가장 먼저 실행되는 메서드이다. 이처럼 가장 먼저 실행되는 메서드 또는 함수를 진입점 함수라고 한다.
  • System.out.print(); : 메서드 호출

변수

  • 변수(Variable) : 값을 임의로 저장하는 메모리공간

  • 변수선언 : 값을 저장할 메모리공간을 확보하고 이름을 붙이는것

  • 값 할당

    • 초기화 : 변수선언 후 처음으로 값을 할당하는것
    • 재할당 : 초기화가 이뤄진 후 다른 값을 할당하는것

상수

  • 상수 (Constant) : 재할당이 금지된변수, final키워드를 통해 선언, SCREAMING_SNAKE_CASE 사용.

타입

  • 타입(Type) : 타입에 따라 값이 차지하는 공간크기, 값이 저장되는 방식 결정된다.
    • ex) 정수형 타입 = 4byte, 문자형 타입 = 1byte.
    • 값이 저장되는 방식은 기본타입과 참조타입이 있음.
  • 기본타입(primitive type)
    • 데이터의 실제 값 저장.
    • 정수타입(byte, short, int, long), 실수타입(float, double), 문자타입(char), 논리타입(boolean)
  • 참조타입(referwence type)
    • 데이터가 저장되는 곳인 주소값이 저장.
    • 객체의 주소 저장, 8개 기본형 제외한 나머지 타입.

리터럴

  • 리터럴(Literal) : 문자가 가리키는 값.
    • float타입 변수에 실수형리터럴을 할당할때 리터럴 뒤에 접미사 f 붙여야함.
    • long타입 변수에 정수형리터럴을 할당할때 리터럴 뒤에 접미사 L을 붙여야함.

정수

  • 정수타입은 byte, short, int, long 4개의 타입으로 분류.

  • 일반적으로 정수형을 사용할때는 int사용.

  • 정수형 리터럴은 정수형 변수에 할당 가능.

  • long 타입 리터럴은 뒤에 접미사 L 붙여야함.

정수형의 오버플로우, 언더플로우

  • 코드 각 타입의 표현범위를 벗어나는 경우 발생.
  • 오버플로우 : 표현범위의 최대값을 벗어날경우 발생. 최대값을 넘어가면 최소값으로 값이 순환됨.
  • 언더플로우 : 표현범위의 최소값을 벗어날경우 발생. 최소값을 넘어가면 최대값으로 값이 순환됨.

실수타입

  • 실수 : 소수점을 가지는 값, float형과 double형으로 분류.
  • 실수형 리터럴에서 float를 사용할때는 반드시 접미사 f를 붙여야함.
  • double형은 float보다 더 큰 실수를 저장할수있고, 정확하다.

실수형의 오버플로우, 언더플로우

  • 오버플로우 : 값이 음의 최소, 양의 최대범위를 넘어갈경우 발생. 이때 값은 무한대.
  • 언더플로우 : 값이 양의 최소, 음의 최대범위를 넘어갈경우 발생. 이때 값은 0.

논리타입

  • 논리타입에는 boolean형만 존재. true와 false를 값으로 가짐.

문자타입

  • 문자타입은 char형만 존재. 문자타입변수에 하나의 문자형 리터럴 저장가능.
  • 문자형리터럴은 반드시 '' 작은따옴표로 작성. 큰따옴표는 문자열로 인식.
  • 문자타입의 리터럴은 유니코드로 저장.
  • 문자형변수에 숫자를 할당하게되면 숫자값을 유니코드로 인식해서 해당 숫자와 일치하는 코드를 가진 문자로 변환.

타입변환

  • boolean을 제외한 기본타입은 서로 변환가능. 자동변환, 수동변환 존재.

자동타입변환

  1. 바이트크기가 작은 타입에서 큰 타입으로 변환할때.
  2. 덜 정밀한 타입에서 더 정말한 타입으로 변환할때.

    byte(1) -> short(2)/char(2) -> int(4) -> long(8) -> float(4) -> double(8)

  • float이 표현할수있는 값이 모든 정수형보다 정밀하기때문에 바이트크기가 작아도 뒤에 위치.

수동타입변환

  • 메모리용량이 큰타입에서 작은타입으로 바꿀때 사용. 이를 캐스팅(casting)이라고함.
  • 수동으로 변환할때는 캐스팅연산자 ()를 사용.

String

  • String클래스는 문자열을 다루고 그 안에 있는 메서드들을 통해 문자열관련매서드들을 사용할수있다.

String 타입

  • 큰따옴표""로 감싸진 문자열.

  • 변수선언 및 문자열리터럴 할당방법

String name1 = "Hyoreal";

String name2 = new String("Hyoreal"); // String클래스의 인스턴스 생성
  • 인스턴스를 생성하여 변수에 할당하게되면 문자열의 내용이 같아도 별개의 인스턴스가 생성.

String 메서드

  1. charAt()
  • 문자열의 특정 인덱스에 해당하는 문자를 반환한다.

    String str = new String("Java");
    
    System.out.println(str.charAt(0)); // 'J'
    System.out.println(str.charAt(1)); // 'A'
    System.out.println(str.charAt(2)); // 'V'
    System.out.println(str.charAt(3)); // 'A'
  1. compareTo()
  • 문자열을 인수로 전달된 문자열과 사전편찬순으로 비교.

  • 문자열이 같다면 0, 문자열이 인수로 전달된 문자열보다 작으면 음수, 크면 양수를 반환. 대소문자 구분 원치않으면 compareToIgnoreCase()메서드 사용.

    String str = new String("abcd");
    
    System.out.println(str.compareTo("bcef"));  //-1
    System.out.println(str.compareTo("abcd") + "\n"); // 0
    System.out.println(str.compareTo("Abcd")); // 32
    System.out.println(str.compareToIgnoreCase("Abcd")); //0
  1. concat()
  • 문자열 뒤에 인수로 전달된 문자열을 추가한 새로운 문자열 반환.
    String str = new String("Java");
    System.out.println("문자열 : " + str); // 문자열 : Java
    System.out.println(str.concat("수업")); // Java수업
    System.out.println("concat() 메서드 호출 후 문자열 : " + str); // concat() 메서드 호출 후 문자열 : Java```
    
    
  1. indexOf()
  • 문자열에서 특정문자나 문자열이 처음으로 등장하는 위치의 인덱스 반환. 포함되어있지않으면 -1반환.

    String str = new String("Oracle Java");
    
    System.out.println("문자열 : " + str); // 문자열 : Oracle Java
    System.out.println(str.indexOf('o')); //-1
    System.out.println(str.indexOf('a')); // 2
    System.out.println(str.indexOf("Java")); // 7
    System.out.println("indexOf() 메서드 호출 후 원본 문자열 : " + str); //indexOf() 메서드 호출 후 원본 문자열 : Oracle Java
  1. trim()
  • 문자열의 맨앞과 맨 뒤에 포함된 모든 공백문자를 제거.
String str = new String(" Java     "); 

System.out.println("문자열 : " + str); // 문자열 :  Java
System.out.println(str + '|'); //  Java     |
System.out.println(str.trim() + '|'); // Java|
System.out.println("trim() 메서드 호출 후 문자열 : " + str); //trim() 메서드 호출 후 문자열 :  Java
  1. toLowerCase()toUpperCase()
  • toLowerCase() : 문자열의 모든 문자를 소문자로 변환
  • toUpperCase() : 문자열의 모든 문자를 대문자로 변환
String str = new String("Java");

System.out.println("문자열 : " + str); //문자열 : Java
System.out.println(str.toLowerCase()); //java
System.out.println(str.toUpperCase()); //JAVA
System.out.println("두 메서드 호출 후 문자열 : " + str); //두 메서드 호출 후 문자열 : Java

StringTokenizer

  • StringTokenizer : 문자열을 지정한 구분자로 쪼개주는 클래스.

  • 토큰(token) : 쪼개진 문자열.

  • StringTokenizer을 사용할땐 java.util.StringTokenizer을 import해야함.

  • int countTokens() : 전체 token의 개수가 아닌 현재 남아있는 token 개수.

  • boolean hasMoreElements(), boolean hasMoreTokens()
    : 메서드는 현재 위치 뒤에 있는 문자열에서 하나 이상의 토큰을 사용할 수 있는 경우 true를 반환하고 그렇지 않으면 false를 반환.

  • Object nextElement(), String nextToken()
    : 같은 객체를 반환하는데 반환형은 다름. nextElement는 Object를, nextToken은 String을 반환.

StringBuilder / StringBuffer

  • StringBuilder : 한번 생성된 String 클래스의 인스턴스는 여러개의 문자열을 더할때마다 새로운 인스턴스를 생성해야함. 이 문제를 해결하기위해 StringBuilder사용.

  • StringBuffer : String 클래스의 인스턴스는 한번 생성되면 값을 읽기만하고 변경은 불가. StringBuffer클래스의 인스턴스는 값을 변경, 추가 가능.

    • StringBuffer은 내부적으로 버퍼(buffer)존재.

    • 버퍼의 크기의 기본값은 16개의 문자를 저장할수있는 크기, 생성자를 통해 별도설정가능.

    • 인스턴스 생성시 사용자가 설정한 크기보다 16개의 문자를 더 저장할수있도록 여유있는 크기 생성.

    • append() : 인수로 전달된 값을 문자열로 변환 후 문자열의 마지막에 추가. String클래스의 concat과 같은 결과를 반환하지만 속도가 빠름.

    • capacity() : StringBuffrt인스턴스의 현재크기 반환.

    • delete() : 전달된 인덱스에 해당하는 부분 문자열을 제거.

    • deleteCharAt() : 특정위치의 문자 한개만 제거.

    • insert() : 인수로 전달된 값을 문자열로 반환 후, 지정된 인덱스위치에 추가.


  • Math.abs() : 절대값

  • Char을 Int로 : character-'0' Char에서 0을 빼준다.

  • Int를 Char로 : (char)(num+'0') 앞에 (char)을 쓰고 0을 더한다.

  • double을 int로 : (int)double double로 선언된 변수 앞에 (int)를 써준다

  • String.format() : 문자열 형식

  • Math.abs() : 절대값


    콘솔입력

    import java.util.Scanner;  // Scanner 클래스를 가져옴
    
    Scanner scanner = new Scanner(System.in); // Scanner클래스의 인스턴스 생성
    String inputValue = scanner.nextLine(); // 입력한내용이 inputValue에 저장
    
    System.out.println(inputValue); // 입력한 문자열 출력

    Scanner : 데이터를 입력받는 기능. java.util에 저장되어있음.
    nextLine() : Scanner메서드. 콘솔을 통해 문자열데이터를 입력받음.
    nextInt() : 정수형을 입력받음.
    nextFloat() : 실수형을 입력받음.

콘솔출력

  1. System.out.print(); : 내용을 단순히 출력.
  2. System.out.println(); : 출력 시 줄바꿈.
  3. System.out.printf(); : 형식대로 출력.
    3-1. %b : 불리언
    %d : 10진수
    %o : 8진수
    %x,%X : 16진수
    %c : 문자
    %s : 문자열
    %n : 줄바꿈

오늘은 정말정말 재밌고 유익했던 시간이었다! 내가 정말 원하던 자바를 공부하기 시작했는데 기대한만큼 너무 재밌었다. 같이 하게된 페어님은 전공자셨는데 그만큼 정말 뛰어난 지식을 갖고계셔서 덕분에 모르는 부분들까지도 쉽고 세세하게 설명해주신덕에 정말 최상의 효율을 가졌던 자기주도학습시간이었다!!! 마지막 체크포인트세션에서도 갑자기 지목당해 놀랐지만 침착하게 답을 이야기했다😆
공부효율이 갑자기 급상승한것같아 정말 너무너무 행복하다!!!!!

profile
좌충우돌 코린이 성장기

0개의 댓글