JAVA 문법&개념 정리 근데 이제 내 기준 실속형. 근본은 없는.

도리·2024년 9월 26일
0

JAVA

목록 보기
1/7

총정리도 아니고, 나만 보는.
그리고 이제 약간 알고리즘보단 스프링 하면서 자주 쓰이는 문법 및 개념들만을 정리해보려고 함니다 ㅋ
그리고 아직도 가끔 좀 명칭만 들었을 때 뇌정지 오는 것들 정리 쫌 하고요 ㅖㅖ
그니까 예 실속충이라서 세세히 많은 문법을 적어놓진 않을 것이라는 것.

물론 공부하고 프로젝트들 진행하며 필요한 문법은 그때그때 또 추가하고 수정할 예정!

대견해~

변수 & 상수

(변상수...뭔가 정상수같지 않음? ㄹㄱㅎㅃ ㅋㅋ)

변수 -> 변하는 저장공간(값)
상수 -> 변하지 않는 저장공간(값)

변수▽

int number = 10; // 1. 변수로 선언 및 초기화

number = 11; // 2. 변수의 값을 바꾼다. (덮어쓰기)

상수▽

final int number = 10; // 1. 상수로 선언 (데이터 타입 앞에 final 을 붙이면 됩니다.)

number = 11; // e2. 변수의 값을 바꾸려고하면 에러가 납니다!

참조형

참조형 변수 = 주소형 변수?

  • 다른 기본형 변수가 실제 값을 저장하는 저장 공간이라면.. 참조형 변수는 실제 값이 아닌 원본 값의 주솟값을 저장.

저장 관점 에서 기본 변수와의 차이점

  • 기본형 변수 : 원본 값이 Stack에 있다.
  • 참조형 변수 : 원본 값이 Heap에 있다.


요런 느낌.

Stack VS Heap 영역

-Stack의 경우, 정적으로 할당된 메모리 영역.
그래서, 크기가 정해져 있는 기본형 변수를 저장
-Heap의 경우, 동적으로 할당된 메모리 영역
그래서, 크기가 계속 늘어날 수 있는 참조형 변수의 원본을 저장.


반복문

for문

for(초기값;조건문;증가연산){
       (연산)
            }
            
// for 문
for(int i=0; i < 4; i++) { // 변수 i 값은 0 ~ 3 까지 반복
    System.out.println(i + "번째 출력"); // i 변수와 문자열 합치기
}

// 출력
0번째 출력
1번째 출력
2번째 출력
3번째 출력

근데 이제? 향상된 for문(더 많이 쓰게 되더라고요)

  • for 소괄호 안에 값이 3개나 들어가기 때문에 이걸 2개로 줄여준 것이 바로 향상된 for문 이라는 것.
  • 향상된 for문은 연속된 변수 목록을 출력할 때 쓰인다.
for(변수타입 변수명 : 목록변수) {
    (연산)
    }
    
// 향상된 for 문

int[] numbers = {3,6,9,12,15};
for(int number: numbers) {
    System.out.print(number + " "); 
}

// 출력
3 6 9 12 15

즉, for(int number: numbers)라는게, int형 변수인 number를 선언해주고, 미리 할당시켜놓았던 numbers의 값들을
방금 선언한 number에 하나씩 돌아가면서 넣어주는 것!

컬렉션

Java 프로그래밍에서는 배열🗳️을 더 고도화 시켜서 컬렉션🧬이라는 이름으로 참조형 분류통(자료구조)를 제공하고 있다능. 컬렉션은 참조형 변수만 저장함으로써 여러 기능을 많이 제공한다능.

==> 즉 배열과 달리 값을 유동적이게 할 수 있다!

- 컬렉션 종류


네 미리보기였습니다.

컬렉션 종류 - 1.List

1. ArrayList

ArrayList는 배열(Array)처럼 일렬로 데이터를 저장하고 조회해서 인덱스로 값을 하나씩 조회할 수 있다.

  • 특징
  • 배열(Array)처럼 크기가 정해져 있지 않고, 필요할 때마다 크기가 점점 더 늘어난다.
  • 기능
  • 선언 : ArrayList intList 형태로 선언
  • 세세히 나눠서 설명해보자면
    ArrayList: 타입 (제네릭 클래스) 이다. 제네릭은 인터페이스 같은걸 말하는데, 따라서 ArrayList는 제네릭이니까 <>안에 어떤 타입의 데이터를 저장할 건지 구체적으로 정해줘야한다.
    Integer: ArrayList에서 다룰 데이터의 타입이다.
    intList: 변수명

