728x90
반응형

try-catch 구문은 프로그램 실행 중 예외가 발생할 가능성이 있는 코드를 감싸는 구문입니다. try 블록에는 예외가 발생할 가능성이 있는 코드를 작성하고, 예외가 발생하면 catch 블록에서 예외를 처리합니다.

try-catch 구문의 기본 문법은 다음과 같습니다.

try {
    // 예외가 발생할 가능성이 있는 코드
} catch (ExceptionType1 e1) {
    // 예외1 처리 코드
} catch (ExceptionType2 e2) {
    // 예외2 처리 코드
} catch (ExceptionType3 e3) {
    // 예외3 처리 코드
} finally {
    // 예외 발생 여부에 관계없이 항상 실행되는 코드
}

 

위 구문에서 try 블록 내에서 예외가 발생하면, 해당 예외를 처리하는 catch 블록이 실행됩니다. 여러 개의 catch 블록을 사용하여 예외의 종류에 따라 다르게 처리할 수 있습니다.

마지막으로 finally 블록은 예외 발생 여부에 관계없이 항상 실행되는 코드입니다. 예외 발생 시 처리할 코드나 리소스를 해제하는 코드 등을 작성합니다.

 

 finally 블록은 생략해도 상관은 없습니다.


그러나 finally 블록은 보통 자원을 해제하는 등의 정리 작업을 수행하기 위해 사용됩니다. 예를 들어 파일을 열어 작업을 수행한 후에는 finally 블록에서 파일을 닫는 코드를 작성하여 파일을 안전하게 닫을 수 있습니다.

그렇기 때문에 finally 블록을 생략하면 자원 누수 등의 문제가 발생할 수 있으므로, finally 블록을 꼭 작성하는 것이 좋습니다.



예를 들어, 다음은 숫자를 나누는 예제 코드입니다.

int a = 10;
int b = 0;

try {
    int c = a / b;
    System.out.println(c);
} catch (ArithmeticException e) {
    System.out.println("0으로 나눌 수 없습니다.");
} finally {
    System.out.println("프로그램을 종료합니다.");
}

위 코드에서는 try 블록 내에서 a를 b로 나누려고 하면 예외가 발생할 가능성이 있습니다. 이를 catch 블록에서 ArithmeticException 예외를 처리하고, finally 블록에서 프로그램을 종료하기 전에 항상 출력되는 메시지를 출력합니다.

실행 결과는 다음과 같습니다.

0으로 나눌 수 없습니다.
프로그램을 종료합니다.

따라서 try-catch 구문을 사용하여 예외 처리를 함으로써 프로그램이 비정상적으로 종료되는 것을 방지하고, 안정성을 높일 수 있습니다.

 

Java에서 예외 처리를 위한 Exception 클래스와 그 하위 클래스들이 존재합니다.

 catch 블록에서 처리할 예외 클래스는 try 블록에서 예외가 발생할 수 있는 클래스와 일치해야 합니다. 예외 처리를 위한 주요 예외 클래스는 다음과 같습니다.

1. Exception 클래스: 모든 예외 클래스의 최상위 클래스입니다.
2. RuntimeException 클래스: 프로그램의 오류나 버그에 의해 발생하는 예외입니다. try-catch 구문을 사용하지 않아도 컴파일러에서 오류가 발생하지 않습니다.
3. IOException 클래스: 입출력 작업 중 발생하는 예외입니다.
4. SQLException 클래스: 데이터베이스 연결과 관련된 예외입니다.
5. NullPointerException 클래스: 객체 참조가 null인 상태에서 객체의 메서드를 호출하려고 할 때 발생하는 예외입니다.


이 외에도 다양한 예외 클래스가 존재합니다. 예를 들어, FileNotFoundException 클래스는 파일이 존재하지 않을 때 발생하는 예외를 처리합니다. 따라서 try-catch 구문을 사용할 때, 발생할 가능성이 있는 예외의 종류를 파악하고 적절한 예외 클래스를 사용하여 catch 블록을 작성해야 합니다.

728x90
반응형
728x90
반응형

JsonParser 객체는 JSON 데이터를 파싱하는 Java의 클래스입니다. Java에서는 JSON 데이터를 파싱하여 객체나 배열로 변환하기 위해 JsonParser 객체를 사용할 수 있습니다.

