오늘의 일기(메모장)

오늘의 일기 24-07-24

원Fe이 2024. 7. 24. 00:55

24-07-24 배운내용

    1. 자바의 interface , 추상 클래스

    2. jsp jstl_el 태그 , core 라이브러리

    3. Do it! Java 알고리즘 예제2

 

추상 클래스와 interface의 차이

1. 멤버변수

     • 추상 클래스 : 인스턴스 변수, 정적 변수, 상수 등을 포함할 수 있다.

     • Interface      : 오직 상수(final 변수)만 포함할 수 있다.

2. 메서드

     • 추상 클래스 : 추상 메서드와 일반 메서드를 모두 포함할 수 있다.

     • Interface      : 기본적으로 모든 메서드가 추상 메서드이다. 단 , Java 8부터 default 메서드와 static 메서드를 포함할 수있다.

3. 상속

     • 추상 클래스 : 클래스 상속을 통해 구현이된다. 하나의 추상 클래스만 상속받을 수 있다.

     • Interface      :인터페이스 구현을 통해 구현이 된다. 여러 개의 인터페이스를 구현할 수 있다.

4. 접근 제어자

     • 추상 클래스 : 접근 제어자를 자유롭게 사용할 수 있다.

     • Interface      : 멤버 변수는 public static final, 메서드는 public abstract로 제한이 된다.

 

추상 클래스

 

 

Interface(인터페이스)

 

jsp jstl_el 태그 , core 라이브러리

jstl 태그를 사용하기 위해서는 톰캣에서 다운받으면 되므로 생략하고.

자바에서 import문을 선언하듯 JSP에서도 JSTL 확장 태그를 사용하려면 taglib 지시자로 라이버리를 선언해야 한다.

JSP 지시자 태그 <%@ taglib %>를 사용해서 다음과 같이 선언한다.

 

사용한 예)

 

================================================

c:set 은

c:set = request.setAttribute 랑 같다.

---------------------------------------------------------------------------------

 

 

c:remove 태그는 scope를 설정하지 않으면 모든 영역의 값을 지운다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

백준 1546번 평균 - do it! java 알고리즘 예제2


결과를 제출 하니.
메모리가 19936KB , 시간이 264ms 가 나왔다.
이게 빠른건지 느린건지 메모리를 많이 잡는건지 모르겠고.

다른 풀이가 있는지 궁금해서 

 

구글에 검색을 해보았다.
검색을 해보니
Scanner 와 BufferedReader 두 가지의 방법이 있다.

1. Scanner

Scanner는 띄어쓰기와 개행문자를 경계로 값을 인식하기 때문에 따로 가공할 필요가 없어 편리하다.

하지만 BufferedReader는 입력 받은 데이터가 String으로 고정되기 때문에 데이터를 원하는 타입으로 가공하는 작업이 필요하다.

알다시피  Scanner는 지원하는 메서드가 많다. 하지만 버퍼 사이즈가 1024 char이기 때문에 많은 입력을 필요로 할 경우에는 성능 상 좋지 못한 결과를 야기한다. (Scanner도 buffer 사용한다)

 

버퍼(Buffer)
어떤 데이터가 전송 될 때, 일시적으로 저장되는 메모리 영역이다.

버퍼는 파일에 데이터를 출력할 때 버퍼에 데이터를 모아 두었다가. 운영체제의 API를 호출하여 한 번에 파일에 쓰게 하면. 입출력 장치를 구동하는 일이 줄어들기 때문에 속도와 효율이 올라간다.

 

 

2. BufferedReader

BufferedReader는 개행문자만 경계로 인식하고 입력받은 데이터가 String으로 고정된다.

그렇기에 데이터를 따로 가공해야 하는 경우가 많지만, Scanner 보다 속도가 빠르다.

버퍼 사이즈가 Scanner는 1024 char인데 비해, BufferedReader는 8192 char 이기 때문에 입력 받을 값이 많으면 BufferedReader가 유리하다.

 

또한 BufferedReader는 동기화 되기 때문에 멀티 쓰레드 환경에서 안전하고,  Scanner는 동기화 되지 않기에 멀티 쓰레드환경에서 안전하지 못하다.


오늘 배운것들을 정리 하면 느끼점.

interface와 추상 클래스의 차이, 다형성에 대해서 조금 더 이해가 된거 같다. 

jsp에서 core 라이브러리를 사용했지만. 아직 c:out , c:set, c:remove 밖에 사용해 보왔다.

진도가 느린거 같다. 유튜브 보면서 마이바티스랑 MVC 패턴으로 게시판을 생성하는 예제를 보는게 훨씬 낫겠다.

 

do it! Java 알고리즘 예제를 풀면서 내가 다음주엔 이걸 안보고 풀 수 있을까? 라는 의문이 들어서

이번주에 푼 문제들을 정리하여 다음주에는 안보고 문제를 풀어보도록 해야겠다. 

계속하다보면 늘겠지. ㅎㅎ