목록Programing (115)
월루를 꿈꾸는 대학생
Glassmorphism - 화려한 배경에 반투명한 유리를 덧댄듯한 디자인 - 투명도를 사용해서 불투명한 유리 효과를 줌 - 떠있는 듯 느낌이 남 글래스모피즘 생성 사이트 https://ui.glass/generator/ Glassmorphism CSS Generator - Glass UI Generate CSS and HTML components using the glassmorphism design specifications based on the Glass UI library. ui.glass
뉴모피즘 - 미니멀리즘의 디자인 - 플랫한게 특징 - 빛과 그림자로만 디자인을 하고 질감이 느껴지지 않는 것이 특징 - 플라스틱 같음 참고 사이트 긱스 https://www.geeksforgeeks.org/neumorphism-in-flutter/ Neumorphism in Flutter - GeeksforGeeks A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions. www.geek..
dart는 싱글 스레드 환경임 즉 멀티 스레드 환경이 아니라서 과도한 처리를 여러개 하는 경우 플러터의 프레임이 끊기는 현상이 발견하기도 함 그래서 isolate라는게 필요함 별도의 메모리를 가지고 별도의 처리를 하는 친구 완전한 별도의 장소이기 때문에 객체의 주소자체가 달라짐 class MySingleton{ static final MySingleton _instance = MySingleton._internal(); factory MySingleton(){ return _instance; } } 해당 인스턴스를 만들고 보면 같은 객체임 MySingleton my1 = MySingleton(); MySingleton my2 = MySingleton(); print(my1.hashCode); print(..
timer : 백그라운드 실행 runOnUiThread : 메인 스레드 ui갱신 뷰바인딩 뷰바인딩 - build.gradle - module android { buildFeatures{ viewBinding true } 제약 레이어에서 다른 컴포넌트들과 정렬을 할 때 우클릭 > show baseline 이 상태에서 다른 위젯의 베이스라인이랑 이어주면 연결 가능 timer - 일정한 시간을 주기로 반복하는 동작 때 사용 스레드 - 메인 스레드 : 메인 ui 조작 - 워커 스레드 : 여러 시간이 걸리는 작업들을 백단에서 처리 - 워커 스레드에서는 ui 조작이 안 되기 때문에 runOnUiThread() 사용 -> timer = 워커 스레드 timerTask = timer(period = 10) { time+..
인텐트 담아서 다른 화면 전달 뷰바인딩 인텐트 토스트 sharedpreference 뷰바인딩 - findViewById() 를 컴포넌트 마다 쓰기 귀찮으니까 나옴 - 편하게 바로바로 사용 가능 build.gradle -> module android { buildFeatures{ viewBinding true } private val binding by lazy{ // activityMainBinding 클래스는 activity_main_xml 파일 이름 참고하여 뷰바인딩 설정에 의해서 자동 생성됨 // 해당 클래스르 통해서 xml에 있는 컴포넌트 접근 가능 ActivityMainBinding.inflate(layoutInflater) } override fun onCreate(savedInstanceSt..
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } } - : 으로 상속 나타냄 - AppCompatActivity() : 구 버전 안드로이드 기기에서 최신 기능 쓸 수 있도록 해줌 - onCreate() : 액티비티 시작하면 최초 호출되는 메서드 반드시 부모클래스 생성자 호출 필요 super.onCreate - setContentView : 액티비티가 표시할 레이아웃 파일 지정 .xml - 모든 리소스는 R클래스로 지정 레이아웃에서 컴포넌트를 세팅하고..
aop aop 필요한 상황 - 메서드의 호출 시간 측정할 때 (초를 밀리세컨드로 바꿀려면 일일이 수정필요) 메서드 앞과 끝에 시간을 측정하고 출력 이런 걸 메서드별로 다 적으려고 하면 답답 public Long join(Member member){ long start = System.currentTimeMillis(); try{ // 같은 이름이 있는 중복 회원 x 만약 해당 이름으로 못 찾은 경우를 대비해서 optional로 감쌈 Optional result = memberRepository.findByName(member.getName()); //ifPresent : result값이 null이 아니라 값이 있으면 동작하는 메서드 // -> 옵셔널로 감싸면 옵셔널 가지고 있는 메서드 사용 가능 // 값..
회원 웹 기능 - 홈화면 추가 - home 화면의 경우 아무것도 없는 '/' 기준 - 우선순위 상 내장 톰켓에서 스프링 컨테이너 안에 매핑된 게 있는 지 확인하고 없으면 리소스에서 찾아서 반환 @Controller public class HomeController { @GetMapping("/") public String home(){ return "home"; } } - 다음과 같이 "/" 로 매핑된 경우 우선순위가 높기 때문에 home이 반환 됨 회원 웹 기능 - 등록 1. /members/new 로 이동시 createMemberForm.html로 이동 2. 해당 html에서 이름 입력후 전송 이름
계층 구조 - 컨트롤러 : 제어역할 - 서비스 : 핵심 로직 - 리포지토리 : 디비 접근 관리 - 도메인 : 비즈니스 도메인 객체 ? : 멤버 , 쿠폰 등 클래스 의존 관계 - 인터페이스로 구현 클래스를 만든다 - 디비 나중에 바꿔끼우기 위해서 인터페이스로 만듦 리포지토리 - 저장소 - 회원 객체를 저장하는 저장소 역할 - 인터페이스에다가 저장 , id로 찾기 , 이름으로 찾기 , 모두 찾기 등의 4가지 메서드를 정의 // 값이 없으면 null이 반환이 되니까 에러 .. 그럴 경우 Optional로 감싸면 에러 안 난다 Optional findById(Long id); // member repositry에서 필요한 기능을 정의 해두고 구현체를 바꿔끼우는 식으로 - 처음 인터페이스를 만들고 그 인터페이스에..
1. 정적 컨텐츠 - 그냥 파일 그대로 웹브라우저 보여줌 - /resources/static 폴더 안에 html 넣어주면 됨 - url에 html파일 넣어주면 정적으로 웹에서 보여줌 흐름 1. hello-static.html 치고 들어감 2. 내장 톰캣에서 요청 받음 3. 스프링 컨테이너에 해당 컨트롤러가 있나 확인 !! 우선순위 4. 컨트롤러가 없으면 /static 폴더 안에서 매칭되는 html 파일이 있나 확인 5. 있으면 반환 2. MVC와 템플릿 엔진 - html을 그냥 주는게 아닌 서버단에서 동적으로 변경하고 줌 - 모델, 뷰 , 컨트롤러 - 첨에는 jsp로 뷰에다가 다 했다가 mvc 스타일로 관심사를 나눠서 코딩을 한다 ! ctrl + p : 옵션을 확인할 수 있다 @GetMapping("he..