JsonParser 객체는 JSON 데이터를 파싱하기 위해 다음과 같은 메서드를 제공합니다.

parse(String json) : JSON 문자열을 파싱하여 JsonObject 또는 JsonArray 객체로 변환합니다.
parse(Reader json) : JSON 문자열을 파싱하여 JsonObject 또는 JsonArray 객체로 변환합니다.
parse(InputStream json) : JSON 문자열을 파싱하여 JsonObject 또는 JsonArray 객체로 변환합니다.
JsonObject는 JSON 데이터에서 중괄호({})로 둘러싸인 객체를 나타내며, JsonArray는 대괄호([])로 둘러싸인 배열을 나타냅니다.

예를 들어, 다음과 같은 JSON 데이터가 있다고 가정해봅시다.

{
  "name": "John",
  "age": 30,
  "city": "New York"
}


이 데이터를 파싱하여 JsonObject 객체로 변환하는 코드는 다음과 같습니다.

String jsonStr = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}";
JsonParser parser = new JsonParser();
JsonObject jsonObject = parser.parse(jsonStr).getAsJsonObject();

JsonObject 객체의 "name" 속성에 "Tom"이라는 값을 담는 코드는 다음과 같습니다.

jsonObject.addProperty("name", "Tom");

JsonObject 객체의 "name" 속성에 "Tom"이라는 값을 담은 후, JsonObject를 다시 JSON 문자열로 변환하는 코드는 다음과 같습니다

String updatedJsonStr = jsonObject.toString();

이렇게 변환된 JSON 문자열 updatedJsonStr의 값은 다음과 같습니다.

{"name":"Tom","age":30,"city":"New York"}

 

이처럼 JsonParser 객체를 사용하여 JSON 데이터를 파싱하면, Java에서 JSON 데이터를 쉽게 가공하거나 활용할 수 있습니다.

 

 

728x90
반응형
728x90
반응형

JSON(JavaScript Object Notation)은 경량 데이터 교환 형식으로, 인간이 읽고 쓰기 쉽고, 기계가 분석하고 생성하기도 쉽습니다. 특히 웹 어플리케이션에서 데이터 전송과 저장을 위한 표준 포맷으로 널리 사용됩니다.

JSON은 키-값 쌍으로 이루어진 객체와 배열, 문자열, 숫자, 불리언(true/false)값과 null 값을 표현할 수 있습니다. JSON 포맷은 일반 텍스트로 작성되며, 파일 확장자는 .json으로 표시됩니다.

아래는 간단한 JSON 객체의 예시입니다.

{
  "name": "John",
  "age": 30,
  "city": "New York"
}


이 객체는 "name", "age", "city" 세 개의 키를 가지며, 각각의 값은 문자열 "John", 숫자 30, 문자열 "New York"입니다.

JSON은 다른 프로그래밍 언어와 상호 운용성이 좋습니다. 예를 들어, 자바스크립트에서 JSON 객체를 파싱하여 객체 또는 배열로 변환할 수 있으며, 파이썬에서는 json 모듈을 사용하여 JSON 데이터를 읽고 쓸 수 있습니다.

JSON은 XML에 비해 문법이 간단하며, 더 가볍고 빠르게 처리할 수 있습니다. 그러나 JSON은 XML보다 표현력이 떨어지며, 메타데이터를 표현하기에 적합하지 않습니다.

JSON은 현재 웹에서 가장 많이 사용되는 데이터 교환 형식 중 하나이며, 다양한 프로그래밍 언어와 기술에서 널리 사용됩니다.

JSON 데이터를 생성하고 가공하는 방법은 다양합니다. 여기에서는 일반적으로 사용되는 몇 가지 방법을 설명하겠습니다.

1. 객체 리터럴 사용하기
JavaScript에서 JSON 데이터를 생성하는 가장 간단한 방법은 객체 리터럴을 사용하는 것입니다. 객체 리터럴은 중괄호({}) 안에 키-값 쌍으로 데이터를 정의하는 방법입니다. 예를 들어:

 

var person = { "name": "John", "age": 30, "city": "New York" };

