전체 글 43

좋은 객체 지향 설계의 5가지 원칙(SOLID)

SOLID 한번 알아보자!! SOLID란? 로버트 마틴이 정리한 좋은 객체 지향 설계의 5가지 원칙SRP: 단일 책임원리(single responsility principle)OCP: 개방-폐쇄 원칙(Open/colsed principle)LSP: 리스코프 치환 원칙(Liskov substitution principle)ISP: 인터페이스 분리 원칙(Interface segregation principle)DIP: 의존 관계 역전 원칙(Dependency inversion principle)   SRP: 단일 책임원리(single responsility principle)한 클래스는 하나의 책임만 가져야 한다.(문맥과 상황에 따라 다르다)중요한 판단 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 ..

TIL 2024.05.22

스프링 이란

스프링!! 이해라도 해보자!!! 스프링이란?스프링은 특정 기술이 아니라 여러가지 기술의 모음이라고 생각하면 된다.스프링이라는 단어는 맥락에 따라 스프링 DI 컨테이너 기술, 스프링 프레임워크, 스프링 부트 나 프레임워크등을 모두 포함한 스프링 생태계로 사용 될 수있다.  스프링 프레임 워크핵심기술: 스프링 DI 컨테이너, AOP, 이벤트웹기술: 스프링 MVC, 스프링 WebFlux데이터 접근 기술: 트랜잭션,JDBC,ORM지원,XML지원기술 통합: 캐쉬,이메일,원격접근,스케줄링테스트: 스프링 기반 테스트 지원언어: 코틀린, 그루비 스프링 부트스프링을 편리하게 사용하도록 지원, 대부분 기본으로 사용단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버를..

TIL 2024.05.20

정적 컨테츠, MVC, API

정적 컨테츠, MVC , API 이해라도 해보자!!!   드디어 스프링에 입문을 하게 되었다.스프링을 마주한 소감은 아직 생각했던거보다 훨씬 이해가 안된다.자바에서는 클래스와 상속을 이해하였을 때부터 자바에 재미를 붙이고 있어서 스프링을 배우는 것도 즐거울 거 같았다.그런데 아직 잘 모르겠다 자바를 할 때는 구조가 어렵다는 생각은 잘 안들었는데.. 스프링은 아직 실행되는 구조를 잘 모르겠다. 그래서 나의 성격성 구조를 이해하지 못하고 실행이 된다해도 만족 할 수 없기 때문에 가장 간단한 구조부터 하나씩 이해하려 노력하려 한다.정적 컨테츠정적인 콘텐츠 즉, 이미 완성이 되어있는 HTML과 같은 문서를 브라우저로 전달합니다. MVC MVC란 Model-View-Controller의 약자로, 소프트웨어 디자인..

TIL 2024.05.16

팀프로젝트 KPT

Keep - 현재 만족하고 있는 부분팀원 전체가 상대를 존중하는 마인드가 기본값으로 적용되어 있습니다.모르는 부분, 잘 안되는 부분, 프로젝트의 방향성을 꾸준히 소통해가며 전체적인 프로젝트의 퀼리티를 높일 수 있었다.맡은 부분을 어떻게든 열심히 다 해주시는 것이 좋았습니다.자유로운 식사시간수강생 상태를 입력 받는 부분을 NPE 고려해 짤 수 있어서 좋았다.해결할 사항이 있을 때 서로 의견 제시나 공유가 부담없이 잘 되어 좋았습니다.Exception을 따로 던지지 않고, 예외가 일어나는 부분을 따로 case로 빼서 처리하는 부분이 좋았다.수강생 관련 일부 메서드들이 코드 재사용성이 좋아 실제로 재사용을 많이 했습니다.끝까지 포기하지 않고 기능구현에 성공해낸 점Problem - 불편하게 느끼는 부분불편했다기..

TIL 2024.05.13

Enum 이해하기

