기본 콘텐츠로 건너뛰기

Part4 객체지향 프로그래밍의 기법(12장 ~ 15장)

API : 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 한 인터페이스

String API

concat(추가할 문자열) : 문자열을 연결할 때

charAt(위치) : 문자열 중에서 특정한 위치의 글자를 가져오고 싶을 때

String.valueOf() : 모든 기본 자료형을 모두 문자열로 변경

spilit() : 문자열을 특정 토큰으로 분리

문자열과 배열

String str = "한글은";
char[] arr1 = str.toCharArray();
System.out.println(Arrays.toString(arr1));

Java의 성능 튜닝의 기본 String 대신 StringBuffer/StringBuilder를 이용, String은 immutable이라서 새로 만들어야 하지만 StringBuffer와 StringBuilder은 mutable이 이므로 변경가능함

StringBuilder를 써야 하는 경우 : 루프를 돌면서 문자열의 내용이 계속해서 변경되는 경우, '+'혹은 '+='와 같은 연산이 빈번하고 자주 사용되는 메소드인 경우, if ~ else에 의한 연산에 의해 문자열이 완성되는 경우(주로 SQL 문이나 명령어)

시간 관련 API 

System.currentTimeMillis() : 현재 시각

Calendar 함수

선언 방법 2가지

Calendar cal1 = Calendar.getInstance();
Calendar cal2 = new GregorianCalendar();

데이터를 얻을 때는 get() - 월(month)는 0부터 시작하므로 월-1로 나옴

int year = cal1.get(Calendar.YEAR);
int month = cal1.get(Calendar.MONTH);
int date = cal1.get(Calendar.DATE);

데이터를 변경할 때는 set()

cal2.set(Calendar.YEAR, 2020);
cal2.set(Calendar.MONTH, 0); // 1월
cal2.set(Calendar.DATE, 1);

요일을 얻을때는 Calendar.DAY_OF_WEEK - 1은 일요일

int day = cal1.get(Calendar.DAY_OF_WEEK);

말일이 몇 일까지인지를 확인할 때는 getActualMaximum()

int lastDay = cal2.getActualMaximum(Calendar.DATE);

Math.random()과 Random 클래스의 차이 : Math.random()은 double에 해당되는 임의의 실수를 발생시킴, Random 클래스는 난수 발생 시에 사용하는 seed 값을 지정할 수 있고, 추가 메소드가 있음

java.util.Scanner를 사용하면 편리한 경우 : 키보드에서 들어오는 문자열을 간편하게 String으로 얻는 경우 출력, 파일에서 문자열 데이터를 읽어들이는 경우, 입출력 프로그래밍에서 문자열로 데이터를 읽어내는 경우

정확한 소수 사용은 BigDecimal

System.out.printf(); : 데이터의 포매팅 기능

            %d : 10진수를 표시(o:8진수, x:16진수)

            %s : 문자열 출력

            %S : 대문자로 문자열 출력

            %.3f : 소수점 3자리

            %tY : 4자리 수로 나오는 년도

            %ty : 2자리 수로 나오는 연도

            %tm : 2자리 수로 표현되는 월

            %td : 날짜를 두 자리로 표현

            %tA : 요일, 생략하지 않은 요일(월요일 등)

            %ta : 짧게 표현되는 요일

            DecimalFormat df = new DecimalFormat("#000.00#");

            - '#'은 없으면 출력하지 않고,  있으면 출력한다.

            - '0'은 없으면 무조건 0으로 채운다.

예외 처리

에러와 예외를 구분하는 기준 : 에러는 발생하면 개발자가 어떻게 조치할 수 없는 수준(메모리 부족), 예외는 JVM은 정상적으로 동작하고 있기 때문에 다른 방식으로 처리하는 것

Exception의 두 가지 종류 

    - Checked Exception : 예외 처리를 하지 않으면 컴파일을 허락하지 않는 예외, 주로 외부 리소스와 통신하는 경우는 반드시 Checked Exception이라고 생각

    - Unchecked Exception : 컴파일 시에 체크되지 않고, 실행 시에 발생하는 Exception을 말함

