전체 글 146

생성자에서 다른 생성자 호출하기/ 참조변수 this와 생성자 this()

참조변수 this 인스턴스 자신을 가리키는 참조변수. 인스턴스의 주소가 저장되어 있다. 생성자를 포함한 모든 인스턴스메서드에는 참조변수 'this'가 지역변수로 숨겨진 채로 존재한다. ex. long a, b; -> this.a, this.b 가 진짜 이름이지만 this를 생략해서 사용 가능하다. static메서드 에서는 this 사용불가하다. 인스턴스멤버만 this를 사용할 수 있다. 생성자와 모든 인스턴스메서드 내에서 사용가능하다. this(), this(매개변수) - 생성자. 같은 클래스의 다른 생성자를 호출할 때 사용한다. * this와 this()는 비슷하게 생겼을 뿐 완전히 다른 것이다. this는 '참조변수'이고 this()는 '생성자'이다. this : 인스턴스 자신을 가리키는 참조변수. ..

생성자 ( Constructor) / 기본생성자/ 매개변수가 있는 생성자

생성자 ? 인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드' - 인스턴스 초기화 : 인스턴스 변수들을 초기화 하는 것 생성자의 조건 1. 이름이 클래스 이름과 같아야 한다. 2. 리턴값이 없다. (void 안붙임) 생성자도 오버로딩이 가능하므로 하나의 클래스에 여러개의 생성자가 존재할 수 있다. 연산자 new가 인스턴스를 생성하는 것이지 생성자가 인스턴스를 생성하는 것이 아니다. 생성자는 단순히 인스턴스변수들의 초기화에 사용되는 특별한 메서드일 뿐이다. Card c = new Card(); Card클래스의 인스턴스를 생성하는 코드의 수행되는 과정은 단계별로 아래와 같다. 1. 연산자 new에 의해서 메모리(heap)에 Card클래스의 인스턴스가 생성된다. 2. 생성자 Card()가 호출되어 수..

오버로딩 (overloading) / 가변인자(varargs) : 매개변수 개수를 동적으로 사용할 수 있는 기능

오버로딩? 한 클래스 안에 같은 이름의 메서드 여러개 정의하는 것. - 자바에서는 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있다. void println() void println(boolean x) void println(char x) 오버로딩이 성립하기 위한 조건 1. 메서드 이름이 같아야 한다. 2. 매개변수 개수 또는 타입이 달라야 한다. 3. 반환 타입은 영향이 없다. 오버로딩이 아닌 경우 //매개 변수의 타입과 개수가 일치하기 때문에, 리턴타입은 상관없으므로 오버로딩으로 간주되지 않는다. int add(int a, int b) { return a+b;} long add(int a, ..

클래스메서드(static 메서드) 와 인스턴스 메서드 / 클래스멤버와 인스턴스멤버간의 참조와 호출

1. 인스턴스 메서드 인스턴스 생성 후, '참조변수.메서드이름()' 으로 호출 인스턴스 멤버(iv,im)와 관련된 작업을 하는 메서드 메서드의 작업을 수행하는데 인스턴스 변수를 필요로 하는 메서드. 메서드 내에서 인스턴스 변수(iv) 사용 가능 2. static 메서드(클래스메서드) : 메서드 앞에 static이 붙은 것 객체생성 없이 '클래스이름.메서드이름()'으로 호출 ex. Math.random() 또는 Math.round() 인스턴스 멤버(iv,im)와 관련없는 작업을 하는 메서드 인스턴스와 관계없는 메서드를 클래스메서드로 정의한다. 메서드 내에서 인스턴스 변수(iv) 사용 불가 * 가장 큰 차이점은, static 메서드는 객체 생성없이 호출 가능하고 인스턴스메서드는 인스턴스 생성 후 호출 해야 ..

[BOJ] 1780번: 종이의 개수/ JAVA, 재귀

https://www.acmicpc.net/problem/1780 1780번: 종이의 개수 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수 www.acmicpc.net Step1. 현재 종이 사이즈 안에서 모든 배열의 값이 같은지 확인 : 여기서는 sameCheck 함수 사용 1-1. 같다면, 종이 사이즈 안에서 어떤 값인지 확인 후 ( 1 or -1 or 0 ) 갯수 증가시키기. num1, num2, num3 Step2. 종이를 다시 9등분 해야 하는 함수가 필요 1-1. 현재 위치가 x,y 일 때 아래의 좌표로 총 9번 나뉘어야 ..

