주간 랩업/[SSG] JAVA 기반 백엔드 개발 과정

[3주차] 자바 베이직 9일차 - 13일차

hooooolly 2024. 6. 29. 00:33

아니 벌써 3주차 라니..! 시간이 정말 빨리 가는 거 같다;;

 

매일 블로그 쓰는 것도, 강의실 출퇴근 하는 것도 이제 좀 익숙해졌다! 근데 자바 베이직만 하는데도 밀리기 시작했는데 (스프링, 정처기 강의 듣기, 책 읽기, 스터디 과제 블로그 올리기..) 앞으로 진도나가면 더 심해지겠지..허허..

 


2024/06/24

자바 베이직 Day 9 - String 클래스와 배열


 

스트링 클래스와 그에 관련된 클래스를 자바 공식 문서를 보면서 실습해보았다. 전에 스터디 과제로 API문서를 보고 TreeMap에 대해 공부해서 조원에게 발표했었는데 문서를 어떻게 봐야하는지 잘 몰라서 해맸었었다. 오늘 강사님이랑 같이 해보니까 문서는 이렇게 보는거구나~ 하고 자신감이 생겼다.

 

java.util.StringTokenizer VS String.split()

Tokenizer 객체로 담기 때문에 빠름 배열로 담기 때문에 더 느림
String 문자열만 받을 수 있음 정규 표현식을 받을 수 있음
while 문을 통해서 다음 토큰을 받음. enhanced for문으로 다음 토큰을 받음
java.util.StringTokenizer 클래스 객체 java.lang.String.split() 메서드

 

