전체 글 318

location.href vs. location.replace()

1. location.href = 'index.jsp' location.href는 객체의 속성이며, 주소 히스토리가 기록되기 때문에 뒤로 가기 버튼을 누른다면 이전 페이지로 이동이 가능하다. 따라서 일반적인 페이지 이동시에 사용한다. 2. location.replace = 'index.jsp' location.replace()는 메서드로 작동되며, 현재 페이지를 새로운 페이지로 덮어 씌우기 때문에 이전 페이지로 이동이 불가능하다. 따라서 이전페이지로 접근이 필요 없는 경우 보안상 덮어 씌울 때 사용한다. 3. History.back() History.back() 메서드는 브라우저가 세션 기록의 바로 뒤 페이지로 이동하도록 지시한다. 즉, history.go(-1)와 같다. 이전 페이지가 없는 경우 아무것..

1-4 재사용 : 상속보다는 조립을 지향

재사용 측면에서 1. 상속의 단점 : (변경의 유연함의 측면에서 치명적인 단점을 갖는다.) 1) 상위 클래스 변경의 어려움 : 상위 클래스를 변경할 경우 하위 클래스에 영향을 주게 된다. 따라서 클래스 계층도가 커질수록 상위 클래스를 변경하는 것은 점점 어려워진다. 2) 클래스 수의 불필요한 증가 : 예를 들어 Storage 클래스를 상속받아 CompressedStorage 클래스와 EncryptedStorage 클래스를 추가했다 가정하자. 이 상황에서 압축을 먼저 하고 암호화하는 저장소가 필요하다면 CompressedEncryptedStorage를 추가해야 하고, 암호화를 먼저 하고 압축을 해야 하는 저장소가 필요하면 EncryptedCompressedStorage를 추가해야 한다. 또한, 추가적으로 ..

*1. OOP(객체 지향 프로그래밍)

1. 의미 : 애플리케이션을 구성하는 요소를 각각의 객체로 바라보고 객체들을 유기적으로 연결하여 프로그래밍하는 것을 객체지향 프로그래밍이라고 한다. 코드의 재사용성과 중복제거를 통해 유지보수의 용이성을 높이고자 하는 것이 궁극적인 목적이다. 2. 객체란 : 사람 한 명 한 명을 객체라고 할 수 있다. 사람은 일반적으로 공통적인 속성(눈, 코, 입, 귀, 팔, 다리) 등을 갖고 있지만 생김새는 다 제 각각이다. 따라서 사람 한 명 한 명은 각각 다른 객체로 분류된다. 3. 클래스란 : 사람 한 명 한 명이 갖고있는 공통적인 속성들을 모아서 정의 내린 것을 클래스라고 한다. 흔히 여러 책에서 클래스와 객체의 관계를 설명할 때 설계도면을 예시로 드는 경향이 있다. 설계도면이 클래스이고 설계도면에 따라 찍어낸 ..

CS/ETC. 2021.06.02

접근 제어자(access modifier)

1. 의미 접근 제어자는 멤버 또는 클래스에 사용되어, 해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 한다. 접근 제어자가 default임을 알리기 위해서 default를 붙이지는 않고, 클래스나 멤버 변수, 메서드, 생성자에 접근 제어자가 지정되어 있지 않으면, 접근 제어자가 defalut임을 뜻한다. 2. 사용 가능한 곳 - 접근 제어자가 사용될 수 있는 곳은 - 클래스, 멤버 변수, 메서드, 생성자이다. 1) private = 같은 클래스 내에서만 접근이 가능하다. 2) default = 같은 패키지 내에서만 접근이 가능하다. 3) protected = 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근이 가능하다. 4) public = 접근 제한이 전혀없다. ..

0. equals()와 hashcode()

