TIL9 [OOP] SOLID 원칙 SRP(Single Responsibility Principle) - 단일책임의 원칙작성된 클래스는 하나의 기능만 가지며 클래스가 제공하는 모든 서비스는 그 하나의 책임을 수행하는 데 집중되어있어야 한다. ⇒ 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이다.클래스가 변경 될 때 파급 효과가 작으면 된다.OCP(Open Closed Principle) - 개방 폐쇄 원칙객체의 확장은 개방적으로, 객체의 수정은 폐쇄적으로 하는 것⇒ 하나의 변화가 다른곳에서 연쇄적 변화를 일으키는 것을 방지 (새로운 기능을 추가 할 때 기존 코드를 수정하지 않고 확장 할 수 있도록 설계할 것)⇒ 다형성 활용LSP(Liskov Substitution Principle) - 리스코프 치환 원칙자식 클래스는 언제나 부모 클래스.. 2024. 11. 12. [TIL/JAVA] AtomicInteger Arrays.stream()을 사용하며 내부에서 index값이 필요해 다른 반복문에서 사용하는 것처럼 아래의 코드로 처리 할려고 했는데 IDE에서 final 또는 atomic으로 사용하라는 에러 문구가 발생했다.int index = 0;Arrays.stream(arr).forEach((num) => { ... index++;}람다 표현식 내부에 사용되는 변수가 왜 final 형이어야 하는지 부터 찾아보자. Lambda람다 식이란? method와 비슷하지만 이름과 파라메터의 타입을 지정할 필요없이 사용 가능하다.(파라메터1, 파라메터2, ...) -> { // 하나의 명령문만 있을경우 중괄호를 생략할 수 있다. }위와 같이 간결하게 사용이 가능하며 단 한 번만 사용된다. 지역변수와 람다람다의 경우 .. 2024. 10. 24. [TIL/JAVA] try-catch문 무한 루프 내일 배움 캠프의 야구게임 프로젝트 진행 중 catch 문에 접근하게 되면 무한 루프에 빠지는 문제를 발견했다.내부에는 print와 scanner밖에 없었기에 더 이해가 안되서 찾아봤다.try { System.out.print("숫자를 입력해 주세요: "); inputResultNum = scanner.nextInt();} catch (Exception e) { System.out.println("숫자만 입력 가능합니다."); // 다시 재 입력을 받을 수 있도록 continue continue;} 찾아보니 scanner로 받은 값이 정상처리되지 않아 버퍼에 남아있게 되어 발생하는 문제였다.아래처럼 에러 발생 시 scanner를 초기화 시키니 문제가 해결 되었다.try { .. 2024. 10. 23. [TIL/JAVA] ArithmeticException 계산기 프로그램을 만들던 중에 분모가 0일경우를 상정하여 예외처리를 추가하는 과정에서나눗셈 시 소수점 이하를 표시하고 싶어서 자료형을 변경 하였더니 에러가 아닌 Infinity를 출력하기 시작해서 찾아보기 시작했다.이전 코드try { System.out.print("피연산자를 입력해 주세요(숫자 2개) : "); operand1 = sc.nextInt(); operand2 = sc.nextInt(); System.out.print("연산자를 입력해 주세요.(+, -, *, /, %) : "); String operation = sc.next(); // 연산자 구분 부분} catch (NumberFormatException e) { // 입력받은 값이 숫자가 아닌 경우.. 2024. 10. 15. Uncaught (in promise) TypeError: Cannot set properties of null (setting 'innerHTML') 공공 데이터로 받아온 xml파일 html 로 pasing 후 html에 태그로 보내주려고 하자 발생했다. async function load() { // 파일 가져오기 const response = await fetch(`url`); // 텍스트 형식으로 해석 const text = await response.text(); // XML 형식으로 해석 const xml = new DOMParser().parseFromString(text, 'application/xml'); const gameDataInput = () => { ... } gameDataInput(); .. 2024. 10. 5. XML Parse JS 프로젝트를 진행하며 xml파일을 반환해주는 공공 api가 있었다. xml을 일단 fetch로 받아와 텍스트 형식으로 해석하는 작업부터 시작 // 파일 가져오기 const response = await fetch(`url`); // 텍스트 형식으로 해석 const text = await response.text(); // XML 형식으로 해석 const xml = new DOMParser().parseFromString(text, 'application/xml'); 해당 작업이 끝나니 내부의 데이터가 xml 이라 형식이 html 에서는 바로 적용할 수 가 없었다. 3784712024-10-04 오후 7:55:08SC-OM-2410.. 2024. 10. 4. 20241002 프로젝트 진행slide image 구현원래는 소스파일 찾아서 활용할려다가 전부 작동이 안되길래 그냥 직접 만드는 중 user 데이터를 object array로 저장 하여 배열의 개수만큼 이미지를 보여줌 여기서 마지막 이미지라고 끊어내면 안되기 때문에 slide loop 로 구현// 이미지 전환 시 현재 있는 이미지 개수를 넘지 않도록 조정하는 함수 const changeImage = (lengthCount) => { if (imageData.length (arrayCount + moveCount)) { arrayCount = imageData.length - 1; } else { arrayCount += moveCount; .. 2024. 10. 2. 20241001 FigmaFrame 피그마 프레임 제작 도구 - Flayout 탭에 선택한 크기의 프레임 탭 생성 프레임이 생성되면 버튼 클릭이벤트로 네비게이트 시키는 것이 가능 Prototype 프로토타입은 실제 화면의 움직임을 확인 할 수 있음화면의 움직임은 prototype 탭을 선택한 상태에서 각 요소들을 클릭하면 +형태가 나타나고 드래그로 다른 프레임으로 연결시키는 것이 가능하다.또한 트리거도 다양하게 제공 됨 연습용 제작한 Figma무료버전일경우 트리거 제공 수가 한계가 있어서 원치않게 호버로 이동하게 되는 경우도 있음 ㅂㄷ(그게 나임)오늘 공부 내용https://something-do-it.tistory.com/6 SQL02 - JOINJOIN엑셀의 vlookup과 유사각 테이블 내의 정보를 .. 2024. 10. 1. 20240930 firebase addDoc()$("button").click(async function () { // 넣을 데이터 추가(ex) let itsData = $('데이터가 들어간 요소 class||id').val() ... let doc = { key : value, key : value } await addDoc(collection(db, "db name"), doc); // OR await addDoc(collection(db, "db name"), { key : value, key: value, })})- await & async 비동기를 동기처럼 보이게 하는 방법 await은 asy.. 2024. 9. 30. 이전 1 다음