StringTokenizer와 String.split() 메서드를 공식 문서를 토대로 비교해보았다. 두 개 다 문자열을 어떤 기준으로 잘라 토큰화한다는 것은 똑같지만 많은 부분에서 차이점이 있었고 사용할 때의 장단점이 있었다. 이렇게 비교해보면서 공식 문서를 잘 보고 각 클래스/인터페이스의 특징을 살펴봐야겠다고 생각했다. 그리고 스터디에서 공식 문서를 분석하기로 한 거 진짜 잘 정했구나! 생각했다. 호호. (//뿌듯//)

 

아래는 정규 표현식을 확인하기 좋은 사이트이다.

 

정규표현식 (RegEx) - 간편 참조서 | AutoHotkey

{min,max} 이전의 문자, 부류, 또는 부패턴이 최소 min회 그리고 최대 max회 나타나면 부합합니다. 예를 들어, a{1,2}는 ab에 부합하지만 aaab에서 오직 앞의 두 a에만 부합합니다. 또, {3}는 정확하게 3 회

ahkscript.github.io

 

그리고 배열에 대해 배웠는데, 배열은 초기 설정 (배열의 크기, 데이터 타입)이 중요하다고 느꼈다. 그리고 4개의 참조 타입 중 가장 첫번째로 배운게 배열인데 실체 객체는 힙 영역에 저장되고 그 객체의 위치값만이 스택 영역에 저장되어서 주소값으로 객체를 호출한다는 것이 큰 특징이었다. 이런 특징 때문에 배열을 생성할 때 클래스 처럼 new를 사용해야했다. 배열을 한 문장으로 정의하자면, 값을 연속된 공간에 나열하고, 각 값에 인덱스를 부여한 자료구조이다. 그리고 항상 CRUD에 주의해서 봐야한다는 것을 느꼈다.

 

 

 


2024/06/25

자바 베이직 Day 10 - 상속과 추상화


 

오늘은 클래스를 생성하면서 상속과 추상화에 대해 실습해보았다. 오버로딩을 사용한 생성자와 클래스 메서드를 만들었고 private 접근 제한자를 사용하고 public getter와 setter를 사용해 안전하게 데이터를 공유하는 방법을 배워보았다. 전에는 상속이란 개념이 어렵고 혼자서 클래스를 분리하는게 너무 어려웠는데 오늘 실습하고 과제를 하면서 조금 익숙해졌다. 그리고 인자값을 받는 메서드를 만들고 그 결과값을 리턴하는 메서드를 만드는 것도 이제는 빠르게 할 수 있게 되었다.

주말에 읽었던 그림으로 배우는 자바 책이 큰 도움이 되었다.

 

 

 


2024/06/26

자바 베이직 Day 11 - 객체 모델링


오늘은 배열과 객체 생성 및 접근제한자를 복습하면서 놓쳤던 부분을 다시 볼 수 있었다. 우선 2차원 배열의 필요성이다. 2차원 배열은 1차원 배열이 반복적으로 필요할 때 반복문을 사용하지 못하기 때문에 2차원 배열을 생성한다. 

 

그리고 퀴즈 중 틀린 답이 꽤 많았다ㅜㅜ 

새로운 자료형을 만드는 모델링 도구 : 클래스

클래스 안에 만들어지는 변수는 속성=프로퍼티=멤버 변수= 상태 변수

클래스 자료형을 사용자 정의 자료형이라 한다

 

오늘 아주 중요한 개념인 모델링에 대해 배워보았는데 모델은 객체를 소프트웨어 공학의 관점에서 부르는 말이라는 것과 소프트웨어 공학에서는 상황에 따라 공통으로 묶은 클래스를 관리하는 표준화된 모델링을 제공하는데 (역할에 따라 표준화) 여기에  Main, DTO, VO, DAO,Utility가 포함되어있다는 것을 배웠다. 모델이라는 것이 객체를 어떤 관점에서 보고 정의내리는 구조에 따라 변할 수 있다는 것과 소프트웨어 공학 관점과 프로그래밍 관점에 대해 생각하게 되었다.

 

그래서 더 찾아본 내용...

 

  • 소프트웨어 공학은 대규모 시스템 개발을 위한 체계적인 접근법과 팀 협업을 강조하며, 전체 개발 생명 주기를 다룹니다. 품질 보증, 프로세스 관리, 표준 준수가 중요한 요소입니다.
  • 프로그래밍은 문제 해결을 위한 코드 작성에 중점을 두며, 주로 개인 작업으로 이루어집니다. 알고리즘 설계, 코드 구현, 디버깅이 주요 활동입니다.

DAO, DTO, Utility 클래스를 만들어보니 이런 구조 틀 안에서 클래스를 만드는게 쉽진 않았다. main 클래스를 더 깔끔하게 유지할 수 있다는 점, 목적성으로 분류해서 어떤 클래스에 어떤 내용이 있는지 바로 알아볼 수 있다는 점이 장점이었는데 만약 이 프로그램이 매우매우 크다면 여러개의 dao, dto 클래스로 나눠지게 되는 것일까? 여러개로 나눠진다면 관리하기가 오히려 더 까다로울 수도 있겠다는 생각이 들었다.

 

 

 

 

 


2024/06/27

자바 베이직 Day 12 - 상속


싱글톤 패턴이란 것에 대해 배우고 간단히 코딩해보았다. 싱글톤은 자신의 객체를 단 하나만 생성하는 것을 보장하는 것으로 상속이 불가하고 유지보수가 불편하지만 메모리와 접근 제한 측에서 장점을 가진다. 어떤 상황이나 클래스를 싱글톤으로 만드는지 프로젝트를 하면서 알아가야겠다.

 

상속은 클래스 간의 연관 관계를 설정하고 계층적 순서로 클래스의 멤버들을 관리하고 코드를 재사용하는데 도움이 된다. 자바의 단일 상속으로 인한 계층적 순서로 한눈에 보이는 전체 구조 덕분에  1) 데이터의 체계적인 관리, 2) 기존 클래스의 멤버를 내려받아서 재사용 할 수 있는 것이 상속의 특징과 장점이 되겠다.

 

나는 상속을 클래스들 간의 연결 고리라고 생각한다. main에서 메소드와 필드를 다른 클래스로 분리시키면서 느낀 것은 각 클래스들이 완전히 독립적인 것이 아니라, 의미에 따라 서로 종속적인 관계가 될 수 있다는 점이었다. 이런 클래스들 간의 관계에 의미를 부여(is a 관계)하고 코드를  확장시켜나갈 수 있는 점에서 (오버라이딩) 상속의 필요성을 느꼈다.

 

 

 


2024/06/28

자바 베이직 Day 13 - 상속과 다형성


흑흑 드디어 금요일이다ㅠㅠ 과제랑 공부해야될 것들이 밀리기 시작했다. 주말에 이걸 다 할 수 있을지 모르겠다. 오늘은 어제에 이어 상속에 관해 더 깊이 알아보았다.

자바의 수직적 구조의 상속이 어떤 장점을 가지고 있는지에 대해 배웠는데 상속의 개념을 완전히 이해할 수 있었다. 상속은 수직적 구조로 클래스를 계층화한 것이다. 상속을 사용하면 코드의 중복을 최소화하고 확장을 할 수 있으며 새로운 요구사항이 발생했을때 반영이 쉬워진다. 그리고 다형성의 4가지 전제조건에 대해 배웠는데 이해는 되었지만 실습을 하려니까 어려웠다. 주말 동안에 상속, 다형성, 다형성의 활용, 그리고 인터페이스 까지 읽어야겠다.