1. equals() 매개변수로 객체의 참조 변수를 받아서 비교하여 그 결과를 boolean값으로 알려주는 역할을 함. Object클래스에 정의되어 있는 equals메서드의 내용은 아래와 같다. public boolean equals(Object obj){ return(this==obj); } 위 코드에서 알 수 있듯이 두 객체의 같고 다름을 참조 변수의 값으로 판단한다. 따라서 서로 다른 두 객체를 equals메서드로 비교하면 항상 false의 결과가 나온다. 1) 자바의 정석 p451 예제 확인 2) value라는 멤버 변수를 갖는 Value클래스를 정의하고, 두 개의 Value클래스의 인스턴스를 생성한 다음 equals메서드를 이용해서 두 인스턴스를 비교하면 equals 메서드는 주소 값으로 비교를..

@ModelAttribute의 쓰임과 Model, ModelMap, ModelAndView

1. @ModelAttribute를 이용한 커맨드 객체 이름 지정 아래와 같이 ModelAttribute를 이용해서 클래스 이름을 변경해서 뷰 코드에서 사용할 때 이용가능하다. view 단에서 접근 할 때 $(memberInfo.name)이렇게 접근하면 된다. @RequestMapping(method = RequestMethod.POST) public String regist( @ModelAttribute("memberInfo") MemberRegistRequest memRegReq, BindingResult bindingResult) { new MemberRegistValidator().validate(memRegReq, bindingResult); if (bindingResult.hasErrors()..

페이지 수준 권한 부여

1. 스프링 시큐리티를 이용하여 페이지 내에서 특정 권한 or 특정 이름을 가지고 있는 사용자에게만 특정 목록 or 특정 버튼 보이게 설정하기 1. Controller에서 아래와 같이 @ModleAttribute("showCounselLink")를 이용해서 현재 사용 중인 접속자의 이름이 "user"를 포함해야지만 특정 버튼 보이게 끔 설정할 수 있다. @ModelAttribute의 역할에 따라 /main페이지와 /admin페이지에서 showCounselLink의 리턴 값을 활용할 수 있다는 개념을 이용한다. ' ${showCounselLink}'와 같은 형태로 @Controller public class SecurityContoller { @ModelAttribute("showCounselLink") ..

1. Vue.js

1. vue.js란 뷰 코어라이브러리는 화면단 데이터 표현에 관한 기능을 중점적으로 지원하지만 프레임 워크의 기능인 라우터, 상태관리, 테스팅 등을 쉽게 결합할 수 있는 형태로도 제공한다. 따라서 라이브러리역할 뿐만 아니라 프레임워크 역할도 한다. 뷰는 앵귤러의 데이터 바인딩(뷰에 표시되는 내용과 모델의 데이터를 동기화) 특성과 리액트의 가상돔 기반 렌더링 특징을 모두 가지고 있다. 리액트나 앵귤러보다 성능이 우수하고 가볍고 빠르고 누구나 쉽게 배울 수 있다. 2. UI 화면단 라이브러리 뷰는 UI화면 개발 방법 중 하나인 MVVM 패턴의 뷰 모델에 해당하는 화면단 라이브러리이다. MVVM패턴이란 화면을 모델-뷰-뷰모델(돔리스너, 데이터 바인딩처리)로 구조화해 개발하는 방식을 의미한다. 1) 돔 리스너(..

Spring Security의존제거, HttpServletRequest이용

1. HttpServletRequest의 쓰임 스프링 시큐리티를 사용해서 인증, 권한 기능을 구현할 때 스프링 시큐리티는 Controller단에서 HttpServletRequest를 매개변수로 넣고 현재 로그인한 사용자를 인식한다. 이 경우 스프링 시큐리티의 API에 의존하지 않고 사용자가 속한 역할을 확인할 수 있다. 이때의 장점은 스프링 시큐리티의 API가 변경되거나 보안 구현 방식을 변경할 때 업데이트해야 할 코드가 줄어든다. (스프링 시큐리티의 API에 의존하지 않으니) 다른 방법으로 Authentication을 메서드의 파라미터로 넣을 경우 스프링 시큐리티가 현재의 Authentication 객체를 HttpServletRequest.getPrincial() 매서드(시큐리티에 의존하지 않고 현재 ..