java.lang 패키지 상속의 구조 : 

    Throwable 

        -Exception : 개발자가 처리할 수 있는 상황

        -Error : 개발자는 어찌 할수 없는 불가항력적인 상황

자주쓰는 메소드 : printStackTrace() - 발생한 Exception의 출처를 메모리상에서 추적하면서 결과를 알려줌 리턴 타입이 void이므로 메시지를 다른 방식으로 응용할 수 없음, getMessage() - 한줄로 요약된 요약 메시지를 String으로 반환해줌, getStackTrace() - printStackTrace() 보완으로 jdk 1.4부터 지원 StatTraceElement라는 객체들의 배열로 printStackTrace()의 결과를 객체화시켜줌

예외 처리의 중요한 두가지 : 예외는 객체로 처리되고 모든 예외는 Exception이라는 클래스의 하위 클래스이므로 Exception a = new XXXException(); 과 같은 상속 구조를 이용하여 처리, Exception의 메소드는 printStackTrace()가 가장 많이 사용됨

주로 연결을 종료하는 작업은 finally

throws : 메소드의 선언부에서 어떤 종류의 예외들이 던져질 것인지를 명시

throw : 직접 예외 객체를 발생시켜 코드 바깥으로 예외를 던질때

데이터의 저장 형태에 따른 자료구조 용어 : 리스트 - 순서를 가지고 있으며, 중복을 허용하는 보관 구조, 세트 - 순서를 가지지 않고, 데이터의 중복을 허용하지 않는 구조, 맵 - 키와 값을 가지며, 키를 가지고 원하는 데이터를 검색하는 구조

자료구조

배열의 단점 : 1. 처음 만들 때 크기를 고정해주어야 함 2. 접근하려면 반드시 인덱스 번호를 알아야함 3. 항상 배열 안의 범위에서 인덱스 번호로 접근해야만 함 4. 자료 검색할 때 사용하고 싶으면 equals()메소드를 구현해야함

List 자료구조의 대표 클래스 : ArrayList - 단방향 포인터 구조로, 순차적인 접근에 빠른 성능을 보임, LinkedList - 양방향 포인터 구조로 빈번한 데이터의 삽입, 삭제에 빠른 성능을 보임, Vector - ArrayList와 동작 방식은 같지만 속도가 느리고 멀티스레드에 대해서 좀 더 안전함

ArrayList에 데이터 추가 방법 : add(요소), add(인덱스, 요소), set(인덱스, 요소)

ArrayList에 데이터 꺼낼때 및 삭제 : get(인덱스), remove(인덱스)

해쉬맵의 특징 : 1. 키는 유일해야 함 2. 맵에는 순서가 없음 3. hashCode(), equals() 구현하면 좋음

순서 없는 주머니 Set의 특징  : 순서가 없음, 데이터의 중복을 허용하지 않음, hashCode(), equals() 구현하면 좋음

    add() : HashSet의 데이터 넣는 메소드

    remove() : HashSet의 삭제 메소드

Tree : 정리를 하는 데이터 - comparable, comparator사용해서 정렬할 수 있음

stack : 장작더미 쌓기 처럼 최신 데이터 빠르게 LIFO(Last In First Out)

주요 기능 : push(요소) - 데이터를 밀어 넣음, pop() - 맨 마지막에 들어간 데이터의 레퍼런스를 반환해주고, 자료구조에서는 삭제함, peek() - 맨 마지막에 들어간 데이터의 레퍼런스 반환 pop()과는 다르게 삭제가 일어나지 않음

Iterator : 데이터를 일렬로 나열하는 역할

    hasNext() : 뒤에 남은 데이터가 있으면 true, 없으면 false

    next() : 다음 데이터를 반환

    remove() : 객체의 레퍼런스를 삭제

Enumeration : Iterator과 거의 유사

    hasMoreElements() : hasNext()와 같음

    nextElement() : next()와 같음