2. JSON.stringify() 사용하기
JavaScript에서는 JSON.stringify() 함수를 사용하여 객체를 JSON 문자열로 변환할 수 있습니다. 예를 들어:

var person = { "name": "John", "age": 30, "city": "New York" };
var jsonStr = JSON.stringify(person);
console.log(jsonStr); // 결과: {"name":"John","age":30,"city":"New York"}

3. JSON.parse() 사용하기
JSON 문자열을 JavaScript 객체로 변환하려면 JSON.parse() 함수를 사용합니다. 예를 들어:

var jsonStr = '{"name":"John","age":30,"city":"New York"}';
var person = JSON.parse(jsonStr);
console.log(person.name); // 결과: "John"

4. REST API에서 데이터 가져오기
REST API는 JSON 형식의 데이터를 제공하는 것이 일반적입니다. JavaScript에서는 XMLHttpRequest 객체나 fetch API를 사용하여 서버에서 데이터를 가져올 수 있습니다. 

fetch('https://example.com/api/person/1')
  .then(response => response.json())
  .then(data => console.log(data.name));


이처럼 JSON 데이터를 생성하고 가공하는 방법은 다양합니다. 어떤 방법을 선택하느냐에 따라 데이터 생성과 가공의 효율성과 편리성이 달라질 수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형
728x90
반응형
JSTL(JavaServer Pages Standard Tag Library)은 JSP(JavaServer Pages)를 개발할 때 사용할 수 있는 태그 라이브러리입니다.
JSTL은 Java 웹 개발에서 자주 사용되는 코드를 태그 형식으로 제공하여 개발자들이 더 간단하고 효율적으로 JSP를 작성할 수 있도록 지원합니다.
JSTL은 다양한 태그 라이브러리를 제공합니다. 예를 들어, core 태그 라이브러리는 JSP 페이지에서 변수를 선언하고 출력하는 기능을 제공합니다. 또한, loop 태그 라이브러리는 for문과 같은 반복문을 처리할 수 있습니다. 이 밖에도 JSTL은 조건문, 함수 호출, URL 처리 등 다양한 기능을 제공합니다.
JSTL은 Java 웹 개발에서 일반적으로 사용되는 자바 코드를 JSP 페이지에서 처리할 수 있도록 하여, 개발자들이 더 쉽게 JSP 페이지를 작성할 수 있도록 합니다. 또한, JSTL은 태그 형태로 제공되기 때문에 코드의 가독성을 높이고 유지보수를 더 쉽게 할 수 있습니다.
JSTL은 자바 웹 개발에서 광범위하게 사용되며, 다양한 태그 라이브러리를 제공하여 개발자들이 더 간편하게 JSP 페이지를 작성할 수 있도록 도와줍니다.

 

 

1. JSTL 라이브러리 추가하기
먼저, JSTL 라이브러리를 다운로드 받아 프로젝트에 추가해야 합니다. JSTL 라이브러리는 JSP 페이지에서 사용할 수 있는 태그 라이브러리입니다. 이 라이브러리를 사용하기 위해서는 다음과 같이 웹 프로젝트의 WEB-INF/lib 디렉토리에 jstl.jar 파일과 standard.jar 파일을 추가해야 합니다.

2. JSTL 태그 라이브러리 선언하기
JSTL 태그를 사용하려면 JSTL 태그 라이브러리를 선언해야 합니다. JSP 페이지의 상단에 다음과 같이 선언합니다.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

 - prefix 속성은 태그를 구분하기 위한 접두어를 지정하고, uri 속성은 JSTL 태그 라이브러리의 위치를 지정합니다.

3. JSTL 태그 사용하기
JSTL 태그를 사용하는 방법은 다음과 같습니다.

 3-1 변수 선언

<c:set var="변수명" value="값" />

3-2 변수 출력

<c:out value="${변수명}" />

3-3 조건문

<c:if test="${조건식}">
  ...
</c:if>

 

3-4 반복문

<c:forEach var="변수명" items="${컬렉션}">
  ...
</c:forEach>

3-5 함수 호출

${fn:함수명(인자)}

 

 

 

728x90
반응형
728x90
반응형

자바에서 받아온 변수를 JSTL을 사용해서 출력, 수정 등 컨트롤할 수 있다.

JSTL을 이용해서 받아온 변수를 수정하거나 다루는방법을 정리해본다.

 

