평상시는 NC와 COM단자가 연결되어 있고, SIG핀으로 전류가 흐를 시 NO와 COM단자가 연결된다.
릴레이
2. 릴레이 사용법
고 전압을 사용할 시 전원을 모두 제거하고 사용해야 하고 되도록 사용방법만 익히고 실제로 해보지 않는 걸 추천합니다.
만약 다음 그림과 같이 연결되어있다면 평상시에는 NC와 COM이 연결되어있기 때문에 현재 NO, COM이 연결된 아래 그림은 전구에 불이 켜지지 않을 것이다 하지만 7번 핀에 전류가 흐를 경우 NO와 COM이 연결되므로 전구에 불이 켜질 것이다. 이처럼 낮은 전류로 높은 전류를 컨트롤하기 위해 릴레이를 사용한다
최장, 최단 자주 사용했던 dfs를 이용하여 해결하면 될것이라고 생각했으나 기존 2차원 배열을 활용하던 방법과 달리 그래프를 어떤 방식으로 해결해야하는지에 대한 에러사항이 생김. 공부를 통해 방법을 찾았고 첫번째 방법은 기존 방법과 비슷하게 이차원 배열에, 두번째 방법은 vector를 활용하여 연결리스트 형태로 구현하는 방식이다. 문제의 그래프는 무방향 그래프 이므로 다음과 같이 구현했다
2. 코드
#include<iostream>
#include<string.h>
#include<vector>
using namespace std;
int T;
int N;
int M;
int MAX;
bool check[20];
void dfs(int now, int length, vector<int> *value) {
if (length > MAX) {
MAX = length;
}
check[now] = true;
for (int i = 0; i < value[now].size(); i++) {
int next = value[now][i];
if (check[next]) continue;
else {
dfs(next, length + 1, value);
}
}
check[now] = false;
}
int main(int argc, char** argv)
{
cin >> T;
for (int i = 0; i < T; i++) {
cin >> N >> M;
vector<int> v[20];
for (int j = 0; j < M; j++) {
int x;
int y;
cin >> x >> y;
v[x].push_back(y);
v[y].push_back(x);
}
MAX = 0;
for (int k = 1; k <= N; k++) {
memset(check, false, sizeof(check));
dfs(k, 1, v);
}
cout << "#" << i+1 <<" " <<MAX << endl;
}
}
Analog Digital Converter로서 연속적인 신호인 아날로그 신호를 부호화된 디지털 신호로 변환하는 장치를 의미한다. A\DC는 온도, 압력, 음성, 영상신호, 전압 등을 실생활에서 연속적인 아날로그 신호를 측정하여 그 신호를 컴퓨터로 입력하고 디지털로 변환하는 것을 의미한다. 여기서 우리가 사용할 가변저항이 ADC역할을 한다.
ADC그림
2. 가변저항 실습하기
가변저항과 LED를 사용하여 Analog Input / Output 실습을 진항한다. 실습에 필요한 사전 준비물은 다음과 같다.
가변저항이란 : 저항의 값이 고정되어있지 않고 회전 스위치를 이용하여 임의의 저항값으로 변경이 가능한 저항
실습 준비물
가변저항은 다음과 같이 GND, A0, 5V로 구성되어있다
가변저항 설명
준비가 끝났다면 다음과 같이 회로를 구성한다 5V GND를 가변저항과, LED에 가변저항 A0은 아두이노 A0부분에, LED의 + 부분은 9번핀에 연결한다
회로구성
회로를 구성하였다면 다음과 같이 코드를 작성한다. 이때 sensorValue를 보면 sensorPin/4를 하는데 4로 나눠주는 이유는 0~1024 까지나 오는 결과 값을 analogRead에 맞게 0~255로 바꾸기 위해 4로 나눠주는 것이다
int sensorPin = A0;
int led = 9;
void setup()
{
pinMode(led, OUTPUT);
Serial.begin(9600);
}
void loop()
{
int sensorValue = 0;
sensorValue = analogRead(sensorPin)/4;
analogWrite(led, sensorValue);
Serial.println(sensorValue);
delay(10);
}
앞 강의에서 DI란 무엇인지와 생성자를 이용하여 의존성 주입을 하는 방법을 실습해 보았다면 이번 강의에서는 Annotation을 이용하여 의존성 주입을 해볼 예정이다.
먼저 에노테이션이란 기존 XML을 이용하여 의존성 주입을 하는 것이 아닌 @Required 같은 태그를 이용하여 의존성 주입을 하는 것을 의미한다. 의존성 주입 에노테이션으로는 다음과 같은 3가지가 있다
#1 @Required
XML의 Bean의 property에 해당하는 부분 중 필수적인 부분을 명시할 때 다음과 같이 사용한다. 쉽게 말해 XML에 bean중 property가 꼭 있어야 하니 없으면 에러가 발생한다고 생각하면 좋다 즉 @required를 사용할때 xml에 property에 name에 해당하는 부분이 반드시 있어야 에러가 발생하지 않는다.
public class Boy{
private String name;
@required
public void setName(String name){
this.name = name;
}
}
#2 @Autowired
이전 강의에서 의존성 주입을 할 때 bean에 property를 사용하여 세터를 통한 주입을 했었다. 하지만 Class의 기존 세터 부분을 지우고 @Autowired 에노테이션을 추가하면 자동으로 의존성 주입이 이루어진다. 이는 다음 코드처럼 Boy클래스는 property를 사용하여 세터를 통해 bean을 생성했고 college라는 bean은 propery를 통해 boy라는 bean을 의존성 주입 했지만 College클래스에 @Autowired 에노테이션을 추가하고 세터부분을 지우고, 마찬가지로 bean의 property부분을 지우면 자동으로 의존성 주입이 이루어지는것을 확인할 수 있다.
public class Boy {
private String name;
private int age;
// getters and setters ...
}
public class College {
@Autowired
private Boy student;
//이부분부터
public void setStudent(Boy aboy){
this.stuendt = aboy;
}
//이부분까지 삭제
}
<bean id=“boy” class=“Boy”>
<property name=“name” value=“Rony”/>
<property name=“age” value=“10”/>
</bean>
<bean id=“college” class=“College”>
<property name=“student” ref=“boy”/> //이부분 삭제
</bean>
#3 @Qualifier
만약 Autowired를 할때 다음과 같이 Boy 클래스의 bean이 두 개 있으면 어떤 걸 자동으로 Autowired를 할지 몰라 오류가 생긴다 따라서 이럴 때 @Qualifier를 사용한다. 다음과 같이 bean에는 qualifer의 value를 지정하고 Class에는 @Qualifier의 에노테이션과 함께 value를 설정하면 어떤 bean을 주입할지 정하게 된다
PetOwner.java클래스의 생성자 부분을 지우고 다음과 같이 @Autowired에노테이션을 추가합니다
package kr.ac.hansung.helloDI;
import org.springframework.beans.factory.annotation.Autowired;
public class PetOwner {
@Autowired
private AnimalType animal;
public void play() {
animal.sound();
}
}
다음과 같이 코드를 수정하고 Run 하게 되면 다음과 같은 에러가 발생하는 것을 확인할 수 있습니다. 앞서 공부한 것처럼 2개의 bean 중 어떤 bean을 주입할지 모르기 때문에 다음과 같은 error가 발생하는 것입니다. 따라서 2가지 방법을 통해 해결해보도록 하겠습니다.
error
#3) @Qualifier추가 및 animal.xml수정
다음과 같이 Qualifier에노테이션을 사용하여 다음과 같이 어떤 빈을 주입할지 선택합니다.
PetOwner.java
package kr.ac.hansung.helloDI;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
public class PetOwner {
@Autowired
@Qualifier(value="cat")
private AnimalType animal;
public void play() {
animal.sound();
}
}