// ArrayList 
// (사용하기 위해선 import java.util.ArrayList; 를 추가해야합니다.)
import java.util.ArrayList;

public class Main {

	public static void main(String[] args) {
		ArrayList<Integer> intList = new ArrayList<Integer>(); // 선언 및 생성
		
		intList.add(1);
		intList.add(2);
		intList.add(3);
		
		System.out.println(intList.get(0)); // 1 출력
		System.out.println(intList.get(1)); // 2 출력
		System.out.println(intList.get(2)); // 3 출력
		System.out.println(intList.toString()); // [1,2,3] 출력
		
		intList.set(1, 10); // 1번순번의 값을 10으로 수정합니다.
		System.out.println(intList.get(1)); // 10 출력
		
		
		intList.remove(1); // 1번순번의 값을 삭제합니다.
		System.out.println(intList.toString()); // [1,3] 출력
		
		intList.clear(); // 전체 값을 삭제합니다.
		System.out.println(intList.toString()); // [] 출력
	}
}

나머지것들은..
필요하면 추가.

난 아직까진 ArrayList만 썼던 것 같네요

컬렉션 stream API 정도 더 정리해보자고요

컬렉션에서 Stream API

컬렉션(예: ArrayList, Set, Map 등) 또는 배열에서 데이터를 처리하는데 사용되는 강력한 도구다. 특히, 데이터 필터링, 변환, 집계 등의 작업을 매우 간결하고 효율적으로 수행할 수 있도록 도와준다.

여기서 Stream의 두가지 주요 연산을 설명해보자면

1. 중간 연산

  • 데이터를 변환하거나 필터링 하는 작업
  • 이 연산들은 지연되고, 최종 연산이 호출 될 때 한꺼번에 처리한다.
  • 예시 : filter(),map(),sorted(),distinct(),limit()

2. 최종 연산

  • 중간 연산의 결과를 처리하고 결과 반환
  • 최종 연산이 호출되면, 스트림은 더 이상 사용할 수 없다.
  • 예시 : collect(),forEach(),reduce(),count()

기본 사용법 설명

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);

// Stream API를 사용하여 짝수만 필터링하고 각 숫자에 2를 곱한 후 출력
numbers.stream()                // 스트림 생성
     .filter(n -> n % 2 == 0)  // 짝수 필터링 (중간 연산)
     .map(n -> n * 2)          // 각 요소에 2를 곱함 (중간 연산)
     .forEach(System.out::println); // 출력 (최종 연산)
  1. filter(n -> n % 2 == 0)
  • 역할 : .filter()는 스트림의 요소 중에서 조건에 맞는 것만을 선별하는 중간 연산(=필터링한다~)
  • 동작 : n이라는 입력값을 받아서 n % 2 == 0이 참이면 짝수만 스트림에 남긴다.
  • 결과 : 이 연산을 통해서 스트림에서 짝수만 남고 나머지는 필터링 되어서 제외
  1. map(n -> n * 2)
  • 역할 : .map()은 스트림의 각 요소에 주어진 함수를 적용하여 새로운 값을 반환하는 중간 연산
  • 동작 : n -> n * 2라는 람다 표현식을 사용해, 스트림의 각 요소 n에 2를 곱한다.
  • 결과 : 짝수만 남은 스트림에 각 요소마다 2를 곱한 새로운 값으로 변환된 스트림이 만들어진다.
  1. forEach(System.out::println)
  • 역할 : .forEach()는 스트림의 각 요소에 대해 주어진 동작을 수행하는 최종 연산
  • 동작 : System.out::println은 메서드 참조로, 스트림의 각 요소를 출력하는 작업
  • 결과 : 스트림의 각 요소가 화면에 출력되며, 이후 스트림은 소멸. .forEach()는 최종 연산이기 때문에, 한 번 실행되면 스트림은 더 이상 사용할 수 없다.전체 코드 실행 순서 :
  1. 입력 스트림 생성: 예를 들어 [1, 2, 3, 4, 5, 6]이라는 리스트를 기반으로 스트림이 생성된다.
  2. filter(n -> n % 2 == 0): 짝수만 남기기 위해 필터링이 이루어져 [2, 4, 6]이 된다.
  3. map(n -> n * 2): 짝수들에 각각 2를 곱한 값으로 변환되어 [4, 8, 12]가 된다.
  4. forEach(System.out::println): 최종적으로 변환된 스트림 요소들을 출력