Algorithm Study 2022.04.25

빈 생명주기 콜백

* 빈 생명주기 콜백 시작 데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다. 스프링을 통한 초기화 작업과 종료 작업은 총 3가지가 있다. 1. 인터페이스 2. 설정 정보에 초기화 메서드, 종료 메서드 지정 3. @PostConsturct, @PreDestroy 에노테이션 지원 결과적으로 @PostConstruct, @PreDestroy 에노테이션을 사용하자 ! 코드를 고칠 수 없는 외부 라이브러리를 초기화, 종료해야 하면 @Bean의 initMethod, destroyMethod를 사용하자. 스프링 빈은 간단한 라이프사이클을 가진다. * 객체 생성 -..

[BOJ] 로또 / JAVA, 재귀

https://www.acmicpc.net/problem/6603 6603번: 로또 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 현재 자기값보다 큰 값으로 다음값을 선택해야한다. -> for문에서 현재 인덱스값부터 시작하면 된다. 2. 재귀함수에서 파라미터값을 어떤값을 넣을까? - int? - String? - List ? -> int 형의 현재 인덱스값을 파..

Algorithm Study 2022.04.07

의존관계 자동주입 (2) 등록한 빈이 2개 이상일때 @Qualifier @Primary

Autowired는 타입으로 조회한다. 이 때, DiscoutPolicy 타입의 2개가 모두 스프링빈으로 선언했다면? 1. DiscountPolicy 하위타입인 FixDiscoutPolicy 2. DiscountPolicy 하위타입인 RateDiscountPolicy -> NoUniqueBeanDefinitionException 오류가 발생한다. 의존관계 자동 주입 시, 똑같은 타입의 스프링 빈이 있을 때 해결하는 3가지 방법 1. @Autowired 필드 명 매칭 2. @Qualifier 3. @Primary 1. @Autowired 필드 명 매칭 @Autowired 는 처음 타입을 매칭하고, 여러 빈이 있으면 필드이름, 파라미터 이름 으로 빈을 추가 매핑한다. 따라서, 주입할 대상의 필드명을 변경시켜..

의존관계 자동주입 (1) 다양한 의존관계 주입 방법

의존관계 주입은 크게 4가지 방법이 있다. 1. 생성자 주입 2. 수정자 주입(setter 주입) 3. 필드 주입 4 일반 메서드 주입 결론부터 말하자면 생성자주입을 권장한다. 생성자 주입을 권장하는 이유! * 불변 대부분의 의존관계 주입은 한번 일어나면 애플리케이션 종료시점까지 의존관계를 변경할 일이 없다. 오히려 대부분의 의존관계는 애플리케이션 종료 전까지 변하면 안된다.(불변해야 한다.) 수정자 주입을 사용하면, setXxx 메서드를 public으로 열어두어야 한다. 누군가 실수로 변경할 수 도 있고, 변경하면 안되는 메서드를 열어두는 것은 좋은 설계 방법이 아니다. 생성자 주입은 객체를 생성할 때 딱 1번만 호출되므로 이후에 호출되는 일이 없다. 따라서 불변하게 설계할 수 있다. *누락 프레임워크..

[BOJ] 2529번: 부등호 / JAVA, 백트래킹

https://www.acmicpc.net/problem/2529 2529번: 부등호 여러분은 제시된 부등호 관계를 만족하는 k+1 자리의 최대, 최소 정수를 첫째 줄과 둘째 줄에 각각 출력해야 한다. 단 아래 예(1)과 같이 첫 자리가 0인 경우도 정수에 포함되어야 한다. 모든 입력 www.acmicpc.net 1. 재귀함수 돌릴 조건 - 첫번째 시작하는 숫자는 0부터 9까지 모든 숫자가 가능하므로 - 0 부터 9 까지 모든 수를 재귀함수로 돌린다. for(int i=0;i

Algorithm Study 2022.04.06