[1] 자바에서 문자열을 분리하는 방법
[2] 인터페이스 기반의 프로그래밍
[1] 자바에서 문자열을 분리하는 방법
split
구분자를 기준으로 자르는 String 클래스가 갖는 메서드
구분자를 기준으로 문자열을 자르면 문자열이 3개가 되는데 이를 배열에 담아야 함
문자열을 특정 구분자로 자르면 배열 형식으로 담아진다.
문자열은 객체이므로 String/String/String으로 만들어져 변수가 이를 가리키는 형태로 메모리에 저장된다.
배열 타입으로 반환하기 때문에 반복문 사용 가능
구분자를 기준으로 문자열을 자른 다음 개별의 값을 반복문으로 출력한다.
(1) 스캐너를 이용하여 키보드로부터 데이터를 입력 받음
(2) 문자열을 공백 포함하여 입력
(3) 공백을 기준으로 자름
(4) 반복문을 사용하여 출력
(5) 스캐너 사용 끝났으므로 스트림을 닫음
# , : 구분자(delimiter)
예) Hello World Java
split(" ") : 공백 하나를 기준으로 자르기 때문에 중간에 공백이 하나씩 더 들어간 형태로 출력된다.
split("\\s+") : 공백이 하나든 두개든 공백으로 자를 때는 정규 표현식을 사용해야 함
public class StringSplit { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("문자열을 입력하세요 : "); String str = scanner.nextLine(); String[] strArray = str.split("\\s+"); for (String s : strArray) { System.out.println(s); } scanner.close(); } }
정규 표현식
\s : 공백을 나타내는 정규 표현식
\s+ : 하나 이상의 공백 문자(whitespace character)를 나타내는 표현식
# 공백을 기준으로 문자열을 자르기 위함
# 공백이 여러 개일 수도 있음
# + : 하나 이상
# \ : 자바에서 특별한 의미를 갖는 기호
\s에서는 하나의 기호로 사용해야 함
# \\ : 특별한 문자가 아닌 기호로 해석하게 하기 위함(기호 두 번을 적어야 하나로 해석)
정규 표현식에서 사용하는 표현식에서 사용하는 기호로 이해해야 정규 표현식의 의미가 형성된다.
[2] 인터페이스 기반의 프로그래밍
ERP 시스템을 개발하려면 DB를 잘 활용해야 함
자바에서 DB에 접속하여 DB 프로그래밍을 하려면 이에 대한 API 필요
DB와 관련된 API를 사용하려면 인터페이스를 이용하여 어떤 API를 활용하는 방법을 알아야 함
인터페이스를 이용한 API 활용 방법(데이터베이스 측면)
자바에서 제공하는 인터페이스를 이용하여 벤더(다른 회사들)들이 다양한 API를 만들어 사용할 수 있는 프로그래밍 기법
API는 누가 만들어야 할까?
새로운 DB를 만듦 > DB를 자바 개발자들이 사용하게 하려면 API 필요 > API는?
데이터베이스를 연동하는 API는 자바가 아닌 벤더들이 만들어야 함
# 벤더 : DB를 만든 회사들을 통틀어 칭하는 말
자바에서 제공하는 인터페이스를 이용하여 DB 연결에 관련된 다양한 API를 만들어 제공함
벤더들이 API를 다 다르게 만들면?
DB 벤더들은 자신의 DB에 접속하는 방법이 각각 다름(다형성)
DB에 맞는 API 사용 방법을 이해해야 함
자바에서 벤더들이 어떻게 만들었는지 알 수 없음(불편)
DBM → oracle
DBM → mySQL
DBM → MSSQL
자바에서 인터페이스 제공
구현 클래스를 만들어 API를 사용하도록 함
# 인터페이스(추상 메서드)를 하위 클래스가 모두 구현하면 하위 클래스의 동작 방식을 모르더라도 인터페이스를 통해 사용 가능
# 벤더들이 API를 임의로 만드는게 아닌 인터페이스를 갖고 API를 설계함
# 자바에서 제공하는 인터페이스를 통해 벤더들이 제공하는 API 사용 가능
인터페이스 기반의 API 설계
인터페이스 기반의 API 설계 기법을 알아야 DB 프로그래밍(JDBC) 가능
API를 어떻게 설계하면 좋을까?
User 클래스는 CC 클래스를 통해 BB 클래스를 동작시킬 수 있다.(BB 클래스의 동작 방식을 몰라도 사용 가능)
(1) BB 클래스의 동작 방식을 노출시키고 싶지 않다면?
BB 클래스의 자바 소스 코드가 제공되지 않은 상태
BB 클래스의 동작 방식을 모르기 때문에 단독으로 사용하기 어려움
(2) CC 인터페이스를 노출시켜 CC가 갖는 추상 메서드를 BB가 재정의하게 함
# BB를 동작시킬 수 있는 인터페이스를 만들어 구현 관계로 만들어 놓고 인터페이스가 갖는 동작을 BB가 구현시키게 함
# CC 인터페이스를 통해 BB의 동작 실행(인터페이스 기반의 프로그래밍)
# BB의 동작 방식을 모르더라도 CC를 이용하여 BB 동작 가능(동적 바인딩)
# User : API를 사용하는 사람
인터페이스 기반의 프로그래밍(데이터베이스 측면)
인터페이스를 통해 프로그램을 동작시키는 프로그래밍
(1) 인터페이스 : 추상 메서드를 만든다.
(2) 하위 클래스 : 인터페이스의 추상 메서드를 구현한다.
(3) User(메인 클래스) : 하위 클래스를 동작시킨다.
BB가 숨겨져 있지만, 인터페이스를 이용하면 마치 BB를 내가 다 알고 있는 것처럼 동작시키는 것
CC는 노출 시키고 BB의 내부 코드는 숨기는 CC 클래스(I)를 만든다,
CC(부모) : 인터페이스 역할(옵저버), x() y() z()
# 옵저버 : 멀리서 상대방을 볼 수 있는 디자인 패턴
BB(자식) : 내부 동작 방식을 모르는 경우
x() // 재정의(override)
y() // 재정의(override)
z() // 재정의(override)
User : CC c = new BB(); // Upcasting(c를 통해 b에 접근)
c.x(); // 재정의 : 하위 클래스의 메서드 동작
c.y();
c.z();
cc가 갖는 메서드이지만, 재정의된 경우 동적 바인딩이 일어나므로 bb의 메서드가 동작된다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.