본문 바로가기

분류 전체보기382

재귀 함수 정리 하이 ... 요즘은 정말 틈틈이 시간을 내서 알고리즘을 열심히 공부하고 있는 중이다. 예전에 취업 준비할 때는 알고리즘에 대해 자신감도 있었고, 문제도 곧잘 풀었었는데 뭔가 공부를 다시하려니 마음먹은대로 쉽게 되진 않는다. 사설이 조금 길었다. 오늘은 알고리즘 문제에서 다양하게 많이 사용되는 재귀함수에 대한 내용을 정리해 두려고 한다. 1. 스택 프레임 먼저 재귀함수에 대해 알기 위해서는 스택 프레임이라는 것을 잘알아야 한다. 스택 프레임이란 스택 영역에 차례로 저장되는 함수의 호출 정보를 의미한다. 보통의 언어에서 메모리의 스택 영역은 함수의 호출이랑 그와 관련된 지역 변수와 파라미터를 저장한다. 이 스택영역은 함수의 호출이 완료되면 소멸된다. 우리가 흔히 들어본 스택 오버플로우가 바로 이 영역이 넘쳐.. 2021. 7. 27.
코딩 테스트 준비할 때 꿀팁 (feat. 네카라쿠배) 하이 ...! 오늘은 대학생 분들이나 이직을 준비하시는 많은 분들에게 도움을 드리고자 글을 좀 적어보려고 한다. 취업을 준비하던 시절 꾸준하게 알고리즘 문제를 풀었었고, 요즘도 감이 죽지 않도록 하루에 한 두 문제는 꾸준히 풀고 있다. 솔직히 나는 고등학교 시절까지 문과였고 머리속에는 논리적인게 하나도 없어서 처음에 알고리즘을 풀때 굉장히 곤혹 스러웠다. 문제를 해석하는 것부터 시작해서 문제를 푼다해도 채점사이트에서 돌려보면 오답으로 나오는 것 까지... 굉장히 고비와 고난이 많았다.. 그래도 지금은 나름대로 잘하는 건 아니라도 알고리즘 문제가 주어지면 어느정도 접근은 되고, 어려운 난이도가 아니라면 어찌 저찌 풀어내긴 한다. 이렇게 알고리즘 초보자가 중초보자(?)가 될 수 있는 노하우를 알려드리려 한다.. 2021. 7. 22.
안드로이드 Kotlin 기본 사용법 정리 - TextView, Button, EditText 1. TextView 1) TextView의 기본 주요 속성 - text : 보여줄 문자열 - lines : 문자열의 라인수 - textColor : 표시되는 문자열 색상 - textSize : 표시되는 문자열 크기 - textAppearance : 표시되는 문자열 형식 2) 코틀린에서 TextView 속성 통제하는법 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) ````````` //val textView = findViewById(R.id.textView) // 이 과정이 kotlin에서는 필요가 없음. textView.t.. 2021. 7. 20.
ConstaintLayout 내용 정리 오늘은 안드로이드 프로젝트를 만들때 가장 기본적으로 만들어지는 ConstraintLayout에 대해 정리를 해 두고자 한다. ConstarintLayout 의 경우 RelativeLayout과 비슷하게 동작하는데 부모나 다른 view와의 관계 설정을 통해 UI를 배치할 수 있다. 이러한 배치를 하기 위해 제약 조건을 이용해 배치를 할 수 있는데 이때 두가지를 사용할 수가 있다. 1) 실선 제약 조건 : 부모나 다른 view와의 관계설정을 실제 좌표값을 이용해서 설정하는 방법임 2) 스프링 제약조건 방법 : 부모나 다른 view와의 관계설정을 실제 비율을 이용해서 설정하는 방법임 위처럼 이렇게 비율을 가지고 UI 작업을 해주면 만약에 화면을 회전하거나 할때 알아서 뷰를 찾아서 배치를 해주는 큰 장접이 있다.. 2021. 7. 19.
Dto 객체 생성할 때 UnexpectedTypeException 발생하면. .. 하이 .. 간단한 서버 프로젝트 중에 ... 이런 에러가 발생해서 .. 포스팅을 한다. 일단 내가만든 dto 객체는 아래와 같다. import lombok.Data; import javax.validation.constraints.NotEmpty; @Data public class CreateLibraryRequestDto { @NotEmpty(message = "name is required value") private String name; private String description; @NotEmpty(message = "startTime is required value") private String startTime; @NotEmpty(message = "endTime is required v.. 2021. 7. 15.
[Sprig Data JPA] Spring Data JPA의 repository에서 save 메서드 사용시 NullPointerException 이 날때 하이 spring Data jpa + querydsl을 사용해서 간단한 프로그래밍을 하고있는데, 테스트 코드에서 save 메서드를 날리면 계속 NullPointerException 이 발생하는 걸 확인했다. @SpringBootTest @Transactional class MemberRepositoryTest { MemberRepository memberRepository; @Test public void saveMemberTest() { Member member1 = new Member("kang","abcd1@naver.com", "1234", MemberType.STUDENT); memberRepository.save(member1); List member = memberRepository.find.. 2021. 7. 14.
Spring Boot 프로젝트에서 환경에 따라 다른 Profile 등록하기 하이... 오늘은 실무에서 일하시는 분들이라면 알면 좋은 내용에 대해 작성해보려고 한다. 혼자 개발하는 개발자라면 상관없겠지만, 실무에서는 보통 로컬 환경, 개발 환경, 테스트 환경 , 운영 환경 다양한 환경에서 프로젝트를 수행한다. Spring Boot 를 이용하는 개발자들이라면 다들 아시겠지만 application.yml 파일에 설정을 별도로 해주어 이런 환경 구분이 가능하다. 일단 test 전용으로 yml 파일도 하나 복사해서 만들어주자. 그리고 내부에 test > resources 디렉토리에 있는 yml 에는 ````` spring: profiles: active: test ````` 를 추가해주고, main > resources 에는 ````` spring: profiles: active: lo.. 2021. 7. 9.
[querydsl] batch 성 거래 처리하기 프로그램을 짜다보면 배치작업처럼 다량의 데이터가 업데이트 되거나 삭제되야하는 경우가 있다. 그런데 querydsl로 update 쿼리를 날리면 db의 상태와 영속성 컨택스트의 상태가 다른것을 확인할 수 있다. 영속성 컨택스트의 데이터는 그대로고 db만 값이 변경된다. 영속성 컨택스트의 1차 캐시와 동기화가 안되었기 때문이다. (JPA에서는 이를 Dirty Checking) 이라고 한다. 그래서 혹시나 내부에서 로직이 update이외에 다른게 있다면 꼭 영속성 컨택스트를 초기화 하는 과정을 넣어주는게 좋다. long updateCnt = queryFactory .update(member) .set(member.userName, "babo") .set(member.age, member.age.add(1)) .. 2021. 7. 8.
[querydsl] 동적 쿼리 만들기 mybatis는 특정한 xml에서 sql을 처리하고, 거기서 또 동적 쿼리를 처리한다. 이게 생각보다 나는 많이 불편했다. querydsl은 java 코드 내에서 동적 쿼리 처리가 가능하다. 이는 큰 이점이라고 생각한다. 오늘은 querydsl에서 동적쿼리를 처리하는 두가지 방법에 대해 작성해보려고한다. 1.BooleanBuilder 이 방법은 QueryDSL에서 공식적으로 문서로 남겨져 있는 방식인데 null인지 아닌지를 판별하여 builder를 조립해서 끼워 넣는 방식으로 작업을 한다. //BooleanBuilder builder = new BooleanBuilder(member.userName.eq(nameCond)); // 이런식으로 초기값 설정 가능 BooleanBuilder builder = .. 2021. 7. 8.