Back-end 68

입출력(I/O)

1.1 의미 : 입출력은 컴퓨터 내부 또는 외부의 장치와 프로그램 간의 데이터를 주고받는 것을 의미한다. 1.2 스트림 : 한쪽에서 다른 한쪽으로 데이터를 전달하려면 1. 두 대상을 연결하고, 2. 데이터를 전송할 수 있는 무언가가 필요한데 이를 스트림이라고 한다. 즉, 데이터를 운반하는 데 사용되는 연결 통로가 스트림인 것이다. 1.3 바이트기반 스트림 : 1) 입력 스트림 : FileInputStream(파일), ByteArrayInputStream(메모리), PipedInputStream(프로세스), AudioInputStream(오디오 장치) 2) 출력 스트림 : FileOutputStream, ByteArrayOutputStream, PipedOutputStream, AudioOutputStre..

private static final Logger LOGGER = LoggerFactory.getLogger(this.class);

"이렇게 써라!!" private final Logger logger = LoggerFactory.getLogger(this.getClass()); 1. 분석 1) static으로 선언한 이유 : static을 선언하면 클래스 변수로 객체 생성이 될 때마다 해당 객체를 매번 생성하지 않고 초기 클래스 로딩 시 한 번만 생성해서 사용하게 된다. 그러나, Spring에서는 객체를 굳이 싱글턴 형태로 디자인하지 않아도 객체를 싱글턴과 같이 한 번만 생성해서 사용하게 된다. 따라서 무조건적인 static을 선언해 Perm 영역의 공간을 소비하지는 말자. 또한, 직렬 화하는 것을 피할 수 있다. (Perm영역이란? Permanent Generation의 약자로 객체의 생명주기가 영구적일 것으로 생각되는 객체를 관..

MessageSource 메시지 국제화 처리

1. applicationContext.xml에 아래와 같은 설정을 해준다. //빈 각체에서 메시지 이용하기 위한 것 //ApplicationContextAware 인터페이스 구현 or //MessageSourceAware 인터페이스 구현해서 getMessage()메서드 이용해서 메시지 사용해도 된다. 2. LocaleMessage 클래스 구현 package com.legalcounsel.Common; import org.springframework.context.support.MessageSourceAccessor; import java.util.Locale; public class LocaleMessage { private static MessageSourceAccessor msAcc = null; ..

JVM(Java Virtual Machine)?

1. JVM이란? JVM이란 Java Byte Code를 OS에 맞게 해석해주는 역할을 한다.(가상 머신이란 프로그램을 실행하기 위해 물리적인 머신과 유사한 머신을 소프트 웨어로 구현한 것을 뜻한다.) jvm의 역할은 java와 os사이에 중개자 역할을 수행하여 java가 os에 구애받지 않고 재사용을 가능하게 해 준다. 그리고 메모리 관리를 수행한다. 또한, jvm은 스택 기반의 가상 머신이다. (ARM 아키텍처 같은 하드웨어는 레지스터 기반) 1. Java compiler(javac)는. java 파일을. class라는 Java byte code로 변환시켜준다. ByteCode는 기계어가 아니기 때문에 OS에서 바로 실행되지 않는다. 이를 위해 JVM은 OS가 ByteCode를 이해할 수 있도록 해석..

QueryString, request.getParameter, request.getParameterValues

1. Query String : 입력 데이터를 전달하는 방법 중 하나로 URL 주소에 데이터를 파라미터를 통해 넘기는 것을 말한다. 형식은 앤드포인트 주소 이후에?를 쓰면서 쿼리 스트링의 시작하며 뒤에는 key=value형식으로 따라붙는다. 파라미터가 여러 개일 경우 & 붙여서 복수의 파라미터를 넘길 수 있다. 2.request.getParameter : ServletRequest 인터페이스 중 하나의 메소드로 공식 문서에 따르면 "For HTTP servlets, parameters are contained in the query string or posted form data." 파라미터를 꺼내 쓸 수 있는 경우는 Querystring, post방식으로 전해진 data 두 가지 경우이다. 만약 파라미..

함수의 호출 방법 : Call By Value와 Call By Reference

1. Call By Value : 인자로 받은 값을 복사하여 처리하는 방식 Call By Value에 의해 넘어온 값을 증가시켜도 원래의 값이 보존된다. 값을 복사하여 넘기기 때문에 메모리 사용량이 늘어난다. 2. Call By Reference 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 주는 방식 값을 복사하지 않고 직접 참조하기 때문에 속도가 빠르다. 원래의 값에 영향을 주는 리스크가 존재한다. 3. Java 예제

접근 제어자(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") ..