자료구조의 정렬 : Comparable, Comparator 인터페이스

    Collections.sort() - String을 사용하여 간단하게 정렬, Collection 클래스는 모든 메소드가 static으로 선언되어 있음

    Collections.reverse() - sort의 정렬된 기준을 뒤집음

    Comparable 인터페이스의 메소드 - compareTo(to) 비교해서 같으면 0 앞으로 가야하면 음수 뒤로 가야하면 양수 반환

    Comparator 인터페이스의 활용 - 단순히 하나의 기준이 아니라 다른 기준으로 정렬하고 싶다면 Comparator로 기준을 만들면 됨 compare(T o1, To2) - compareTo와 비슷함, equals(Object obj)



















댓글

이 블로그의 인기 게시물

mac 맥 맥북 Brew 완전 삭제

맥북에서 Brew 초기화 Brew를 써서 h2를 쓰려고 하는데 brew install h2가 안되서 이리 저리 알아보다가 완전 삭제 후 다시 설치 하니까 되서 그 방법을 남겨놈 1. 터미널에 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall.sh)" 입력후 y랑 뭐 비번.. 2. /usr/local 폴더에서 Homebrew 폴더 삭제 rm -rf Homebrew/ 권한설정으로 잘.....삭제하고 3. 다시 설치 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" 좀 오래걸리니까 기다려야한다는걸 배움... 출처.... https://discourse.brew.sh/t/error-no-formulae-found-in-taps/8331/9

ORA-28000 계정이 잠금되었습니다 계정 잠길때

오라클 계정이 잠길때 해제방법 증상 t he account is locked 오류 발생 원인 Oracle 에서 t he account is locked  에러가 나는 원인은 ● 잘못된 패스워드로 설정횟수만큼 접속 시도시 Lock. ●  30일동안(Default) 해당 계정으로 로그인을 하지 않았을 경우 Lock. 등이 있다. 해결방법 command창에서 * 로컬일경우, sqlplus "/as sysdba"  또는  sqlplus /nolog  conn /as sysdba  * 로컬이 아닐 경우, sqlplus /nolog conn sys/password@<sid> 이름/패스워드@sid로 입력 로 접속 후 SELECT username, account_status, lock_date FROM dba_users; 으로 Lock이 된 사용자를 확인한 후 LOCKED<TIMED> 라고 되있으면, 패스워드 설정횟수 입력 오류로, 아래의 Unlock 명령만, EXPIRED & LOCKED 라고 되있으면, 패스워드 기간만료로, Unlock 후 비밀번호를 지정해줘야 한다. ALTER USER 사용자명 ACCOUNT UNLOCK; 로 Lock된 사용자를 Unl ock 시킨다 방금 말했다시피, 다시 Lock된 사용자 확인했는데,  Open되지 않고 EXPIRED되어 있다면, alter user 사용자명 identified by 바꿀패스워드;  로 패스워드를 변경하거나 또는 SQL*PLUS 를 재시작하여 Lock를 해제한 계정(사용자명/패스워드)로 로그인 하면 패스워드 변경 창이 뜬다. 추가로 패스워드 Lock 횟수 확인하는 방법은 SELECT U.USERNAME,P.PROFILE, P.RESOURCE_NAME, P.LIMIT  FROM D

메이븐으로 라이브러리 인식

 간혹 퍼블릭 jar가 아닌 파일이 있는데 그럴때 쓰면 될듯 <dependency> <groupId> SimpleCryptLib </groupId> <artifactId> SimpleCryptLib </artifactId> <version> 1.1.0 </version> <scope> system </scope> <systemPath> ${basedir}/src/main/webapp/WEB-INF/lib/SimpleCryptLib-1.1.0.jar </systemPath> </dependency> version, scope, systemPath는 꼭 작성해야 한다 groupId, artifactId, version은 암거나 해도 되는거 같음 최근(2021.05.04)스프링 부트    < dependency > < groupId > NiceID </ groupId > < artifactId > NiceID </ artifactId > < version > 1.0 </ version > < scope > system </ scope > < systemPath > ${basedir}/src/main/resources/lib/NiceID.jar </ systemPath > </ dependency > 이걸 추가해주는것도 필요할지도..?? < build > < plugins > < plugin > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-maven-plugi