<c:set>에는 property, scope, target, value, var 5개의 속성을 사용할 수 있다.

 - property : 프로퍼티 설정

 - scope : 변수가 저장된 스코프이며, page, request, session, application 4가지 속성값을 가질 수 있고, 선언하지 않아도 기본값으로 page가 설정된다.

 - target : 프로퍼티를 설정할 빈 또는 맵

 - value : 변수에 넣을 값

 - var : 변수명

 

1. 변수 선언하기 <c:set>

<!-- 기본선언 -->
<c:set var="item1" value="computer">

<!-- 출력 -->
${item1}

<!-- scope사용, 미선언시 기본값 "page" -->
<c:set var="item1" value="computer" scope="request">

 

2. 변수 삭제하기 <c:remove>

<!-- 해당 변수 삭제 -->
<c:remove var="item1"/>

<!-- 
해당 스코프의 변수 삭제
*스코프 선언하지 않을경우 모든스코프의 해당변수삭제
-->
<c:remove var="item1" scope="request"/>

 3. 변수 출력하기 <c:out>

<!-- 변수 출력1 -->
<c:out value="${item1}"/>

<!-- 변수 출력2 (item1의 값이 null일시 "item"으로 출력) -->
<c:out value="${item1} default="item"/>

<!-- 변수 출력3 -->
${item1}

 

이렇게 JSTL 변수 기본 사용법을 마무리하고, 응용까지 해보자.

 

1. 변수값 변경

<!-- 변수 선언 -->
<c:set var="item1" value="computer"/>
<c:set var="item2" value="mouse"/>
<c:set var="tmp" value="${item1}"/>

${item1} <!-- 결과 : computer -->
${item2} <!-- 결과 : mouse -->

<!-- 변수값 바꾸기 -->
<c:set var="item1" value="${item2}"/>
<c:set var="item2" value="${tmp}"/>

${item1} <!-- 결과 : mouse-->
${item2} <!-- 결과 : computer-->

 

2. Map 변수선언 및 사용

<c:set var="myMap">
    <c:catch>
        <%
            Map<String, String> map = new HashMap<String, String>();
            map.put("key1", "value1");
            map.put("key2", "value2");
            out.print(map);
        %>
    </c:catch>
</c:set>

<c:forEach var="entry" items="${myMap}">
    Key: ${entry.key}, Value: ${entry.value}
</c:forEach>

위 코드에서는 <c:set> 태그를 사용하여 "myMap"이라는 이름의 변수를 선언하고,

JSP 페이지 내에서 Java 코드를 실행하여 Map 타입의 객체를 생성하고,

이 객체를 "myMap" 변수에 할당한다.

그 후 <c:forEach> 태그를 사용하여 "myMap" 변수에 저장된 Map 타입의 객체를 반복문으로 순회하며,

각각의 키와 값을 출력한다.

즉, 변수를 선언할 때 Map 타입을 사용할 수 없지만, 변수에 Map 타입의 객체를 할당하여 사용하는 것은 가능하다.

728x90
반응형
728x90
반응형

 

스택/큐 문제지만 내 방식대로 풀어보았다.

class Solution {
	    boolean solution(String s) {
	        boolean answer = true;
	        int tmp0 = 0; // '(' 일때 ++ ,  ')' 일때 -- 할 변수
	        if(s.charAt(0) == ')') return false; //처음부터 ')'가 나오면 바로 리턴
	        if(s.charAt(s.length()-1) == '(') return false; //마지막에 '('가 나오면 바로 리턴
	        
	        for(int i = 0; i<s.length();i++) { // 0번째 자리부터 마지막자리까지 반복한다.
		        char tmp = s.charAt(i); // s의 i번째 문자를 가져온다.
		        if(tmp0 == 0 && tmp == ')') return false; // '('가 나오지 않았는데 ')'가 나오면 리턴 "()))((()" 차단
		        if(tmp == '(')tmp0++;
		        if(tmp == ')')tmp0--;
	        }
	        
	        if(tmp0 != 0) return false; // for문이 다 끝났는데 tmp0이 0이 아니면 리턴 false
	        
	        return answer; //모든 검사 후 정상적으로 괄호가 있을때 true 리턴
	    }
	}