enum!!! 이해라도 해보자Enumd이 필요한 이유String 타입은 어떤 문자열이든 입력 할 수 있기 때문에 문제가 발생할 상황이 많다.이 문제를 타입 안전성 부족 문제 라고 부른다.1. 값의 제한 부족: String으로 상태나 카테고리를 표현하면 잘못된 문자열을 실수로 입력할 가능성이 있다.(오타)2. 컴파일 시 오류 감지 불가: 이러한 잘못된 값은 컴파일 시에는 감지되지 않고, 런타임에서만 문제가 발견된다(디버깅 어려움)이런 문제를 해결하려면 특정 범위로 값을 제한해야한다.  예를 들어 어떤 머세드에서 String을 변수로 받는다면 어떤 문자열이든 받을 수 있기 때문에 자바 문법 관점에서는 어떤 문제도 없다.Enumd이란타입 안전 열거형 패턴 - Type-Safe Enum Patternenum(e..

TIL 2024.05.09

수강생 관리 프로그램(Java, 팀과제)

이번에 맡은 역할은 코드의 베이스를 까는 부분또 처음 맡아보는 역할에 살짝 갈피를 못잡고 있었지만 검색도 하고, 다른 팀에서 뭐하나 살짝 구경도 하며 갈피를 잡았다.우선 우리팀이 사용할 프로그램의 구조를 정리해보자.예전에는 유니자드를 통해 간단히 디자인만 했었는데 이번에는 페이지가 없이 실행만 있기 때문에 구조를 만들어보자!!그리고 미로가 좋다더라!!  그래서 만들어본 구조도!!다 만들고 나니까 뿌듯하긴 했다.그 다음은 템플릿을 참고 하며 코드를 작성하던중 템플릿에서 개선하고 싶은 욕구를 생성하는 코드를 발견했다.  템플릿으로 주어진 코드private static void setInitData() { studentExStore = new ArrayList(); subjectExS..

예외처리하기

예외처리 해보기 예외처리란?개발자가 작성한 코드에서 발생할 수 있는 오류를 사전에 방지하는 것!!! 하지만 아직 이해가 부족하다... 우선 어찌어찌 작성은 했기 때문에 코드를 먼저 올려놓고 해석해보자.  public double cal () { double result = 0; String msg = ""; switch (saChic) { case '+': result = addOperator.operate(n1,n2); break; case '-': result = subtractOperator.operate(num1,num2); ..

TIL 2024.05.01

숫자 N을 B 진법으로 나타내기

문제: 10진수 N을 B 진법으로 나타내는 코드를 만들어라. 과정: 문제를 보고 처음 든 생각은 2진법 말고는 기억이 잘 나지 않는다는 것 이였다.정확히는 n진법의 원리에 대한 이해가 덜 잡혀 있었다. 막막했다. 문제에 접근하는 것 조차 힘들었다.그 때 마침 같이 공부하던 분들이 N진법이란 무엇인가 원리를 이해하는데 도움을 주었다.(원호님 규리님 항상 감사합니다ㅠㅠ) 16진법에서  f 다음 10이 된다는 것을 이해하는 것에는 꽤 오래걸렸지만 표로 정리를 하니 이해가 금방 가능했다.표로 정리를 하다 보니 코드를 짜는 로직이 머릿속에 떠오르기 시작했다. 알고리즘 문제를 접하기 전 이였다면 원리를 알아도 쉽게 접근 하지 못하였을 텐데 얼마전 풀었던 알람 문제중 시간을 나타내는 방법이 떠오른 것이다.시간 표현을..

상속과 오버라이딩(Overriding)

오버라이딩!! 이해라도 해보자!! 필요한 이유부모 타입의 기능을 자식에서는 다르게 재정의 하고 싶을 수 있기 때문!! 오버라이딩이란부모에게서 상속 받은 기능을 자식이 재정의 하는 것을 메서드 오버라이딩(Overriding)이라 한다. 사용방법package extends1.overriding;public class Car {public void move() {System.out.println("차를 이동합니다.");}public void openDoor() {System.out.println("문을 엽니다.");}}부모클래스(Car)package extends1.overriding;public class ElectricCar extends Car {@Overridepublic void move() {Sys..

TIL 2024.04.30

인터페이스

인터페이스!!! 조금이라도 이해해보자!!! 인터페이스자바는 순수 추상 클래스(모든 메서드가 추상인 클래스) 를 더 편리하게 사용 할 수있는 인터페이스라는 기능을 제공한다.● 인터페이스의 메서드는 모두 `public` , `abstract` 이다. -> 굳이 적지않아도 자동으로 적용됨●메서드에 `public abstract` 를 생략할 수 있다. 참고로 생략이 권장된다. ●인터페이스는 다중 구현(다중 상속)을 지원한다. -->  인터페이스의 존재이유 사용방법public interface InterfaceAnimal { void sound(); void move();}public abstract 키워드 생략이 가능하다.인터페이스는 `class` 대신에 `interface` 로 선언하면 된다. `sound()..

TIL 2024.04.29