전체 글

개발 공부 블로그
Programing Language/Java

[Java] 메서드의 매개 변수 개수가 정해져 있지 않을 때

메서드의 매개 변수 개수가 정해져 있지 않을 때 메서드 선언 시 매개 변수의 개수를 정하지 않고, 메서드 호출 시마다 매개 변수 개수를 바꾸며 호출해야 할 때가 있다. 이때 두 가지 방법으로 매개 변수의 개수를 랜덤 하게 지정할 수 있다. sum 메서드를 예시로 든다. int sum1(int[] values) { int sum = 0; for (int val : values) sum += val; return sum; } int sum2(int... values) {} 첫 번째로는 매개 변수를 배열 타입으로 선언하는 것이다. 메서드 호출 시 배열을 넘겨줌으로써 배열 안에 담긴 데이터를 모두 전달한다. 단점이 있다면 메서드 호출 전 배열을 미리 선언해야 된다는 것이다. int[] values = {1, 2..

Programing Language/Java

[Java] 배열 복사, System.arraycopy()

배열 복사, System.arraycopy() 기본적으로 배열은 한 번 생성한 이후에 크기를 변경할 수 없다. 따라서 기존 배열에서 데이터를 추가하기 위해서 기존 배열보다 저장 공간이 더 큰 새로운 배열을 만든 뒤, 새로운 배열로 데이터를 복사해야 한다. for문을 사용하여 데이터를 복사할 수 있고, for문 말고도 System.arraycopy() 메서드를 사용하여 복사할 수 있다. System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length); src는 원본 배열, srcPos는 원본 배열에서 복사를 시작할 데이터의 인덱스 값이다. dest는 새 배열이고, destPos는 새 배열에서 복사한 데이터를 붙여 넣을 시작 인덱스..

Database

동일한 테이블을 두 번 조인해야 할 때 (join, subquery)