채점결과 모두 통과했다.

다른 사람의 풀이를 보자..

class Solution {
    boolean solution(String s) {
        boolean answer = false;
        int count = 0;
        for(int i = 0; i<s.length();i++){
            if(s.charAt(i) == '('){
                count++;
            }
            if(s.charAt(i) == ')'){
                count--;
            }
            if(count < 0){
                break;
            }
        }
        if(count == 0){
            answer = true;
        }

        return answer;
    }
}

이분도 스택이나 큐를 쓰지 않고 문제를 풀었다.

나랑 비슷하지만, 좀더 깔끔한것 같다.

if(s.charAt(0) == ')') return false; //처음부터 ')'가 나오면 바로 리턴
if(s.charAt(s.length()-1) == '(') return false; //마지막에 '('가 나오면 바로 리턴

나는 for문 전에 처음이나 마지막을 먼저 검사하는 부분이 있는데

이는 효율성을 나름 생각해서 “()()()()()()()()()()()()(” 이런 경우에

끝까지 검사한 후에야 리턴하기때문에 넣었던 것인데..

다른사람것도 돌려보니 속도면에서는 크게 차이는 없는것 같다.(?)

아래는 스택을 이용한 방법인것 같다.

스택은 실사용해본적이 없어서 잘 몰랐는데 이참에 공부해봐야겠다.

import java.util.Stack;
class Solution {
    boolean solution(String s) {
        boolean answer = true;  
        String res = "YES";
        Stack<Integer> st = new Stack<>();

        for (int i = 0; i < s.length(); i++) {
                if (s.charAt(i) == '(') {
                    st.push(1);
                } else if (s.charAt(i) == ')') {
                    if (st.isEmpty()) {
                        answer = false;
                        break;
                    } else {
                        st.pop();
                    }
                }
            }

            if(!st.isEmpty()) {

                answer = false;

            }

            System.out.println(res);
return answer;
    }   

}

Stack 사용법

Stack<String> stack = new Stack<>();
	        stack.add("스택추가");
	        stack.push("스택추가");
	        String tmp = stack.pop();

스택 사용법은 push, pop만 알고 넘어가자.

stack.add()와 stack.push()의 차이점도 알게되었는데,

add() 의 리턴값은 boolean

push() 의 리턴값은 <E>이다.

즉, add()는 성공실패를 받고

push는 넣은값을 다시 리턴받는것이다.

스택/큐 문제지만 내 방식대로 풀어보았다.

class Solution {
	    boolean solution(String s) {
	        boolean answer = true;
	        int tmp0 = 0; // '(' 일때 ++ ,  ')' 일때 -- 할 변수
	        if(s.charAt(0) == ')') return false; //처음부터 ')'가 나오면 바로 리턴
	        if(s.charAt(s.length()-1) == '(') return false; //마지막에 '('가 나오면 바로 리턴
	        
	        for(int i = 0; i<s.length();i++) { // 0번째 자리부터 마지막자리까지 반복한다.
		        char tmp = s.charAt(i); // s의 i번째 문자를 가져온다.
		        if(tmp0 == 0 && tmp == ')') return false; // '('가 나오지 않았는데 ')'가 나오면 리턴 "()))((()" 차단
		        if(tmp == '(')tmp0++;
		        if(tmp == ')')tmp0--;
	        }
	        
	        if(tmp0 != 0) return false; // for문이 다 끝났는데 tmp0이 0이 아니면 리턴 false
	        
	        return answer; //모든 검사 후 정상적으로 괄호가 있을때 true 리턴
	    }
	}

채점결과 모두 통과했다.

다른 사람의 풀이를 보자..

class Solution {
    boolean solution(String s) {
        boolean answer = false;
        int count = 0;
        for(int i = 0; i<s.length();i++){
            if(s.charAt(i) == '('){
                count++;
            }
            if(s.charAt(i) == ')'){
                count--;
            }
            if(count < 0){
                break;
            }
        }
        if(count == 0){
            answer = true;
        }

        return answer;
    }
}

이분도 스택이나 큐를 쓰지 않고 문제를 풀었다.

나랑 비슷하지만, 좀더 깔끔한것 같다.

if(s.charAt(0) == ')') return false; //처음부터 ')'가 나오면 바로 리턴
if(s.charAt(s.length()-1) == '(') return false; //마지막에 '('가 나오면 바로 리턴

나는 for문 전에 처음이나 마지막을 먼저 검사하는 부분이 있는데

이는 효율성을 나름 생각해서 “()()()()()()()()()()()()(” 이런 경우에

끝까지 검사한 후에야 리턴하기때문에 넣었던 것인데..

다른사람것도 돌려보니 속도면에서는 크게 차이는 없는것 같다.(?)

아래는 스택을 이용한 방법인것 같다.

스택은 실사용해본적이 없어서 잘 몰랐는데 이참에 공부해봐야겠다.

import java.util.Stack;
class Solution {
    boolean solution(String s) {
        boolean answer = true;  
        String res = "YES";
        Stack<Integer> st = new Stack<>();

        for (int i = 0; i < s.length(); i++) {
                if (s.charAt(i) == '(') {
                    st.push(1);
                } else if (s.charAt(i) == ')') {
                    if (st.isEmpty()) {
                        answer = false;
                        break;
                    } else {
                        st.pop();
                    }
                }
            }

            if(!st.isEmpty()) {

                answer = false;

            }

            System.out.println(res);
return answer;
    }   

}

Stack 사용법

Stack<String> stack = new Stack<>();
	        stack.add("스택추가");
	        stack.push("스택추가");
	        String tmp = stack.pop();

스택 사용법은 push, pop만 알고 넘어가자.

stack.add()와 stack.push()의 차이점도 알게되었는데,

add() 의 리턴값은 boolean

push() 의 리턴값은 <E>이다.

즉, add()는 성공실패를 받고

push는 넣은값을 다시 리턴받는것이다.

728x90
반응형
728x90
반응형

LIKE절 사용법

SELECT * FROM 테이블 WHERE 컬럼 LIKE ‘검색할패턴’
  • 패턴 종류 ( % ), ( _ )
  • ( % ) : 모든문자
  • ( _ ) : 한글자

테이블 예시 :

회원정보

ID NAME ADDRESS

KING 배정남 서울특별시 종로구 241-24
HONG 정우성 대전광역시 동구 용전동 22-4
YUJIN 최홍만 인천광역시 중구 홍길동 11-2
CHOI 김우빈 서울시 강남구 24-56
// ADDRESS(주소)가 '서울특별시'로 시작하는 모든 ROW를 출력
SELECT * FROM 회원정보 WHERE ADDRESS LIKE '서울특별시%';

// ADDRESS(주소)에 '동구'라는 단어가 들어가는 모든 ROW를 출력
SELECT * FROM 회원정보 WHERE ADDRESS LIKE '%동구%';

// ADDRESS(주소)에 마지막 글자가 '24'로 끝나는 모든 ROW를 출력
SELECT * FROM 회원정보 WHERE ADDRESS LIKE '%24';

// ADDRESS(주소)에 '광역시'앞에 두글자가 어떤문자든 있는 ROW를 출력 
SELECT * FROM 회원정보 WHERE ADDRESS LIKE '__광역시%'; // 언더바 두개임
728x90
반응형
728x90
반응형

표현식1표현식2같으면 NULL,

표현식1표현식2같지 않으면 표현식1을 리턴한다.

회원정보테이블

ID NAME ADDRESS AGE

KING 배정남 서울특별시 종로구 241-24 21
HONG 정우성 대전광역시 동구 용전동 22-4 54
YUJIN 최홍만 인천광역시 중구 홍길동 11-2 32
CHOI 김우빈 서울시 강남구 24-56 25

 

 

SELECT
	NULLIF(NAME,'배정남') TEST,
	TB_USER.*
FROM
	TB_USER

 

결과 :

ID TEST NAME ADDRESS AGE

 

KING NULL 배정남 서울특별시 종로구 241-24 21
HONG 배정남 정우성 대전광역시 동구 용전동 22-4 54
YUJIN 배정남 최홍만 인천광역시 중구 홍길동 11-2 32
CHOI 배정남 김우빈 서울시 강남구 24-56 25

보통, 특정 값을 NULL로 변경해야 할때 사용한다고 한다.

728x90
반응형

+ Recent posts