포스트

2023-10-10-TIL

Today I Learned

모달은 현재 페이지 위에 겹쳐 뜨고, 닫기 전에는 뒤의 화면을 조작할 수 없는 창이다. WAI-ARIA 작성 가이드는 모달 대화 상자 아래의 창들이 비활성(inert) 상태가 된다고 정의한다. 뒤 화면은 보통 흐리게 처리하고, 키보드 포커스는 대화 상자 안에서만 돈다. Esc로 닫을 수 있어야 하고, 포커스를 밖으로 옮기려면 대화 상자를 닫아야 한다. 이 점이 비모달 대화 상자와 다르다.

팝업은 좁게 보면 window.open()으로 여는 새 브라우저 창이다. MDN에 따르면 요즘 브라우저는 사용자의 클릭 같은 직접적인 입력에 대한 응답으로만 팝업을 열게 하고, 막히면 window.open()이 null을 돌려준다. 그래서 페이지가 열리자마자 별도 창을 띄우려 하면 브라우저가 막을 수 있다.

정리하면 모달은 “사용자의 흐름을 멈추고 응답을 받는 페이지 안의 요소”이고, 팝업은 “별도 창”이다. 실무에서는 페이지 안에 뜨는 레이어를 모두 팝업이라고 부르기도 하니, 대화할 때는 뒤 화면을 막는지부터 확인하면 오해가 줄어든다.

  • https://brunch.co.kr/@tigrisdesign/3

try ~ finally

finally 블록은 try 블록이 어떻게 끝나든 실행된다. 정상 종료, 예외, return, break, continue 모두 해당한다. Java 튜토리얼은 JVM이 종료되는 경우처럼 finally가 실행되지 않을 수 있는 예외적인 상황도 함께 적고 있다.

catch 없이 try와 finally만 쓰는 것도 문법상 허용된다. JLS 14.20은 try 문이 catch 절과 함께 또는 없이 finally 블록을 가질 수 있다고 정한다. 이때 예외는 여기서 처리되지 않고, 정리 코드를 실행한 뒤 호출한 쪽으로 그대로 전파된다.

1
2
3
4
5
6
lock.lock();
try {
    update();
} finally {
    lock.unlock();
}

예외 처리는 위쪽에 맡기고, 이 자리에서는 잠금 해제 같은 정리만 확실히 하고 싶을 때 쓰는 형태다.

주의할 점이 하나 있다. JLS 14.20.2에 따르면 finally 블록 자체가 갑자기 끝나면(return하거나 예외를 던지면) try에서 발생한 예외는 버려진다. finally 안에서 return을 쓰면 원래 예외가 조용히 사라질 수 있다는 뜻이다. 자원을 닫는 용도라면 튜토리얼이 권하는 대로 try-with-resources를 쓰는 편이 안전하다.

  • https://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html
  • https://stackoverflow.com/questions/4559661/java-try-catch-finally-blocks-without-catch
이 글은 저작권자의 CC BY 4.0 라이선스를 따릅니다.

댓글

아직 댓글이 없습니다