동일한 테이블을 두 번 참조해야 할 때 예를 들어, 다음과 같은 두 개의 테이블이 있다고 가정한다. create table board ( -- 게시글 정보 저장 uid int not null auto_increment comment 'pk', -- uid b_cate_th1_cd varchar(10) not null comment '공통코드 1차', -- 카테고리 1 b_cate_th2_cd varchar(10) not null comment '공통코드 2차', -- 카테고리 2 title varchar(100) not null comment '제목', content text comment '내용', regdt date default (current_date) comment '등록일자' writer va..

Web/Thymeleaf

[Thymeleaf] JavaScript에서 타임 리프 변수 사용하기

JavaScript에서 타임 리프 변수 사용하기 타임 리프를 사용하여 html 파일 작성 시 일반적인 이와 같이 th:inline을 명시해준다. 이후 자바 스크립트 코드는 모두 /**/로 묶어주어야 한다. 따라서 첫 줄에 /**/를 작성해주었다. 또한 타임 리프 변수인 ${paging.page}도 /*[[]]*/로 묶어주어야 하기 때문에 /*[[ ${paging.page} ]]*/라고 작성하였다.

Programing/Errors

[JPA] No property 'Method Name' found for type 'Class Name'!

[JPA] No property 'Method Name' found for type 'Class Name'! 아무것도 안 보고 무지성으로 하려 하니 다채로운 오류가 많이 발생한다. 그리고 이는 좀 많이 슬프다.. springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'manageController' defined in file [C:\Devroot\spring-workspace\board\board\out\production\classes\com\eleven\board\controller\ManageController.class]: Unsatisfied dependency expressed th..

Web/Thymeleaf

[Thymeleaf] location.href에 변수 넣기 (th:onclick, GET)

location.href에 타임 리프 변수 넣기 타임리프에서 GET 방식으로 필요한 파라미터를 집어넣을 때, 태그의 th:href에서는 무리 없이 값이 들어갔지만 th:onclick에서 location.href 사용 시에는 th:href처럼 동작하지 않았다. 그래서 조금 다르게 작성하였다. 쉬운 이해를 위해 두 가지 코드를 비교해본다. th:href View page url임을 명시할 때는 @{}를 사용한다. GET 방식으로 데이터를 전달하려면 @{} 안에 (key=value)를 넣어준다. 위 코드를 예시로 하였을 때 view는 이동할 페이지이고, uid는 key이며 ${data.uid}가 value이다. 만약 ${data.uid}에 들어가는 값이 1이라고 가정하고 위 태그를 클릭했을 때 url은 아래와..

Programing/Errors

[IntelliJ][Error] invalid source release

invalid source release 프로젝트 자바 버전과 내 컴퓨터에 설정된 java 버전이 맞지 않아서 발생하는 오류이다. 환경 변수를 직접 수정하여 기본 자바 버전을 변경하는 방법도 있지만, 두 개의 자바 버전을 사용해야 하는 경우도 있으므로 여기서는 해당 프로젝트의 jdk 버전만 변경한다. (Gradle로 생성된 프로젝트 기준 방법이다.) java 11 파일은 이미 있는 상황이라 가정한다. Ctrl + Alt + Shift + S 단축키를 클릭하여 Project Structure에 들어간다. SDK: 부분을 11 버전으로 변경한다. (자신이 사용할 버전으로 변경해주면 된다.) 만약 11 버전이 없는 경우 오른쪽 Edit 버튼을 클릭하여 추가해주어야 한다. + 표시를 눌러 추가하여 사용하면 된다..

Programing Language/Java

[Java] 자바에서의 String 타입

자바에서의 String 타입 String name = "홍길동"; String 객체를 생성할 때 문자열 값인 "홍길동"은 String 객체로 생성되고, name 변수는 생성된 String 객체를 참조한다. String 타입은 클래스 타입으로, 참조 타입이기 때문에 기본 타입과는 달리 힙 영역에 생성되기 때문에 이러한 구조를 가진다. name 변수 자체는 스택 영역에 저장되고, 문자열 리터럴인 "홍길동"은 힙 영역에 String 객체로 생성된다. 그리고 name 변수에 "홍길동"이 담겨있는 String 객체의 주소 값이 저장된다. 문자열 리터럴 자바에서는 문자열 리터럴이 동일하다면 String 객체를 공유한다. String name1 = "홍길동"; String name2 = "홍길동"; 따라서 위와 같은..

Programing Language/Java

[Java] NullPointerException

NullPointerException NullPointerException은 참조 타입(reference type) 변수를 잘못 사용했을 때 발생한다. 기본 타입(primitive type) 변수는 애초에 null로 초기화가 불가능하므로 기본 타입 변수와 관련해서는 NullPointerException이 일어나지 않는다. 참조 타입 변수가 null 값을 가지는 건 힙 영역의 객체를 참조하지 않는다는 뜻이다. 따라서 참조 타입 변수에 저장된 주소 값이 없는 것일 뿐, 참조 타입 변수는 스택 영역에 생성되긴 한다. 참조 타입 변수를 사용한다는 건 객체를 사용한다는 것을 의미하는데, null 값을 참조 타입 변수에 저장한다는 의미는 참조할 객체가 없다는 의미이다. 따라서 null 값을 가진 참조 타입 변수는 ..

Programing

좋은 객체 지향 프로그래밍 (With. 스프링)

객체 지향 프로그래밍 객체(Object)들의 모임이 서로 협력하는 것이 객체 지향 프로그래밍이다. 이때 메시지를 사용하여 객체끼리 협력한다. 객체란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고, 다른 것과 식별 가능한 것을 말한다. 나는 첫 프로그래밍을 C언어로 접했기 때문에 객체 지향의 장점을 절차 지향과 비교해 예시를 들 때 이해가 잘 됐다. 어떤 프로그램이 절차 지향 방식으로 짜였다면 프로그램에 어떠한 기능을 제외하려고 할 때 그 기능과 관련된 앞뒤 코드를 살펴보고, 삭제할 기능과 연결된 부분을 수정해야 한다(이는 물론 객체 지향에서도 마찬가지이긴 하다). 그러나 절치 지향과 객체 지향은 수정해야 할 코드의 범위가 다르다. 객체 지향 방식으로 (잘) 설계했다..

Database/MySQL

MySQL Server 연결 시 localhost와 127.0.0.1 차이

MySQL Server 연결 시 localhost와 127.0.0.1 차이 리눅스에서 MySQL 서버 연결 시 host 속성으로 localhost와 127.0.0.1은 차이가 존재한다. > mysql -uroot -p --host=localhost --socket=/tmp/mysql.sock MySQL 소켓 파일을 이용해 접속한다. 이때 호스트를 localhost로 지정하면 Unix domain socket을 이용하여 유닉스의 프로세스 간 통신(IPC, Inter Process Communication)을 하는 것이다. > mysql -uroot -p --host=127.0.0.1 --port=3306 TCP/IP를 통해 127.0.0.1(로컬 호스트)에 접속한다. 이도 자기 서버를 가리키는 루프백 IP..

Setting

Window MySQL 8.0 설치하기

윈도우 MySQL 8.0 가볍게 설치하기 MySQL은 엔터프라이즈와 커뮤니티 버전이 있는데, 엔터프라이즈 버전은 유료이고 커뮤니티 버전은 무료이다. MySQL의 상용화 방식은 오픈 코어 모델(Open Core Model)로, 두 버전의 핵심 기능은 거의 차이가 없으므로 대부분 커뮤니티 버전을 사용한다. 따라서 여기서도 커뮤니티 버전을 설치한다. 공부용으로 설치하는 것이기 때문에 최대한 가볍게 설치한다. MySQL :: Download MySQL Community Server Select Operating System: Select Operating System… Microsoft Windows Ubuntu Linux Debian Linux SUSE Linux Enterprise Server Red Hat..

밈아
Mimah