Java 24

[inteillij][spring]NullPointerException 에러 해결기

또래에게 편지를 발송하는 로직에서 +-5살의 5명에게 보낸다. 문제는 또래가 5명이 없을 때 발생한다. 그래서 5명이 존재하지않는다면 또래가 아닌 사람중에서 랜덤으로 선택된 또래를 제외한 다른 유저에게 보내는 로직을 만들었다. (5명보다 작은 또래들에게는 보낸다. 나머지를 랜덤으로) 나는 그냥 5명보다 작으면 5명 전부 랜덤으로 보낼려고 했는데 팀장 레마가 map을 이용하여 일기쪽을 만들었다는 것을 알려주어 자신감을 얻어 구현하였다. 랜덤으로 5명을 뽑을 때 5명이 아니여도 에러가 발생하지않는다는 것을 확인하고 뽑힌 또래에게는 보내고 나머지 유저를 랜덤으로 골라 보내도록 로직을 만들었다. 맵을 사용하였다. if (idx_similar.getUserSimilarAge() == 1){// 편지 발송 유저가 ..

UMC🚀 2022.02.13

[intellij][spring]반환할것이 없을 때 에러 상태를 반환하는 법

java는 c++과 달리 반환형이 꼭 있어야한다. c++에서는 반환형을 int로 했다고 해도 반환을 딱히 하지않아도 빨간줄이 뜨지않는다. 그러나 java에서는 반환형을 void가 아닌 다른 것을 했다면 해당 반환형에 맞는 데이터를 꼭! 반환해주어야만 빨간줄이 사라진다. 코드를 만들다가 if, else 를 사용하여 구분할때가 있다. 예를 들어 지금 만드는 코드는 신고를 할 때, 신고사유에 따라 나누는데 각 신고 사유는 반환할 것이 있다. 그래서 걱정이 없다. 이외에 신고사유는 들어올일이 없어서 안만들었지만 java에서는 만들어야한다. 앞서 말했던 것처럼 반환형이 필요하기 때문이다. 이처럼 else 에서 throw new 를 해주면 된다!! 보라색글씨의 POST_REPORT_REASON은 BaseRespon..

UMC🚀 2022.02.02

[intellij][spring]화분점수를 변경하는 API를 만들며 에러가 난 이유분석

1. String 간의 비교 c++이 익숙한 나머지 string을 비교할 때 "=="으로 비교하여 계속 에러가 발생하였다. 자바에서 String을 비교할 때는 (신고의 이유에 따라 감소하는 화분의 점수가 달라지기 때문에 신고의 이유를 구분하기 위함이다) ReportReason.equals("hate") 이와 같이 "hate"와 ReportReason에 들어있는 String이 같은지 비교할 수 있다. 2. Dao 의 쿼리 문법 userIdx를 인수로 받기 때문에 이를 반환하는 함수를 Dao에서 만들어야했다. Dao의 쿼리를 만들면서 인수로 받은 Req의 값을 이용하였다. String selectQuery_diary = "SELECT Diary.userIdx FROM Diary WHERE diaryIdx=p..

UMC🚀 2022.01.30

JAVA - 메소드 오버라이딩[overriding]과 오버로딩

1. 오버라이딩 이란? ; _ 사전적인 뜻 : 다른 무엇보다 더 중요한 부모클래스에게 상속받은 메서드를 자식클래스에 맞도록 수정하는 것 (상속관계에서) 오버라이딩은 메서드의 내용만을 새로 작성하는 것이므로 메서드의 선언부(메서드 이름, 매개변수의 개수 및 타입, 반환타입)는 부모 클래스와 완전히 일치해야한다. 부모 클래스에 있는 메서드를 자식 클래스에서 선언하면 자식 클래스의 메서드만 실행된다. 2. 오버라이딩의 규칙 1) 부모클래스의 메서드와 동일한 시그니쳐와 반환타입을 가진다. -> 구현 부분에서만 다르다. 2) 오버라이딩된 메서드는 부모클래스보다 접근 범위를 좁게 변경할 수 없다. -> 접근 제어자에는 4가지가 있다. 큰 순서대로 Public, Protected, Default, Private 만약..

Java - 상속[extends]