클래스

처음 자바 문법 공부할 때 클래스 개념이 왜이리 이해가 안되었나...
지금 생각해보면, CRUD도 모르고 해서 더 이해가 안되었던 것 같기두

하여간 다시한번 정리를 해보자 왜냐하면
생성자..때문에 내가 힘들었던 적이 몇 번 있어서
(개념 줄줄 새고 있다는 뜻)

도입

을 해보자면, 프로젝트를 만들 때, 여러가지 도메인(혹은 엔티티)를 만들게 된다.

도메인이 머냐고요?
예를 들어서 블로그를 만든다 치면
도메인 종류는 간략히 게시글, 사용자, 댓글 정도 있다.

이제 여기부터 시작.

예시는 게시글만 들어보자

블로그를 만드려면 위에서 말했듯 다양한 각각의 도메인 파일들을 분리해서 생성해주게 될텐데, 따라서 게시글을 만들려면 게시글 java파일을 만들겠죠?
그렇게 되면 그 파일에 게시글이라는 클래스를 선언 해준다.

그냥.. 얘 이름은 게시글(Board)이야~ 라고 이름 붙여준다고 띵킹하도록해요.

public class Board {}

그럼 인제 저 {} 안에 이것저것 정보들을 넣어줘야한다.
약간 board 클래스라는 바구니 안에, board라는 음식을 만들기 위한 재료들을 미리 넣어두는 느낌이라고 보면 된다!

그 재료들이 바로

  1. 필드
  2. 생성자
  3. 메서드(필요하면)

1. 필드

에는 그 도메인/클래스(우리는 게시글)에 있어야 할 특징들을 선언해주는 거다.

게시글에는 게시글id(게시글마다 분류하기 위해), 게시글 title, 게시글 content
가 있겟네요

private Long id;
private String title;
private String content;

그리고 이렇게 미리 선언해준 필드들을 사용해서 생성자와 메소드도 정해줍니다.

2. 생성자

이건 이제 진정한 그 규칙이랄까
다른 어딘가에서 게시글 도메인을 쓰고싶을 때, 아 게시글 이거 갖다 쓰려면 이 필드는 꼭 챙겨가. 라고 정해주는 거임

public Board(Stirng title, String content){
this.title= title;
this.content=content;
}

이렇게 게시글에는 당연히 제목이랑 글내용이 들어가 있어야겠죠?
그니까 이런 당연한 것들을 내가 정해주는거에요
그래서 다른 클래스에서 이 게시글을 꺼내서 쓸 때 저 둘 중에 하나라도 안가져다 쓰면
쉽알!! 내가 제목이랑 내용도 꼭 같이 넣으랬지!!!!!!
하고 오류를 조낸 뜨게 합니다

쳐맞을래?????

3. 메서드

메서드는 이제 음..뭐가잇지
그래요 게시글을 수정할 수도 있잖아요?
그 때 수정하는 메소드(함수..그냥 방법이라고 생각해도 됨)
를 정하는 거임

public void update(String title,Sting content){
this.title=title;
this.content=content;
}

이렇게 수정(update)할 때 실제로 사용할 필드들을 넣어주는 겁니다.

그래요 뭐..여기까지.
글 쓰다보니까 이미 다 아는 내용인데 지금 바빠죽겟는데 뻘시간 보낸 것 같아서 살짝 화남

오류 및 예외 처리(문제 수습하기!!)

  1. 우리가 예외를 어떻게 정의하고,
  2. 예외가 발생할 수 있음을 알리고,
  3. 사용자는 예외가 발생할 수 있음을 알고 예외를 핸들링하는지

는 다음 시간에..추가해보도록.오늘은 09/26

조만간 추가하도록 하지

profile
헬로

0개의 댓글