프로그래밍 언어/Java 120

[Android java] "Only the original thread that created a view hierarchy can touch its views." 해결

Only the original thread that created a view hierarchy can touch its views 원인: BackThread 에서 UI를 건들면 안되는데 건드려서 생긴 문제입니다. 해결방법 1.runOnUiThread runOnUiThread를 사용하여 메인 Ui 쓰레드에서 작업을 할 수 있습니다. 하지만 전역변수의 문제 등이 있었고 저는 Activty가 아닌 Dialog에서 백쓰레드 작업을 진행중이었어서 문제가 많았습니다. 저는 .runOnUiThread(java.lang.Runnable)' on a null object reference 에러가 발생하였습니다. if 문으로 null인경우 return해주면 오류는 해결할 수 있었지만, 어댑터가 들어있는 데이터를 인식하..

객체지향의 원칙 OCP 와 DIP에 대해

객체지향의 원칙 OCP 와 DIP에 대해 *OCP 개방-폐쇄 원칙 소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀있어야 한다. 다형성을 통해 가능하다. 인터페이스를 구현한 새로운 클래스를 하나 만들어 새로운 기능을 구현 지금까지 배운 역할과 구현의 분리 DIP 의존관계 역전 원칙 프로그래머는 "추상화에 의존해야지, 구체화에 의존하면 안된다." 의존성 주입은 이 원칙을 따르는 방법 중 하나 구현 클래스에 의존하지 말고, 인터페이스에 의존하라는 뜻 역할에 의존하게 해야 한다는 것과 같다. 객체 세상도 클라이언트가 인터페이스에 의존해야 유연하게 구현체를 변경할 수 있다. 구현체에 의존하게 되면 변경이 아주 어려워진다. 공부는 인풋이 있으면 반드시 아웃풋이 있어야한다. 구체적인 코드를 구현해보며 알아보자. ..

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

좋은 객체 지향 설계의 5가지 원칙(SOLID) SRP 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이란 것은 모호하다. 클 수 있고, 작을 수 있다. 문맥과 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것 ex) UI 변경, 객체의 생성과 사용 분리 책임의 개수가 많아질수록 한 책임의 기능 변화가 다른 책임에 주는 영향이 비례해서 증가합니다. 이는 결국 코드를 절차지향적으로 변하게 하여 유지 보수를 엉망으로 만듭니다. *OCP 개방-폐쇄 원칙 소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀있어야 한다. 다형성을 통해 가능하다. 인터페이스를 구현한 새로운 클래스를 하나 만들어 새로운 기능을 구현 지금까지 배운 역할..

[Android java] navigation component animation 하는 방법

navigation component animation 하는 방법 예제를 만들 때 Bottom Navigation Activity를 사용하였습니다. 1.Bottom Navigation Activity 생성하기 2)res 에 anim 폴더에 fade_in , fade_out 만들기 (fade_in도 xml인데 버그 나서 저런 모양이니 무시하시고 xml이라고 생각하시면 됩니다.) fade in.xml 코드 3)animation을 넣고 싶은 fragment에 다음과 같은 코드를 넣습니다. 1. NavOptions 만들기 2.navigate 메소드에 옵션 주기 btnDashBoard = root.findViewById(R.id.to_dash_board); btnNotification = root.findView..

[Java] JDBC 템플릿 공부

김영한 선생님의 인프런 강좌로 java spring을 공부하고 있다. 따라하니까 구현도 금방금방되고 좋다. 그러나 코드가 내부적으로 정확히 어떤 동작을 하는지 그 원리에 대해 궁금해지기 시작해서 공부해보려고 한다. JDBC 템플릿이란? - jdbc와 마찬가지로 데이터를 저장하기 위해 도와주는 API. 다른 점은 SQL Mapper. - 스프링의 가장 기본적인 Data Acess 템플릿으로 쿼리 기반으로 데이터 베이스에 접근 가능 - 모든 영속성 프레임 워크는 내부적으로 JDBC API를 이용 - DAO 계층에서 Jdbc Template API를 사용 - 제네릭을 사용해 어떤 값이 오든 그대로 반환 (*SQL Mapper: SQL을 직접 작성하고 Object필드를 매핑하여 데이터를 객체화 하는 것) 초기화..

