TMAP 또는 다른 내비에 추가되었으면 하는 것?
오늘 운전을 하면서 보니 도로 일부에 포트홀 작은 것들이 군데군데 있었다.
내비가 켜져 있는 상황에 운전중이니까...
"포트홀 신고", "교통사고 신고"... 이런 키워드들을 말로 하면
네비에서 위치를 기록 기록해두었다가
운전 끝내고 내비를 확인하여 기록된 내용을 신고 할수 있게 해줬으면 어떨까?
그 기록에서 "신고" 버튼을 누르면 자동으로 근처 도로관리 사업소에 접수요청을 해주면 어떨까?
그럼 도로 관리업체들이 접수 건으로 일정을 확정하고 기록된 곳 근처에 가서 찾아서 수리 할 수 있도록...
완료 후엔 신고자들에게 완료 문자 날려주고...
'--- 취미 > 아이디어?' 카테고리의 다른 글
백수로 이런 저런 생각하다보니... (0) | 2024.01.27 |
---|---|
옷, 신발, 모자등 AI 쇼핑? (0) | 2023.08.02 |
키오스크] 단품 주문... 할때??? (0) | 2023.06.07 |
아이디어? (0) | 2009.05.13 |
비전공자들이 프로그래밍 시작 하려면?.....(4)
요즘 유튭이나 광고를 보면 코딩 교육을 알리려는 광고들이 참 많더라.
비전공자들이 자기들이 했던 경험들을 유튭에 올리는 영상들도 일부 봤었고...
17년간 코딩을 해오면서 요즘 드는 생각은 이제 코딩에 뛰어든 사람들까지라면
기존에 구현된 시스템들과 추후 몇년간 새로 개발되는 시스템들의 유지보수로 밥벌이가 가능하겠지만,
이제 초,중 다니는 애들이 사회에 진출하면 과연? 6년~10여년 후에
과연 프로그래머 의자가 현장에 몇개나 남아 있을까?
이상적인 생각으론 사람이 일하고 ai는 도우미처럼 보조를 하는 형태겠지만...
아이언맨 자비스 시스템처럼 사람의 보조역할로 생각이 되겠지?
곧 여러 일자리들은 ai와 로봇이 일을 하고 필요한 것들을 사람이 조달하는 형태로 바뀌지 않을까?
로봇과 ai의 발전속도가 얼마나 균형있고 빠르게 진행되느냐에 따라 사람도 현장에서 사라질지 모르다는 생각이 된다.
기업들의 일부사람들만 로봇들을 현장에서 배치관리하고 판매와 서비스만 사람이 한다?
하지만 그것도 온라인 판매는... 쇼핑몰들도 ai가 사람들 취향에 맞춰 보여줄테니...
택배기사 말고는 사람이 필요 없어질지도 모르겠다.
이런 저런 생각들을 하다보면 비전공자들과 전공자들중에 top을 제외한 개발자들이 지금 코드레벨로 교육받고 있는게 맞나 싶다. 이야기를 이어가면 정치쪽으로 넘어가니 각설하고..
객체.할일( 필요한 것들 ) : 결과
목적된 프로그래밍을 하기 위해 객체들 목록을 정의하면서 주요 "할일( 필요한 것들 ): 결과" 만 써놓고 AI 코파일럿 같은거에 코드요청을 하면 만들어 줄 것이고...
큰덩어리를 요구하면 ai가 아직은 못만들어도 의사코드형태로 잘라서 전달하면 코드를 만들어주는걸 봐서는
비전공자들은 의사코드를 만들수 있는 객체지향 기법을 이해하고 글쓰기등을 좀 더 공부하는게 어떤가? 라고 생각이 된다.
'--- 취미 > 생각하기' 카테고리의 다른 글
웹툰 & 카카오페이지 (0) | 2024.02.21 |
---|---|
생각 정리... (0) | 2024.02.20 |
비전공자들이 프로그래밍 시작 하려면?.....(2) (0) | 2024.01.04 |
비전공자들이 프로그래밍 시작 하려면? (0) | 2023.12.26 |
MySQL . Windows 10 Pro에 설치??? (0) | 2023.12.12 |
비전공자들이 프로그래밍 시작 하려면?.....(3)
이번엔 프로그램을 제작할때 내가 사용하는 방법을 써보려 한다.
글로 쓰면 얼마나 걸릴지 모르겠지만... 생각하는 데로 대충 끍적거리고 메모장에 요약해놓고 바로 코딩해버리지만...
이건 비전공자들이 검색하다 우연히 볼까? 라는 생각으로 써보는 것이다.
이번 만들던 PLC모니터링 프로그램 구조도다.
알바형태로 하는 플젝이다 보니 문서가 없어 설명들을 듣고 내가 그렸다.
목적 ::: 이 프로그램의 목적은 PLC의 네가지 정보( 차단기, 수신, 위험수위, 해제수위 )를 모니터링 하는 것
## 주요 객체를 뽑으면 { 다리, PLC } 두개가 있다. <옵션>에 대한건 제외...
난 표현을 메모장 아래와 같이 쓰거나 직접 class를 구현한다.
#다리
{
#[PLC]
{
.차단기
.수위
.위험수위
.해제수위
.위치 { L, R } // 옵션의 별도PLC와 타DB는 위치값을 C로 추가
}
}
눈에 딱 보이는 것을 추려낸 내용이다
[] 기호는 n개를 표현한것이다.
/* 추가적으로 이해에 필요한 내용
* PLC에 모드버스TCP라는 통신방식을 이용하여 요청하여 메모리값을 16bit(word)값을 응답받을 수 있다.
* 차단기, 수위, 위험수위, 해제수위는 각 메모리 주소값이 프로그래밍을 통하여 고정되어 있다.
여기서 고민해볼 것이 다리는 1개 일까? - 현업과 얘기해보니 n개 였다. 현장마다 관리하는 다리 개수가 다르다.
PLC와 통신을 하려면 모드버스TCP라는 방식으로 통신을 하므로 PLC의 IP 정보가 필요하다. port는 502번 고정이다.
*/
#[다리]
{
.다리위치명
#[PLC]
{
.IP
.차단기
.수위
.위험수위
.해제수위
.위치 { L, R } // 옵션의 별도PLC와 타DB는 위치값을 C로 추가
}
}
모니터링 대상이 여러개의 [다리]로 생각하고 배열 형태로 변경했다
실시간 모니터링이니 백그라운드에서 PLC에게 일정 주기마다 요청을 하고 응답을 받아야 한다.
윈도우 서비스(Windows Service)를 구현해야 한다.
#Service
{
.OnStart( string[] args ) {
}
.OnStop() {
}
}
윈도우 서비스를 .net으로 구현하면 초기 구현부가 위와 같은 형태로 나온다.
* OnStart, OnStop을 구현하면 되는데... 넘어가고..
모니터링을 하기 위해선 객체 관계를 생각해 볼 필요가 있다.
일정 시간마다 PLC에 요청해서 응답을 받아야 한다.
핵심 의사코드를 작성해보면...
무한 반복
{
반복( 다리 in 다리목록 ) {
다리.PLC.요청( 차단기 ) : 응답
DB업데이트(응답)
다리.PLC.요청( 수위 ) : 응답
DB업데이트(응답)
다리.PLC.요청( 위험수위 ) : 응답
DB업데이트(응답)
다리.PLC.요청( 해제수위 ) : 응답
DB업데이트(응답)
}
}
위와 같은게 계속 반복하여 필요한 정보를 계속 요청하고, 응답받은건 DB에 업데이트 해주면 된다.
이 프로그램은 개발 현장에서만 사용하는 것이 아니기에 다리정보, PLC정보를 별도 파일로 빼고
서비스 시작시 읽어서 객체화하여 종료시까지 요청/응답을 반복한다.
환경설정 파일과 연계하기 위해 아래형태로 변경한다.
#다리정보
{
ID : "BRD001"
다리명 : 어디어디에 있는 다리
L_ID : "PLC_L00"
R_ID : "PLC_R00"
}
// PLC_L00.json, PLC_R00.json 으로 파일을 만들고 아래 형태로 읽고/쓰기를 한다.
#PLC_Device {
.ID
.IP
.WebTitle
[모니터링]
{
타입 : { 차단기, 수위, 위험수위, 해제수위 }
PLC_메모리주소
FunctionCode // Modbus TCP프로토콜에 함수코드 ( 0x03, 0x04 )
}
}
! 코드가 아래와 같이 추가 변경된다.
//반복되기 전에 환경설정된 파일을 읽어서 만든다.
//다리정보 읽기
모니터링[] monitorings ;
반복 ( 다리 in 다리목록 )
{
// { 다리정보. PLC_L_ID }.json 읽기
monitorings.목록추가( PLC_L_Device.모니터링 )
// { 다리정보. PLC_R_ID }.json 읽기
monitorings.목록추가( PLC_R_Device.모니터링 )
}
무한 반복
{
반복( 모니터링 in monitorings ) {
모니터링.요청( ) : 응답
DB업데이트(응답)
}
}
이런 형태로 바꾼다.
보통 여기까지의 샘플 코드까지가 대략 반나절정도 걸린다. 좀더 규모가 큰 것들은 하루 이틀 정도?...
이후 부터는
1. 실제 PLC장비를 연결하고,
2. 모드버스TCP프로토콜 샘플을 만들기
Read Write 샘플 및 테스트
3. 서비스 프로젝트 생성 후 코드 반영.
4. 로그 기록
5. DB연결 및 스키마 생성 및 읽기/쓰기 쿼리문 작성
6. 간이 테스트 문서
7. 상세코드 작성 및 디버깅
1~7 정도 하면 1~2주 훌쩍 간다.
기존에 했던 작업들이면 1~2일 정도면 된다.
위 작업들을 보면 목적 프로그램의 주연들을 찾아내고 정의해서
관계를 설정하고 의사코드로 역할과 호출순서를 정한다.
기본적으로 객체.할수있는일( 필요한 것들... ) : 결과값 정의해서 누가 뭘 할지 결정하고
필요한 것들을 붙여나가면서 프로그래밍 하면 좋겠다.
어떤 기능을 구현한다 했을때 이런게 있겠지? 라고 생각하고
해당 기능을 가진 객체를 구글링하면 대부분 존재한다. 그럼 그걸 가져다 샘플 만들어서 돌려보고
코드에 반영하게 된다. 이럴때도 "할수 있는 일" 을 찾을때 도움이 된다.
비전공자들이 프로그래밍 시작 하려면?.....(2)
두번째 이야기....
첫번째로 객체.할수있는일( 필요한 것들... ) : 결과 형태로 수백가지 정도 써본다면
처음엔 잘 안떠오르는데... 하다보면 막 보이는데로 쓰게 되고, 그러다보면 이게 뭔짓인가 싶을때가 있었다.
그때 그만하면 된다.
표현하는 객체들이 할수 있는 일과 그 일에 필요한 것들을 적어본다면 객체와 객체간의 관계에 대하여 고민을 할때가 된거다. 뉴스 만화 영화 등을 보면서 장면 장면 기억에 남는거라든가? 스크린샷등으로 이미지를 남겨놓고 그 상황을 코딩해보면 좋다. 이때 의사코드(Pseudo)를 사용해본다.
이런 코드도 한 일주일 정도 투자해서 이거 저거 상황을 코드화 해보면 코딩할 준비가 된거라 생각한다.
우리처럼 비전공 개발자들이 초반에 코드에만 빠져 있다보면 객체들을 서로 관계지어 설계하는 과정을 체득하지 못하기에 미리 이런식으로 객체를 정의하고 객체간의 관계등을 미리 글쓰듯이 해보는 것이 중요하다 생각된다.
실제 작성하는 코드들이 그렇게 어려운 코드들이 없다. 대부분이 이미 만들어진 객체들을 활용하며 순서를 정해 호출하고
또 객체가 할 일에 필요한 자원들을 빠짐없이 전달해주는 역할을 개발자가 해주는 것이다.
우리는 3인칭 시점에서 내려다보면서 이야기를 써내려가면 된다. 이야기를 써내려가면서 흐름에 따라 등장하는 객체들이 있을 것이며 그 객체들이 어떤 라이브러리에 있는지 찾아서 끼워 맞춰주는 역할을 하면 된다. 시작은 그렇게 하면 된다고 본다. 좀더 관심있고, 좋은 업체들로 이직을 하려면 일 외에도 따로 전공자들보다는 더 많은 노력을 기울여 공부해야 한다.
다음에 시간이 되면 현재 개발중인 내용을 설계과정등을 시간순서대로 나열해보려한다.
'--- 취미 > 생각하기' 카테고리의 다른 글
생각 정리... (0) | 2024.02.20 |
---|---|
비전공자들이 프로그래밍 시작 하려면?.....(4) (0) | 2024.01.05 |
비전공자들이 프로그래밍 시작 하려면? (0) | 2023.12.26 |
MySQL . Windows 10 Pro에 설치??? (0) | 2023.12.12 |
경축!! 민주당 대의원제 축소~!! (0) | 2023.12.07 |
비전공자들이 프로그래밍 시작 하려면?
유튜브을 보다보면 개발자를 목표로 하는 사람들에 대한 이야기들이 참 많다.
언어별로 각종 강의자료들... 몇몇 자료들을 봤지만, 언어 소개 이후 론 대부분 코딩을 제일 먼저 시작한다.
개발자를 시작하려면 가장 먼저 일주일 정도 시간을 내서 객체지향에 대한 이해가 먼저 선행되었으면 한다.
SI일을 다니다가 신입 직원들을 봤을때... 코딩도 그럭저럭 하지만...
전공자들은 학교 다니면서 동기, 선배, 교수들과 함께 투자한 시간만큼 코딩이 가능하다.
비전공인 분들을 각자의 센스? 또는 국비에서 강사들의 복불복에 코딩이 변죽을 부린다.
나도 처음 개고생한거 생각하면, 그만큼 절실했으니까. C++ 책만 7번씩 볼 수 있지 않았을까?
비전공자가 개발자를 하기전에 반드시 이거 하나는 해보고 공부를 시작했으면 한다.
프로그램 코딩 대부분 기본 구조는 아래와 같다.
주어.동사( 동사의 목적에 필요한 데이타 목록,... ) : 결과
주어는 객체이고, 동사는 객체로 할수 있는 일,
그리고 객체가 하는 일에 필요한 데이타 또는 관련 객체들로 채워준다.
개체가 한 일에 대한 결과가 나오는 것이 있고, 없는 것도 있다 ( void )
우리 프로그래머들은 순차적으로 할 일들을 정의하고 순서대로 일을 할수 있는 문서를 작성하는 것이다.
int a = 10; 이런게 중요한게 아니고...
하나의 프로그래밍을 완성하기위해 필요한 주요 객체들과 그 객체들이 할 수 있는 일(동사)들이 떠올라야 한다고 생각한다. 그림이나 사진, 또는 자기 경험등... 눈앞에 보이는 모두를 객체.일() 로 정의할 수 있으면 좋겠다.
1. 자기 자신부터 동사를 붙여본다
나.잔다( 시간 )
나.일어난다()
나.이동한다( 목적지 )
2. 이런 형태로 객체를 100여가지 정도는 정의해보자.
3. 100여가지 중에 공통적인 것들을 분류해보자. ( 나중에 상속과 다형성 공부할때 좋은 자료가 된다 )
17년 정도 프로그래밍을 했지만, 기본 적인 비지니스 업무흐름이라는게 회사마다 제각각이라 기획 같은게 어렵지
코딩 자체가 어려운건 없다. 가끔 고수준의 크리티컬한 쓰레드 자원 관리나 게임프로그래밍 처럼 수학이 절실한거 아니면.. 그냥 라이브러리를 얼마나 아는가? 또는 필요한 객체들의 어떤 행위들을 추측이 가능한가? 정도이다.
진짜 어려운 프로그래밍은 전공자들 중 top class가 할꺼다.
그리고 이제 AI 시대가 왔다. 개발자들을 대체하기엔 시간이 좀 필요하겠지만... 발전 속도를 보면...
깔려있는걸 한번에 뒤집는건 불가능해도 새로 만드는 것들에 대해서는 점점 가능해지지 않을까?
그러면 이제 개발이란건 기획! 이란게 진짜 필요할 지도 모르겠다.
'--- 취미 > 생각하기' 카테고리의 다른 글
비전공자들이 프로그래밍 시작 하려면?.....(4) (0) | 2024.01.05 |
---|---|
비전공자들이 프로그래밍 시작 하려면?.....(2) (0) | 2024.01.04 |
MySQL . Windows 10 Pro에 설치??? (0) | 2023.12.12 |
경축!! 민주당 대의원제 축소~!! (0) | 2023.12.07 |
PLC와의 만남?? (0) | 2023.11.14 |
.razor 에서 foreach를 사용하여 생성한 버튼에 @onclick을 썼을때...
오늘 PLC 모니터링 기능을 추가하면서 웹 테스트를 하는데...
이상한 현상이???
.razor 안에서 ...
@code{
MonitoringInfo info = null;
}
@foreach( var brd in bridges ) {
info = Service.GetMonitoringInfo( brd );
<div ... >
<button @onclick=( e => EditDangerConfirm( info.ID, info.DangerValue) ) >
</div>
}
이런 식으로 썼는데 bridges를 순회하면서 html코드를 생성하고
@onclick 이벤트에 연결 했는데...
화면에서 테스트를 해보니... 무조건 마지막에 연결되었던 객체 정보로 뜬다.
원인 ::
@onclick이 발생하는 때에는 데이타가 계속 덮어씌여져서 가장 마지막 요소를 가지고 오픈하니까 ... 엉뚱한게 보여진다.
구글링을 해보니... 저렇게 쓰면 안된단다.. 생각해보니.. 그게 맞는 것도 같고..
해결방법 ::
@foreach( var brd in bridges ) {
MonitoringInfo info = Service.GetMonitoringInfo( brd );
<div ... >
<button @onclick=( e => EditDangerConfirm( info.ID, info.DangerValue) ) >
</div>
}
독립변수가 되겠끔.
MonitoringInfo info ; 선언을 foreach 안쪽으로 내렸다.
이렇게 하면 @onclick되는 시점에 바인딩될때의 변수값들을 가지고 컨펌창이 뜬다.
'# 4) .Net ( Vs 2010 ) > Web Matrix _Razor' 카테고리의 다른 글
Web Matrix] 구조화 컨텐츠... Layout (0) | 2011.04.20 |
---|---|
Web Metrix ] 첫만남? (0) | 2011.04.19 |
MySQL . Windows 10 Pro에 설치???
음... 현장대응하시는 분이 MySql 을 설치하면서 뭐가 안된다고 전화가 와서 받아보니...
노트북에서 진행했던대로 안넘어간다고 하였다.
첨엔 영상통화로 보다가 핸펀으로 연결해서 원격으로 보니..
인스톨 진행 중에 보이는 "product configuration" 목록이 비어있네?
root pwd 등록 부분도 없이 지나갔고 ...
Full로 선택해서 그냥 설치하면 보였던건데... 구글링해보는 걸로 얘기를 하고
끊고... 검색을 겁나 해봤지만... 마땅히 관련이 있을 만한 내용은 못찾았다.
구글번역으로 보이는 문구가 하나 있었지만... Full 로 선택한거랑 뭔차이겠나? 싶었는데...
정말 정말 혹시나 하는 마음에 "Custom" 선택하고 Document를 빼고 나머지 항목들을 모두 선택하고
시작하니... C++ 라이브러리 하나를 설치를 하더니 진행이 되면서... 설치가 완료되었다.
Full로 하는거랑 뭐가 달랐을까? Windows 10 Home버젼에선 그냥 깔렸는데... Pro버젼에선? 왜???
일단 설치는 끝마쳤으나...
PLC 구성이 현장마다 다 다르다는걸 이제사... 알려주면...
대응을 어찌하리오... 현장이 마다 PLC 구성이 다른건 설계할때 알 수 있었던걸까?
나가보니 다르더라인가?
오늘 알고리즘 구조 변경하고... 대략 샘플 테스트 마쳤다.
내일 PLC붙여서 테스트 해보고 코드 정리해서 보내야지..
'--- 취미 > 생각하기' 카테고리의 다른 글
비전공자들이 프로그래밍 시작 하려면?.....(2) (0) | 2024.01.04 |
---|---|
비전공자들이 프로그래밍 시작 하려면? (0) | 2023.12.26 |
경축!! 민주당 대의원제 축소~!! (0) | 2023.12.07 |
PLC와의 만남?? (0) | 2023.11.14 |
가을이 되어 그런가? 머리속이 혼란스럽다... (0) | 2023.10.11 |
경축!! 민주당 대의원제 축소~!!
대의원 20 : 1 권리당원
표의 등가성이 축소되었다.
1:1 은 아니어도... 60 > 20까지 줄었으니...
권리당원들 수가 많으니 이제 민주당의 당원들의 목소리가 국회의원들 귀에 좀 들리려나?
아~ 슈발 나겨비 븅서기 호중이 굥지니 종미니 서루니 진표 워누기 썅기대 듣보잡 수박들...
개혁의 시점을 놓쳐서 역사가 거꾸로 40년은 되돌아간것 같다.
전 땅끄때처럼...
이재명 당대표와 그 옆에서 같이 어깨를 나란히 하는 민주당 의원들... 모두 화이팅!!
수박새끼들 뚜까 패서 꼭 좀 내보냈으면...
우리동네도 대의원제 바뀌고 표수 계산을 해보면 과연? 썅기대가 박아놓은 대의원들
표가 너무 많진 않은지... 권리당원들이 많을지...
'--- 취미 > 생각하기' 카테고리의 다른 글
비전공자들이 프로그래밍 시작 하려면? (0) | 2023.12.26 |
---|---|
MySQL . Windows 10 Pro에 설치??? (0) | 2023.12.12 |
PLC와의 만남?? (0) | 2023.11.14 |
가을이 되어 그런가? 머리속이 혼란스럽다... (0) | 2023.10.11 |
민주당 수박들 몰아낼 절호의 기회인데... (0) | 2023.09.25 |
PLC와의 만남??
카테고리 정리를 한번 해야 하려나....
이번 플젝 하나를 하게 되었다. 지인분 회사에서 LG산전 PLC...를 HMI가 아닌 웹페이지에서 모니터링 하고 싶어하신다.
MES할때 봤던 PLC를... 15년? 16년만에 보는건가?
모드버스TCP로 통신하는 걸로 해서 8일날 PLC를 받고 벌써 일주일이 되었구나...
어쨌든... 오늘 오전 드디어 샘플로 작성되어 있는 PLC 레지스터 정보를 읽어내고 쓰는데 성공했다.
주말2일, 하루는 어머니 병원다녀오고... 딱 3일 걸렸다.
%MW0, %MW100, %MX160, %MX0 주소가 이렇게 되어 있는 걸 값을 읽어야 하는데...
공부를 2일동안했다. PLC 주소체계랑, 모드버스TPC 통신 프로토콜...
초반에 LG산전 PLC통신 치면 XGT서버와 통신하는 것들이 나와서... 헤매고...
기본적으로 메모리 주소체계.
그리고 모드버스TCP통신 프로토콜에 대한 이해.
LG산전 PLC 메모리 주소체계 설명.
https://www.youtube.com/watch?v=BE5WZYjT8ZA
그리고 마지막으로...
https://www.youtube.com/watch?v=O580kTtpfNI
가끔 C#으로 이런저런거 하는 건 봤는데...
엄청나게 도움이 된다. 이걸 보려면... 주소체계나 프로토콜 이해가 필요하니...
순서에 상관없이 꼭 시청하면 될 듯 하다.
30일까지 프로젝트를 마무리 해야 해서... 내일부터는 라이브러리 코드 정리하고...
윈도우서비스로 데이타 수집하는 프로세스 만들고, 웹서비스로 모니터링한 데이타 뿌려주는걸.... 보름안에 해야 한다.
오늘 통신이 되어서 뭔가? 안도감이??? 나머진 쉬운거니까...
잘 구성해서... 1년에 두세개 정도 나온다니.. +_+;;; 밥값은 벌 수 있겠당.
'--- 취미 > 생각하기' 카테고리의 다른 글
MySQL . Windows 10 Pro에 설치??? (0) | 2023.12.12 |
---|---|
경축!! 민주당 대의원제 축소~!! (0) | 2023.12.07 |
가을이 되어 그런가? 머리속이 혼란스럽다... (0) | 2023.10.11 |
민주당 수박들 몰아낼 절호의 기회인데... (0) | 2023.09.25 |
모바일 개발은 더 쉽지 않구나... (0) | 2023.09.24 |
Action<Action<Action<string>>> 활용!!
공통 UI쪽 관련해서 조금 만지는 부분이 있는데...
코드를 아래와 같이 쓸수 있으면 어떨까? 라는 생각을 해봤다.
Call()( msg => msg( "x" ) );
Call() 호출하고 이어서 대리자로 연결된 메서드에 파라미터를 받아서 전달!!
UI를 다루면서 두가지 처리를 연속적으로 하게 되는 거였다.
UseFlowBodyPanel();
foreach( var data in ListDatas ) {
AddFlowBodyItem( data );
}
이런 식으로 처리하는 걸... 줄여서
UseFlowBodyPanel()( AddFlowBodyItem => foreach( var data in ListDatas ) AddFlowBodyItem( data ) );
실제 코드는 여러가지 조건들을 고려해서 조금 바뀌지만...위 처럼 갈 것이다.
다만 Call()은 테스트 코드로 작성했던것이기에... 기록으로 남겨두려 한다.
private Action<Action<Action<string>>> Call()
{
System.Diagnostics.Debug.WriteLine("Call!");
Action<Action<Action<string>>> returnMethodCall
= new Action<Action<Action<string>>>((msg)=> msg( Call_After ));
return returnMethodCall;
}
private void Call_After(string msg)
{
System.Diagnostics.Debug.WriteLine("Call_After!" + msg);
}
Action<string> 은 Call_After( string msg )와 연결되는 게 기본이니까 알겠는데...
연결지으려면 왜 Action<Action<...>> 으로 두개가 필요한건지는 잘 모르겠네...
찾는 방법은 Call() ( <-- 이렇게 코딩해놓고 vs에 표시되는 인자값이 Action<string> 인지 확인하였더니
Action<Action<...>> 이었다.
Action mth = s => console.Write( s ); 이런 형태로 Action이 빠지니까..
Call() 에서 리턴받은 object가 Action< Action < Action<string> > >
인데...
Action이 하나 빠지고
msg => msg( "x" )
msg는 Action<string> 이니까...
Action<Action<string>> 을 정의한거고...
.... 뭐래는겨......... 모르겠다 ㅠㅠ.
머리속에 맞춰지지 않는 퍼즐이 있는 것 같은 느낌... 아.. 싫어..
Action<Action<string>> mth1 = mthCall => mthCall("?");
mth1(Call_After);
---------------------------------------------------------------------------------
Action대신 Method로 바꿔 생각해보면...
Action< Action< Action<string > > >
Mth0( Mth1( Mth( string ) ) )
Mth0( Mth1( MethodName ) )
Call()( MethodName => MethodName( prms ) );
Action<string>
mth( string => string )
Action< Action<string > >
mth1( MethodName => MethodName( str ) )
Action< Action< Action<string > > >
mth0( mm => mm( MethodName ) )
Action<Action<Action<string>>> returnMethodCall
= new Action<Action<Action<string>>>((msg)=> msg( Call_After ));
-----> (msg)=> msg( Call_After )
이거 때문에 잠도 못잤네.
Call() ( 여기에서 왜? mth0이 사라지고 mth1이 대입되는거지??? ) : 두개가 벗겨지네...
Action<Action<Action<string>>> returnMethodCall = Call();
returnMethodCall( msg => msg("???") );
음... 실제 리턴받은걸 실행해보면... 위처럼 되네...?
어라... 뭐지?
Action<Action<Action<string>>> returnMethodCall
= new Action<Action<Action<string>>>((msg)=> msg( Call_After ));
returnMethodCall( 이자리는 Action<Action<string>> 타입이 들어와야 하니.. m => m("?") );
아... 이랬던가?
new로 대상을 지정하는 람다식과 대리자를 호출하는 부분에 차이때문에 내가 헷갈린건가...
아무렇지도 않게 사용하던거에... 정신이 나가버릴것 같네... 이제 이해가 된다...
'# 9) My Program(.NET) > PRJMNG' 카테고리의 다른 글
VS 확장 프로그램 2019 -> 2022 적용. (0) | 2024.06.08 |
---|---|
드디어 폰에... MAUI 배포. (0) | 2024.05.29 |
JSFW.PrivateKey 프로그램 업데이트. (0) | 2023.08.04 |
JSFW.FUNCTIONCONNECTION] 을 한번 더 업그레이드... (0) | 2022.12.29 |
JSFW.FunctionConnection] 업데이트 완료! (0) | 2022.12.24 |