가수면
[Java] 기본 본문
Java 자료형
기본형 타입(Primitive Type) | 참조형 타입(Reference Type) |
- 논리형 - boolean - 정수형 - byte short int long - 실수형 - float double - 문자형 - char |
array enumeration class interface |
기본형 타입
byte - 주로 파일이나 네트워크 데이터 처리
short - 낮은 메모리를 요구하는 애플리케이션, 예를 들어 임베디드 시스템에서 사용
int (기본) - 가장 일반적으로 사용되는 정수 타입
long - 매우 큰 정수 값을 저장하는 데 사용
float - 더 작은 범위의 실수와 적절한 정밀도를 제공하며, 메모리 사용이 더 적음. 정밀도가 그렇게 중요하지 않은 경우에 적합
double (기본) - float보다 넓은 범위의 숫자와 더 높은 정밀도를 제공. 정밀도가 중요한 경우에 적합
char - 단일 문자 (문자 하나)
boolean isJavaFun = true;
byte fileData = 100; // (1바이트, -128 ~ 127)
short year = 2023; // (2바이트, -32,768 ~ 32,767)
int salary = 50000; // (4바이트, -2,147,483,648 ~ 2,147,483,647)
long distanceToMoon = 384400000L; // (8바이트, -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807)
// L은 long 타입임을 나타내는 접미사
float pi = 3.14F; // F는 float 타입임을 나타내는 접미사
double e = 2.718281828459045;
char grade = 'A';
참조형 타입
String이 클래스인 것을 주의!
String 객체는 '불변'이어서 문자열의 내용을 변경하면 새로운 String 객체가 생성됨.
따라서 todo.getUsername() == username같이 하면 안되고 equals() 또는 equalsIgnoreCase() 메소드로 비교해야 한다.
String name = "홍길동"; // String 클래스의 인스턴스
Date today = new Date(); // Date 클래스의 인스턴스
List<String> names = new ArrayList<>(); // List 인터페이스의 ArrayList 구현
int[] numbers = new int[10]; // 정수형 배열
String[] hobbies = {"독서", "게임", "등산"}; // 문자열 배열
JAVA 기본 문법들
String.format("문자열, %s", 변수)
'변수'를 문자열로 변환하여 삽입
JAVA 클래스 작성 기본 형태
같은 파일에 public 2개 이상 가질 수 없음
생성자 형태
public class 해당클래스명(매개변수타입 매개변수1, 매개변수타입 매개변수2, ...)
public class GameRunner {
private MarioGame game; // MarioGame 타입의 game이라는 변수를 선언 (생성자에서 사용할 타입과 변수명을 명시적으로 지정해줘야함)
public GameRunner(MarioGame game) {
this.game = game;
}
// 메소드
public void run() {
System.out.println("실행 중인 게임: " + game);
game.up();
game.down();
game.left();
game.right();
}
}
변수 선언
1. 일반적인 방식
// 변수명타입 변수명 = 값
int number = 5;, String text = "Hello";
2. 타입 추론 (java 10 때 업데이트)
복잡한 제네릭 타입의 선언을 단순화하는 데 유용
var number = 5; (number는 int 타입으로 추론됨)
var text = "Hello"; (text는 String 타입으로 추론됨)
리소스 닫기
Try-with-resources( java 7 때 업데이트 ) 사용
try (리소스 선언) {
리소스를 사용하는 코드
}
// 예시
public static void main(String[] args) {
try(var context = new AnnotationConfigApplicationContext(HelloWorldConfiguration.class)) {
System.out.println(context.getBean("name"));
System.out.println(context.getBean("age"));
System.out.println(context.getBean("person"));
System.out.println(context.getBean("person2"));
System.out.println(context.getBean("person3"));
System.out.println(context.getBean("person4"));
System.out.println(context.getBean("person5"));
System.out.println(context.getBean("address2"));
System.out.println(context.getBean(Address.class));
System.out.println(context.getBean(Person.class));
// Arrays.stream(context.getBeanDefinitionNames()).forEach(System.out::println);
}
}
inerface
공통된 작업을 처리해 클래스의 결합도를 낮춰줌
package com.in28minutes.learnspringframwork.game;
public interface GamingConsole {
void up();
void down();
void left();
void right();
}
up, down, left, right라는 메소드를 동일하게 가지고 있지만, 메소드의 내용은 다른 클래스들을 인터페이스로 연결
public class MarioGame implements GamingConsole {
public class SuperContraGame implements GamingConsole {
사용
package com.in28minutes.learnspringframwork.game;
public class GameRunner {
private GamingConsole game;
public GameRunner(GamingConsole game) {
this.game = game;
}
public void run() {
System.out.println("실행 중인 게임: " + game);
game.up();
game.down();
game.left();
game.right();
}
}
record (자바 16 때 업데이트)
생성자처럼 틀을 만들어줌
사용법
record 레코드명 (매개변수타입 매개변수1, 매개변수타입 매개변수2, ...) {}
public class Hello {
public 메소드타입 메소드명() {
return new 레코드이름("값1", "값2", ...);
}
}
예시)
record Person (String name, int age) {}
public class Hello {
public Person person() {
return new Person("김철수", 12);
}
}
// Person[name=김철수, age=12]
Stream
.stream() : 여러 작업을 하나의 흐름에서 처리할 수 있도록 만들어줌
Stream<T> : 제네릭 타입 T의 객체들을 처리할 수 있는 스트림 타입을 나타냄. T는 스트림이 다루는 요소의 타입
Stream.of(...) : 가변 인자로 받은 요소들로 구성된 스트림을 정적으로 생성
enum
추상 클래스를 활용한 enum 예시)
public enum ArithmeticOperator {
// enum을 통해 연산 상수를 정의
ADDITION("+") {
@Override
public int arithmeticCalculate(int operand1, int operand2) {
return operand1 + operand2;
}
}, SUBTRACTION("-") {
@Override
public int arithmeticCalculate(int operand1, int operand2) {
return operand1 - operand2;
}
}, MULTIPLICATION("*") {
@Override
public int arithmeticCalculate(int operand1, int operand2) {
return operand1 * operand2;
}
}, DIVISION("/") {
@Override
public int arithmeticCalculate(int operand1, int operand2) {
return operand1 / operand2;
}
};
// enum 내에 선언된 상수가 생성자를 통해 초기화되면서 operatorSymbol 필드에 값을 할당
private final String operatorSymbol;
// 열거형의 생성자는 항상 private으로 선언되며, 그렇기에 명시적으로 적을 필요가 없다.
ArithmeticOperator(String operator) {
this.operatorSymbol = operator;
}
public abstract int arithmeticCalculate(int operand1, int operand2);
public static int calculate(int operand1, String operator, int operand2) {
ArithmeticOperator arithmeticOperator = Arrays.stream(values()) // values()는 enum에 내장된 정적 메서드로 해당 열거형의 모든 상수를 포함하는 배열을 반환함
.filter(v -> v.operatorSymbol.equals(operator))
.findFirst()
.orElseThrow(() -> new IllegalArgumentException("올바른 사칙 연산이 아닙니다."));
return arithmeticOperator.arithmeticCalculate(operand1, operand2);
}
'Java' 카테고리의 다른 글
H2, JDBC, JPA, Hibernate (2) | 2023.12.02 |
---|---|
[Spring Boot] 기본 (0) | 2023.12.01 |
[Spring] 심화 (0) | 2023.11.30 |
[Spring] 기본 (0) | 2023.11.29 |
개발 환경 설정 (feat. Tomcat) (0) | 2023.11.27 |