[java spring] Database "C:/~/test" not found, either pre-create~~ 에러 해결

해결 과정 1. url 창을 localhost로 바꿔라 --> 실패 2. 8082 포트가 사용중일수도 있으므로 cmd 창에서 강제로 제거 후 시도 --> 실패 3.껐다 켜기 시도 --> 실패 성공 4. 윈도우 시스템 트레이 아이콘 클릭 후 나온 창에서 시도 -> 성공!!!! 실행성공화면! 여러분들은 localhost 부터 쭉 다 해보시면 될 것같습니다!

[java] Stream 개념 공부

Stream 자바 8에서 추가된 스트림은 람다를 활용할 수 있는 기술 중의 하나. 스트림은 데이터의 흐름 자바에서 제공하는 Collection 인터페이스에는 stream() 메소드가 정의되어있고, 이를 구현한 List 와 Set 등의 컬렉션 에서도 stream 메소드를 사용할 수 있다. Stream 특징 1. Stream 은 데이터를 변경하지 않는다. - 원본데이터로부터 데이터를 읽기만 할 뿐, 원본 데이터 자체를 변경하진 않음 2. Stream은 일회용이다. -Stream은 한번 사용하면 닫혀서 재사용이 불가능하다. 3. Stream은 작업을 내부 반복으로 처리한다. -Stream을 이용한 작업이 간결한 이유는 바로 내부 반복이다. 즉, 반복문이 코드 상 노출되지 않는다. 코드 예제 ArrayList ..

[Android java] 이미지 fade in fade out 애니메이션 주는 방법

이미지 애니메이션 주는 방법 안녕하세요 이번에 간단하게 이미지에 애니메이션을 주는 방법을 알아보겠습니다. xml MainActivity package com.example.recycleviewexample; import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private final String TAG = MainAc..

[java spring] MVC 모델 공부

MVC 모델 - model - view - controller *개념 모델(Model) -DATA, 정보들의 가공을 책임지는 컴포넌트. 뷰(View) -사용자에게 보여지는 부분, 유저 인터페이스를 의미 -MVC 패턴은 여러 개의 뷰가 존재할 수 있으며, 모델에게 질의하여 데이터를 전달받는다. 컨트롤러(Controller) -모델(Model)과 뷰(View) 사이를 이어주는 브릿지 역할을 함 -모델이나 뷰로부터 변경 내용을 통지 받으면 이를 각 구성 요소에게 통지 *특징 -각 컴포넌트는 자신이 맡은 역할만을 수행 후 다른 컴포넌트로 결과만 넘겨주면 되기 때문에 시스템 결합도를 낮출 수 있음 ( 시스템 결합도가 낮아야 유지보수 편리) -다수의 뷰와 모델이 컨트롤러를 통해 연결되기 떄문에 컨트롤러가 불필요하게..

[java spring boot] Please set the JAVA_HOME variable in your environment to match thelocation of your Java installation. 에러 해결

문제 상황 인프런 백엔드 강의를 듣고 스프링부트로 gradlew 를 build하려고 하니 아래와 같은 에러가 발생 Please set the JAVA_HOME variable in your environment to match the location of your Java installation. 해결 구글링해보니 보통 변수값에 \bin 이라는 것이 없는데, 제 변수 값엔 들어있었고, 여기서 힌트를 얻어 검색을 해보았습니다. cmd창(명령창) 에 아래와 같은 코드로 변수 값을 변경해줍니다. set Java_HOME=c:/Program Files/Java/'본인의 자바버전' * 본인의 자바버전 확인하는 방법 -javac-version 성공화면