파싱이란 데이터를 입력받아서 객체(인스턴스)를 만드는 것을 말한다.
전국 병원의 공공데이터를 이용하여 파싱을 해보자
public class ReadFileEx {
// FileReader x
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("./hospital_info_0920.csv"), Charset.forName(“EUC-KR”));
System.out.println(br.readLine());
}
}
FileReader를 사용하여 파일을 읽어온다.
생성자에는 파일 경로와 Charset.forName("EUC-KR")를 전달하며 EUC-KR 은 한글을 표현하기 위한 인코딩 방식이다.
각 데이터들을 따로 처리해야 하기 때문에 배열로 생성한다.
class Hospital {
String name;
String address;
String tel;
}
public Hospital makeAHospital(String line){
Hospital hospital = new Hospital();
return hospital;
}
Hospital 객체 생성과 변수에 할당한다.
public Hospital makeAHospital(String “하나정형외과, 인천광역시 xxxx, 032-xxxx-xxxx”){
String[] dataArr = line.split(","); //(1)번
Hospital hospital = new Hospital(); //(2)번
hospital.name = dataArr[0]; //(3)번
hospital.address = dataArr[1]; //(3)번
hospital.tel = dataArr[2]; //(3)번
return hospital; //(4)번
}
hospital을 반환하면 한 줄의 데이터를 하나의 인스턴스로 만들어낸다.
파일에서 읽어온 정보를 담을 ArrayList를 생성한다.
public List<Hospital> getHospital(List<String> lines){
List<Hospital> hospitals = new ArrayList<>();
for(String line : lines){
hospitals.add(parse(line));
}
return hospitals;
}
lines배열의 길이만큼 line을 반복한다.
List hopitals
에 parse()
메소드에서 리턴 된 값을 삽입한다.
public static void main(String[] args) throws IOException{
ReadFileEx rfe = new ReadFileEx(Charset.forName("UTF-8"));
List<String> strLines = rfe.getLines("hospital_info_10lines.csv");
List<Hospital> parsedHospitals = rfe.getHospital(strLines);
for (int i = 0; i < parsedHospitals.size(); i++) {
Hospital hospital = parsedHospitals.get(i);
System.out.printf("%s %s %s\n", hospital.getName(), hospital.getWebsiteAddr(), hospital.getAddress().getFullAddr());
}
}
getHospital()
메소드에서 읽어온 병원 정보를 Hospital
타입의 list인 parsedHospitals
에 담아준다
parsedHospitals
배열에서 인덱스 i
위치에 있는 값을 출력해서 hospital
에 담아준다
import java.io.*;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class ReadFileEx {
public List<String> getLines(String fileName) throws IOException {
List<String> lines = new LinkedList<>();
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), "EUC-KR"));
// FileInputStream과 InputStreamReader를 조합하여 파일을 읽어온다.
String line;
while ((line = br.readLine()) != null) {
lines.add(line);
}
return lines;
}
public Hospital parse(String str) {
String[] splitted = str.split(",");
Address address = new Address(splitted[10], splitted[5], splitted[7]);
Hospital hospital = new Hospital(splitted[1], splitted[11], address);
return hospital;
}
public List<Hospital> getHospitals(List<String> lines) {
List<Hospital> hospitals = new ArrayList<>();
for (String line : lines){
hospitals.add(parse(line));
}
return hospitals;
}
public static void main(String[] args) throws IOException {
ReadFileEx rfe = new ReadFileEx();
List<String> strLines = rfe.getLines("C:\\git\\건강보험심사평가원_전국 병의원 및 약국 현황 2022.9\\1.병원정보서비스 2022.10..csv");
List<Hospital> hospitals = rfe.getHospitals(strLines);
System.out.println(hospitals.get(2).getName());
}
}
출처 : 멋사 5기 백엔드 위키 2팀 회고의 정석
$ gem
repository 생성
$ git clone <repo_name>
cd gitblog_hello2
$ gem install bundler
$ gem install github-pages
$ gem install jekyll
Settings → Pages → main브랜치 save
Actions에서 배포 되었는지 확인
config.yml 파일 수정
우수연 강사님
컴퓨팅 리소스를 인터넷을 통해 사용자의 직접적인 관리없이 사용하는 것을 말한다.
이 후 자세한 내용은 교안 참고
긍정적인 사고 == 경험하는 모든 것을 내 인사이트로 만들고자 하는 시도
Fact (사실)
Feeling (느낌)
Finding (교훈)
Future action (향후 행동)
Feedback (피드백)
다양한 경험
→ 각기 다른 경험을 가진 다양한 사람들과의 네트워킹, 나의 경험 공유
끊임없는 도전
→ 동기 부여, 넓은 시야, 다양한 기회, 나만의 길을 찾는 여정
회고 및 피드백
→ 내가 잘 하고 있는지에 대한 검증
유한한 시간
→ 시간 투자에 따른 Trade-off
갈대 같은 나의 마음
→ 이게 맞나..? 저게 더 좋은것 같은데..?
오히려 잃어가는 성장 동력
→ 비교, 좌절, 눈물
조급해 하지 말기.
나만의 것을 만들자.
깊이 없는 많은 프로젝트 경험X, 하나의 프로젝트를 운영까지 O
완벽한 준비는 없다. 여러 번의 면접 경험.
회사와 팀에 대해 알아보자.
사전조사!!! → 나의 목표와 여정을 가고자 하는 회사와 연결
회고 및 피드백
여러분의 목표는?
몰두센네카라쿠배당토?
왜?
높은연봉, 대용량트래픽경험, 뛰어난동료들, etc
만약 상상과 다르다면?
목표 vs 꿈
목표 : 꿈을 이루기 위한 수단이 되어야함 + 나에대한믿음
A. 내 꿈은 세상을 바꾸는 것이다. 핵심만 이야기 하자면 클라우드를 선택한 이유는 구현이라는 과정보다 디자인 영역에 초점을 두고 영향력을 만들고 싶었다. 이직 전에 가상화 개발의 코어를 개발(프로비저닝)했었는데
코어 영역 이해는 높아졌지만 비지니스 밸류에 대한 부분이 힘들었다.
그런 경험을 하고싶어서 새로운 목표를 세우고 달성하고 있다.
A. 어떠한 경험이라도 내 경험이다라고 인지하는 편이다. 사람은 세상에 적응 할수록 새로운 경험은 무뎌진다. 매번 같은일도 다르다고 생각한다. 경험 전과 후의 자신과의 차이점을 고민하고 회고하는 타입이다.
A. 꼭 필요하지는 않다 목표 설정이 더 중요하다.
A. 좋은 스타트업 찾기가 힘들다. 좋은 곳에선 더욱 검증된 사람을 뽑고 싶어하기 때문에 연결된 사람들을 뽑는 편이다. 네트워크장을 활용했으면 하는 바람이다.
A. 입사 전에도 안했다. 하지만 개발영어는 자신있었다. 영어 컨퍼런스가 있으면 참여했다. 비지니스영어와 회화는 다른 영역이다. 개발 공부와 같이 영어 공부 또한 불가피한 것
A. 아는게 모르는거보다 훨씬 낫다. 보안도 분야가 다양하기 때문에 사용자 입장이라면 보안은 당연히 고안해야 한다.
A. 당연히 하는게 안하는 것보다 낫다. 포스트 내용에 본인의 인사이트가 얼마나 담겨있느냐가 중요하다고 생각한다.
A. 나는 보진 않는다. 좋은 커뮤니티가 없다고 생각해서 커뮤니티를 직접 운영했다. (AUSG : cloud 관련 대학생들 모임)
커뮤니티가 좋은지 안 좋은지의 기준은 상대적인 것
A. 내 생각에 회고가 잘되기 위해선 회고를 주도하는 마스터가 필요하다고 생각한다. 프로젝트의 단위라면 '잘한 점', '아쉬웠던 점', '앞으로 해야할것' 을 나누고 의견수립 후 진행했었다. 매일 회고가 진행된다면 보여주기식이 아닌 의미 있는 회고가 되었으면 하는 바람이다.
앞으로 백엔드 개발자가 바라보아야 할 것이 무엇인지 고민해보고 커리어를 이어 나갔으면 좋겠다. 자신의 영역 내에서 최대한 활용 할 수 있도록 하길 바란다.
어제 시작한 파싱을 오늘 이어서 마무리까지 지어 보았다. 수업시간에는 시작부터 난관에 빠져서 진행하지 못 했는데 수업을 마친 후에 백엔드 위키의 도움을 얻어 코드를 겨우 완성할 수 있었다. 덕분에 파싱에 대해 어느 정도 감을 잡을 수 있었다.
Git blog를 만들어 보았는데 다른 실습들 보단 그나마 어렵지 않게 만들 수 있었다. 그 때문인지 오랜만에 스트레스를 많이 받지 않았던 날인 것 같다.
벌써 기다리던 주말이 다가왔지만 아무래도 쉴 틈없이 메소드에 대한 복습을 해야할 것 같다. 메소드부터 파싱까지 전체적으로 다루어 봐야 겠다. 이번 주도 고생했다 우석아