[JSP] 태그 종류(scriptlet, directive, declaration, expression, comment, action)
·
[Programming Language]/[JSP]
1. 스크립틀릿 태그 - Scriptlet Tag 형태HTML 코드 내에 Java 코드를 삽입할 때 사용되는 태그스크립틀릿 태그가 복잡하게 얽혀있으면 코드의 가독성이 떨어짐변수의 선언은 가능하나 메서드의 선언은 불가보통 태그 내부에 작성 2. 지시자 태그 - Directive Tag 형태page, include, taglib가 존재2-1. 페이지 관련 설정을 할때 사용하는 것으로, 보통 IDE에서 새로운 JSP 파일을 만들면 최상단에 자동으로 작성되어 있다.2-2. 특정 페이지를 추가할 때 사용하는 것으로 header이나 footer등과 같이 공통으로 사용되는 코드를 모듈화하여 별도의 jsp 파일로 만들어놓고 필요할 때 include로 포함시켜 사용한다. 안녕하세요 반갑습니다! wel..
[JSP] JSP란? JSP와 Servlet? 기본 예제
·
[Programming Language]/[JSP]
1. JSP란?JSP란 Jakarta Server Pages의 약자로 서버 측에서 실행되는 템플릿 엔진이다. 나는 처음에는 이것이 별도의 프로그래밍 언어인줄 알았다. 그러나 이는 단순 HTML 코드에 Java 코드가 삽입된 형태의 방식을 뜻하는 것이었다. 이와 비슷한 것으로는 ASP(Active Server Pages), PHP(Hypertext Preprocessor)가 있는데 이들 역시 서버 측에서 실행되는 서버 사이드 스크립트 언어이다. 현재는 JSP보단 자바의 공식 템플릿 엔진인 Thymeleaf가 더 많이 사용되는 추세이지만 아직 과거부터 서비스된 페이지에는 JSP가 사용되고 있는 것을 찾아볼 수 있다.https://www.scourt.go.kr/portal/main.jsp - 대한민국 법원 대..
[SwiftUI] publishing changes from background threads is not allowed 원인, 해결 방법
·
[Programming Language]/[SwiftUI]
[머릿말]테스트용으로 만든 서버에서 데이터를 받아와 앱에 띄우는 과정에서 이 경고를 마주하게 되었다.이와 관련해서 이전에 GPT에게 무언가를 물어봤을 때 데이터의 갱신은 Main Thread에서 이뤄져야 한다고 답했던 기억이 어렴풋 난다. Synchronous, Asynchronous는 중요한 개념이므로 이 기회에 잘 정리해보고자 한다. 1. Main Thread vs Background ThreadSwiftUI에서 모든 UI 업데이트는 Main Thread에서 이뤄진다. 만약 시간이 오래걸리는 작업(ex. 다운로드 작업)을 Main Thread에서 수행한다면 해당 작업이 완료될 때까지 Main Thread는 다른 작업을 수행할 수 없으므로 앱이 일시정지된 것처럼 보이게 되고, 이는 좋지 않은 사용자 경..
[Swift] mutating 키워드란? (값 타입 인스턴스에서의 값 수정)
·
[Programming Language]/[Swift]
1. 값 타입 인스턴스 : 구조체(struct), 열거형(enum)Swift에서 구조체와 열거형은 값 타입이고, 클래스는 참조 타입이다. 1-1. class : 참조 타입참조 타입의 클래스의 인스턴스가 있을 때 값을 수정하는 메서드는 다른 프로그래밍 언어에서 했던 것처럼 하면 된다.class Account { private var balance: Int = 0 func getBalance() { print("잔고: \(balance)") } func deposit(_ amount: Int) { balance += amount } func withdraw(_ amount: Int) { balance -= amount..
[Swift] Queue 자료 구조 (removeFirst를 popLast로 대체하기)
·
[Programming Language]/[Swift]
[머릿말]Swift를 사용하여 Programmers에서 여러 코딩테스트를 풀고 있다. 어느덧 5천대 순위가 되었고 이전에는 Queue를 사용하여 문제를 풀어도 통과가 되었지만 이제는 시간 초과 오류를 가끔씩 접하곤 한다. 이는 removeFirst() 메서드의 시간 복잡도가 O(n)이기 때문인데, 이를 시간 복잡도가 O(1)인 popLast() 메서드로 대체하면 실행 시간을 훨씬 단축시킬 수 있다.1. 기존에 사용했던 QueuePython에는 Queue가 존재해서 좋았지만 Swift에는 존재하지 않는다. 따라서 배열을 사용하여 직접 Queue를 만들어 사용해야 한다. 기존에 문제를 풀 때 사용했던 Queue는 아래와 같이 그냥 배열 그 자체였다.// 기본 Queuevar queue: [Int] = []/..
[Swift] 메서드(Methods) [인스턴스•타입 메서드, mutating, self]
·
[Programming Language]/[Swift]
1. 인스턴스(Instance) 메서드, 타입(Type) 메서드Swift에서 메서드는 인스턴스 메서드와 타입 메서드로 나눠볼 수 있다. 인스턴스 메서드는 생성된 각각의 인스턴스에 대한 메서드라고 보면 되고 타입 메서드는 구조체나 클래스와 같은 타입 자체에 대한 메서드라고 보면 된다. 1-1. 인스턴스 메서드인스턴스 메서드란 구조체(Struct), 클래스(Class), 열거형(enum) 내에 선언되는 메서드를 말한다. class Person { var name: String var born: Int init(name: String, born: Int) { self.name = name self.born = born } func printAg..
[Swift] 프로퍼티 관찰자(Property Observers)
·
[Programming Language]/[Swift]
1. 프로퍼티 관찰자프로퍼티 관찰자란 프로퍼티의 값이 변경될 때 호출되는 것으로, 새로운 값이 기존 값과 동일하더라도 호출된다. 프로퍼티 관찰자에는 2가지 종류가 있다.willSet : 새로운 값으로 변경되기 전에 호출didSet : 새로운 값으로 변경되고 나서 호출1-1. willSetclass Asset { var totalMoney: Int = 0 { willSet(newTotalMoney) { print("새로운 잔액 : \(newTotalMoney)만원") } }}let asset = Asset()asset.totalMoney = 100 // 새로운 잔액 : 100만원위 예제에서 willSet은 asset.totalMoney = 100 부분..
[Swift] 프로퍼티(Property) [Stored •Computed, getter, setter, read-only]
·
[Programming Language]/[Swift]
1. 저장된 프로퍼티(Stored Property) vs 계산된 프로퍼티(Computed Property)프로퍼티는 저장하는 값에 따라 저장된 프로퍼티와 계산된 프로퍼티로 나뉜다. 1-1. 저장된 프로퍼티(Stored Property)먼저 저장된 프로퍼티란 우리가 다른 언어에서도 흔히 사용했던 멤버 변수의 개념으로, 다른 변수에 관계없이 스스로의 값을 갖는 변수 또는 상수를 말한다.struct Person { var name: String let age: Int}var p1 = Person(name: "John", age: 20)Person 구조체는 저장된 프로퍼티 변수(Variable Stored Property)인 name과 저장된 프로퍼티 상수(Constant Stored Property..
[Swift] 구조체(Structure) vs 클래스(Class) 차이점
·
[Programming Language]/[Swift]
1. 구조체(Structure)와 클래스(Class)의 공통점구조체와 클래스는 비슷하면서도 다르다. 둘다 아래와 같은 기능을 공통적으로 할 수 있다.Property(프로퍼티) 정의Method(메서드) 정의Subscript(서브스크립트) 정의init(초기화 함수) 정의extension(확장)Protocol(프로토콜) 준수 2. 구조체(Structure)와 클래스(Class)의 차이점2-1. 기본 초기화 함수구조체와 클래스 모두 프로퍼티의 기본값을 정의할 수 있다.struct PersonStructure { var name: String = "" var age: Int = 0}class PersonClass { var name: String = "" var age: Int = 0} 그러..
[SwiftUI] NavigationLink 파란색 오버레이 변경 방법
·
[Programming Language]/[SwiftUI]
[머릿말]NavigationLink를 적용한 각 항목은 하이퍼링크가 달렸을 때처럼 파란색 오버레이가 적용된다. 하지만 난 각 항목이 원래의 색상대로 표시되도록 하고 싶었다...1. foregroundStyle(_:) 사용첫 번째로는 각 항목에 대해 foregroundStyle(_:) 수정자를 적용하는 방법이 있다. 아래 예제에서 1번의 색을 초록색으로 변경해보았다.import SwiftUIstruct ContentView: View { var body: some View { NavigationStack { VStack(spacing: 20) { NavigationLink(value: "1") { Im..