전체 글 (130) 썸네일형 리스트형 [Programmers Lv2] 지게차와 크레인 https://school.programmers.co.kr/learn/courses/30/lessons/388353풀이1 (틀림)초기 풀이에서는 2중 for문을 사용하여 지게차로 접근 시에는 4방향 탐색을 통해 맵 밖을 벗어나는 위치이거나혹은 주변에 있는 컨테이너가 꺼내진 상태라면 해당 컨테이너도 접근이 가능하다고 가정하고 풀이했었다.하지만 중간에 크레인으로 아무 위치에 있는 컨테이너를 꺼낸다고 할 경우 해당 풀이는 잘못된 풀이이다! 세번째 경우에 (1,2) 에 위치한 'A' 컨테이너는 오른쪽에 위치한 'B' 컨테이너가 이전에 크레인으로 인해 꺼내졌기 때문에 첫번째 풀이로 푼다면 해당 'A' 컨테이너도 꺼내져야하는 대상이 되는게 맞지만 외부에서 접근 불가능한 컨테이너이므로 꺼내지지 않는 것이 맞다. 코드.. [Programmers Lv2] 삼각달팽이 https://school.programmers.co.kr/learn/courses/30/lessons/68645 풀이어떻게 풀지 고민하다 규칙을 알아냈다.1부터 n까지 숫자가 삼각달팽이에 저장되는데저장되는 방향은 아래, 오른쪽 왼쪽대각선 위 순서이다. 방향벡터로 나타내자면 (1,0) -> (0,1) -> (-1,-1)로 나타낼 수 있다. (직각 삼각형 형태로 저장할 때 기준)또한 탐색하는 사이즈는 n -> n-1 -> n-2 ... 이렇게 이전 사이즈의 1만큼 감소한 사이즈만큼 탐색한다. 해당 문제를 풀기 위해 int 형 2차원 배열을 사용했고 문제에 주어진 삼각형과 달리 직각삼각형 형태로2차원 배열에 저장하여 풀었다. 코드import java.io.*;class Solution { publ.. 동시성제어 문제를 비관적 락으로 해결해보기 어떤 문제가 있었나?한명의 상담사에게 여러 고객이 같은 시각에 상담 신청을 할 경우 상담사는한낱 한시에 여러명과 상담을 진행해야하는 상황이 발생한다. 원래의 기능 설계 의도는 고객 1명과 매칭이 되면, 상담사는 상담이 불가능한 status가 되어 상담이 끝나기 전 까지는추가 상담 신청을 받을 수 없다. @Transactionalpublic String applyForConsultation(Long counselorId) { // 1. 락을 걸고 상담사 정보 조회 (다른 스레드는 대기 상태가 됨) Counselor counselor = counselorRepository.findByIdForUpdate(counselorId) .orElseThrow(() -> new Illeg.. 자바의 추상클래스 지난번에 인터페이스의 활용 이유에 대해서는 공부했는데자바의 상속이라고 한다면 인터페이스 말고도 추상 클래스가 있다. 그래서 오늘은 추상클래스에 대해 머리속에 집어넣고자 포스팅한다! 추상클래스란?추상클래스는 A, B, C 클래스들 간에 비슷한 필드와 메서드를 공통적으로 추출해 만들어진 클래스다. 예를 들면 자동차를 만드는 제조사는 여러군데다. 현대자동차, 테슬라, 벤츠 등등 이 자동차들은 겉모습, 엔진 이런건 전부 다를지만 '전진', '후진' 등 공통되는 액션을 한다. 이런 공통 액션, 다시 말해 공통 메서드들을 추출하여 둔 것이 추상클래스다. 뿐만 아니라 자동차라고 하면 기본적으로 엑셀과 브레이크 등등 있지 않은가? 이런 공통 필드 역시 추출하여 둔 것이 추상클래스이다. 자 그렇다면 추상 클래스를 객체.. Spring AOP AOPAOP란 Aspect Oriented Programming, 관점 지향 프로그래밍을 의미한다. AOP가 필요한 상황을 가정해보자면- 모든 메소드의 호출 시간을 측정하고 싶을 때라고 해보자 하지만 이 메소드들 중 회원 가입과 회원 조회에 시간을 측정하는 기능은 핵심 관심 사항이 아니다.시간을 측정하는 로직은 공통 관심 사항에 해당한다.따라서 시간을 측정하는 로직과 회원 관련 비즈니스 로직이 섞이게 된다면 추후 유지보수가 힘들어진다. 그래서 공통 관심 사항과 핵심 관심 사항을 분리 해야한다!! Spring AOPSpring AOP를 사용하기 위해서는dependency로 spring-boot-starter-aop 의존성을 추가해줘야한다. 우리가 분리해야하는 공통 관심 사항의 예로는 다음과 같은 것들이 있.. JDBC와 Connection Pool 오늘은 JDBC를 공부했는데 덩달아 Connection Pool도 공부하게 됐다.https://ittrue.tistory.com/250#google_vignette [Java] JDBC란 무엇인가? - Java Database ConnectivityJDBC란? JDBC(Java Database Connectivity)는 Java 기반 애플리케이션의 데이터를 데이터베이스에 저장 및 업데이트하거나, 데이터베이스에 저장된 데이터를 Java에서 사용할 수 있도록 하는 자바 API이다. JDBittrue.tistory.com 이 분 정리 잘 해주셨다. 그래도 내가 직접 타이핑하면서 머리 속에 집어 넣을 계획 JDBCJava Database Connectivity 의 줄임말이다.자바 기반 애플리케이션의 데이터를 .. Spring이 Bean을 찾아가는 과정 Bean 등록하기@Controller 어노테이션이 있는 클래스는 스프링 컨테이너가 객체 (빈) 으로 관리한다. @Controllerpublic class MemberController { } @Service도 마찬가지, @Servicepublic class MemberService { } 이렇게 되면 스프링에서 의존 관계 주입을 자동으로 해준다! @Controllerpublic class MemberController { private final MemberService memberService; @Autowired public MemberController(MemberService memberService){ this.memberService = memberService; }}(이건 생성자 주.. 자바, Spring의 Interface (feat. 객체지향) 자바에서 인터페이스를 사용하는 가장 큰 이유는 뭘까? 바로! - 기능 보장 (표준화) : 이 인터페이스를 상속 받은 클래스는 무조건 이 메서드가 있어!- 확장성 (다중 상속) : 여러 기능을 조합해서 유연하게 클래스를 만들 수 있어! 이 두가지 일 것이다. 하지만 Spring에서 인터페이스를 사용하는 큰 이유는 다형성을 위함이다. 예시로- 회원 관리 로직 (UserService)를 개발 중이고- 데이터 저장소가 아직 안정해져서 임시로 메모리에 저장하도록 (MemoryRepository) 구현했다고 치자 UserService가 아래 처럼 구체적인 클래스 (MemoryRepository)를 직접 의존하고 있다면 나중에 실제 DB인DbRepository로 바꿀 때 UserService 내 MemoryRepos.. 이전 1 2 3 4 ··· 17 다음