1. 상속이란? 기존의 클래스에 extends 키워드를 이용해 재사용하여 새로운 클래스를 만드는 것이다. 재사용을 하며 그대로 사용할수도 있고, 새로운 멤버를 추가할수도 있다. 코드의 재사용성이 높으며 변경 및 추가가 용이하다. 기존의 클래스를 부모클래스, 상속을 받아 생성된 클래스를 자식클래스라고 한다. 자식클래스는 부모클래스의 모든 멤버를 상속받는다! ✔Java에서는 한개의 클래스만을 부모 클래스로 갖는 단일상속만 가능한다. ✔상속관계를 [Is - a ]관계라고 한다. ex ) 원은 도형이다. 치타는 동물이다. 2. 예제 코드 class Tv{ // 부모 클래스 boolean power; int channel; void power() { power = !power; } void channelUp(){..

java - 객체 배열(9)

객체를 여러개 다룰때 배열로 다루면 개별로 관리하는 것보다 편리하다. 이를 객체 배열이라고 한다. 1. 객체 배열 객체 배열안에 객체가 들어가는 것이아니다! 객체의 주소가 들어가므로 객체 배열은 참조변수의 배열이라고 생각하면 편하다. Ball[] ball = new Ball[5]; -> Ball객체를 5개 생성하는 것이 아닌 5개의 Ball 객체를 참조할 변수 5개를 만든것이다. -> Ball객체를 생성한 후에 주소를 각 참조변수에 대입해야한다. 예제 코드 ) public class CircleArrayDemo { public static void main(String[] args) { Circle[] circle = new Circle[5]; // Circle 객체 5개를 저장할 참조변수의 배열 생성 ..

Java - 동적배열[ArrayList](8)

앞서 포스팅한 배열은 정적배열이다. 처리할 데이터의 개수가 정해진 경우 정적배열을 사용하면 편하지만 고정되어있지 않을때 괜히 자리를 만들고 사용을 하지 않는등 자원을 낭비할수있다. 그 해결을 위해서 동적배열을 사용한다. [ "확장 가능한 배열"] Collection 인터페이스를 확장하는 인터페이스는 List, Queue, Set이 있다. 그중 List인터페이스를 구현한 클래스가 ArrayList이다. 동적배열은 크기가 유동적인 배열이다. 자바는 이를 위해 ArrayList 클래스를 지원한다. 컬렉션 프레임워크를 설명하기전이기에 간단하게 동적 배열의 개념에서만 설명할것이다! 1. ArrayList 객체 생성 ArrayList list = new ArrayList(); -> ArrayList 참조변수 = n..

JAVA - 배열의 선언과 생성(7) + String

java에서는 C++의 배열 생성과 달리 'new' 키워드를 이용해 배열을 만든다! 1. 배열 배열을 만들때 두가지의 과정을 거친다. 1. 선언 2. 생성 int는 기본자료형이지만 int 의 배열은 참조자료형이다. 모든 배열은 참조 자료형이다!! 배열은 무조건 선언할 때 크기가 지정되어야만 한다. 이 단점을 보완하기 위해 자바에는 Collection이 존재한다. 1. 선언은 배열을 다루기 위한 참조변수를 선언하는 것이다. (참조변수는 주소가 저장되어있다.[배열의 첫주소]) 2. new를 이용해 배열의 타입(ex. int) 와 길이를 지정해준다. (실제 저장공간을 생성한다.) int[] scores; //1.배열의 선언 scores = new int[5]; //2. 배열의 생성 참고로 배열의 선언부에 붙는..

java - 문자열[==,!=,compareTo, equals](6)

1. 문자열 문자열은 자바에서 기본적으로 제공하는 클래스인 String 타입을 사용한다. String s1 = "안녕 java"; -> s1은 내부적으로 new String("안녕 java")를 호출해 생성한 객체이다. -> "안녕 java"를 문자열 리터럴이라고 한다. String s2 = "안녕 java"; 가 추가된다면 내용이 같으므로 s2라는 객체를 새롭게 생성하는 것이 아니라 기존의 문자열 리터럴을 공유한다. 즉 s1과 s2는 동일한 객체를 가리킨다! 2. 문자열의 비교 일반적으로 비교연산에 사용하는 "==" 와 "!="는 문자열을 비교할때 다른 의미로 사용한다. 문자열이 동일한지 비교하는 것이 아니라 동일한 객체인지 검사하는 것이다. public class String1Demo { public..

자바 - 정적멤버[static](5)

static은 한단어로 말하면 "공유"이다. -> 클래스의 필드(변수)를 공유할수있게해준다. + 객체를 생성하지 않아도 메소드를 호출할 수 있도록 해준다. (메서드에서는 클래스 변수만 사용가능) 클래스에서 객체를 만들면 각 객체마다 변수가 생성된다. 각 변수는 독립적이다. -> 객체가 생성될때 함께 생성되며 객체가 소멸되면 함께 소멸된다. static 키워드로 지정하여 클래스의 모든 객체가 공유하는 변수다. (클래스 변수라고도 한다) -> 객체 생성전에도 접근이 가능하다. -> 객체를 여러개 생성한다고 해도 static변수는 하나뿐이다. => 인스턴스 변수는 객체 생성 후에만 호출이 가능 && static변수는 객체 생성 전에도 호출이 가능하다. 정적멤버 접근법 클래스 이름. 정적변수이름 클래스 이름. ..