가수면

[Java] 기본 본문

Java

[Java] 기본

니비앙 2023. 11. 29. 13:27

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
Comments