rain2002kr의 등록된 링크

 rain2002kr로 등록된 티스토리 포스트 수는 148건입니다.

[안드로이드] 리싸이클러뷰 3 ( 클릭 리스너 등록하기) [내부링크]

안녕하세요. 훈츠 입니다. 리싸이클러뷰에 선택이 가능한 클릭 리스너와 tag 연결에 대해 포스팅 합니다. 리싸이클러 뷰 - 셀렉션 (아이템 선택을 위한 패키지) 안드로이드 리싸이클러뷰에서 지원하고 있는 리싸이클러 뷰 - 셀렉션 길게 터치할때만 다중선택 가능 합니다. 커스터 마이징이 제한됩니다. 추후, 기회가 된다면 포스팅 하도록 하겠습니다. bg_item.xml 추가 : 리싸이클러 뷰 체크시 배경화면 변경 Selector : View의 조건에 따라 xml을 참조하여 drawable 을 자동으로 변경해 줌. 색상을 바꿀수 있는 xml 파일을 drawable 폴더에 추가 아이템 상태를 이용해 기능을 추가 : true or false 1 2 3 4 5 6 7 //훈스 블로그----------------..

[C++] C++ 11일차 상속 3 [내부링크]

안녕하세요. 훈츠입니다. 금일은 클래스간 관계와 생성자 상속과 호출에 대해 정리 해보도록 하겠습니다. 클래스 관계 설정 ( 클래스 계통도 ) is - a 관계 ( 상속 ) 접근 지정자를 통한 상속 관계 has - a 관계 다른 클래스를 멤버로 가지고 있는 관계 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 //훈스 블로그---------------------------------------------------------------------------------------------------코드// class A { public: void Print() { cout cs 생성자 상속과 호출 기본 생성자는 상속되지 않는다. 생성자에 매개변수가 있는 경우, 파생 클래스에서 상..

[안드로이드] 리싸이클러뷰 2 ( 레이아웃 Manager ) [내부링크]

안녕하세요. 훈츠 입니다. 안드로이드 정말 많이 사용되어 지는 리싸이클러 뷰2 포스팅 합니다. 이번 시간에는 리싸이클러뷰의 layoutManager에 대해 포스팅 합니다. 리싸이클러 뷰 레이아웃 Manager 리싸이클러뷰 에서는 레이아웃 Manager 만 교체 해주면 다른 레이아웃 형태를 View로 나타낼수 있습니다. 레이아웃 종류 리니어 레이아웃 (LinearLayoutManager (this, 화면방향 : RecyclerView.VERTICAL , false) ) 그리드 레이아웃 (GridLayoutManager (this, 열 갯수 : 2 ) ) 스테거드 레이아웃 (StaggeredGridLayoutManager ( 열 갯수 : 2, 화면방향 : RecyclerView.VERTICAL ) ) 코드 ..

[안드로이드] 리싸이클러뷰 1 [내부링크]

안녕하세요. 훈츠 입니다. 안드로이드 정말 많이 사용되어 지는 리싸이클러 뷰를 3회에 걸처 정리 포스팅 합니다. 리싸이클러 뷰(recyclerView) : RecyclerViewAdpter = UserAdapter (UserViewModel , ContainerView) 스피너와 다르게, Adapter와 ViewHolder를 직접 구현해 줘야 합니다. 순 서 RecyclerView download 버튼 이용, 혹은 dependency 추가 RecyclerView drag and drop to Activity RecyclerView ID 할당 RecyclerView 에 표시할 itemView.xml 만들고 item에 ID 할당 (자체에 ID 할당은 필요 없음) Data Class 만들기 Data View ..

[C++] C++ 10일차 상속 2 [내부링크]

안녕하세요. 훈츠입니다. 금일은 클래스간 상속시 접근 지정자가 어떻게 동작 하는지 정리 해보도록 하겠습니다. 파생 클래스에서 기본 클래스에 대한 접근 권한 [ 기본 클래스 멤버 속성 ] A class B class : public A B : protected A B : private A private 사용 불가 사용 불가 사용 불가 protected private 사용 private 사용 private 사용 public public 사용 private 사용 private 사용 private 멤버 : 사용 불가 protected : private 로 사용 public : public 및 private 로 사용 ※ 코드 예시 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1..

[안드로이드] 스피너3 (콤보박스) with Mutable list [내부링크]

안녕하세요. 훈츠 입니다. 안드로이드 스피너(콤보박스) 에 MutableList 를 적용하는 방법에 대해 포스팅합니다. 스피너 (spinner) : SpinnerAdpter = ArrayAdater : AdapterView 스피너 2편에 이어, dataArray 가 아닌 MutableList 를 적용 하는 방법입니다. 동적으로 리스트를 변경할때 사용하시면 됩니다. 1편과 2편을 참조 하시면 어떻게 구성하는지 알테니 코드만 공유 하도록 하겠습니다. 코드 실행 화면 https://youtu.be/vrxRQSZpCM8

[안드로이드] 스피너2 (콤보박스) with 모델클래스 [내부링크]

안녕하세요. 훈츠 입니다. 안드로이드 스피너(콤보박스) 에 모델 클래스를 적용하는 방법에 대해 포스팅합니다. 스피너 (spinner) : SpinnerAdpter = ArrayAdater : AdapterView 스피너 1편에 이어, dataArray 가 아닌 ModelClass 를 적용 하는 방법입니다. ModelClass 만드는 방법과 적용시 유의 사항에 대해 말씀 드리겠습니다. 순 서 ModelClass.kt 만들기 Model Class 에 toString 함수를 override 하여 Spinner에서 최초로 선택하고 보여줄 값을 설정 합니다. dataArray type 으로 제너릭 선언 후, dataArray 를 arrayAdapter에 할당합니다. arrayAdapter 를 제너릭 선언 합니다...

[안드로이드] 스피너 (콤보박스) [내부링크]

안녕하세요. 훈츠 입니다. 안드로이드 스피너(콤보박스) 조작하는 기본적인 방법에 대해 포스팅 합니다. 스피너 (spinner) : SpinnerAdpter = ArrayAdater : AdapterView 스피너는 배열이나 리스트 또는 데이터베이스 등에서 가져온 데이터 목록을 화면에 보여주고 사용자의 선택을 받는 UI 입니다. 목록을 표시 하기 위해서는 데이터를 직접 Spinner 에 할당 하지 않고 데이터를 관리하는 SpinnerAdpter 에 Adapter 를 할당 해야 합니다. Spinner Adpter 는 데이터의 전체 목록 중에서, 화면에 표시할 목록의 View를 Spinner에 제공해주는 역활을 합니다. 전체 데이터를 모두 Spinner에 직접 할당할 경우 메모리 사용량과 속도에 문제가 생기기..

[C++] C++ 9일차 상속 1 [내부링크]

안녕하세요. 훈츠입니다. 금일은 상속에 대해 정리 해보도록 하겠습니다. 상속 (inheritance) 기본 클래스의 속성을 물려 받는것을 상속이라고 합니다. 상속을 받는 클래스를 자식 클래스라고 부르며, 상속을 해주는 클래스를 부모 클래스라고 부릅니다. 자식 클래스에서는 부모 클래스의 속성을 그대로 사용할수도 있고, 새로운 기능을 추가 할수도 있습니다. 상속을 해주는 클래스 : base class, super class, parent class , 최상위 클래스 라고 불립니다. 상속을 받는 클래스 : sub class, child class, 자식 클래스, 하위클래스, 최화위 클래스 라고 불립니다. ※ 형식1 (단일 상속) 1 2 3 4 5 6 7 8 9 10 //훈스 블로그----------------..

[C++] C++ 9일차 클래스 3 생성자, 소멸자, this [내부링크]

안녕하세요. 훈츠입니다. 금일은 클래스의 생성자와 소멸자 그리고this 키워드에 대해 정리 해보도록 하겠습니다. 생성자 (constructor) 객체가 생성될때 명시 하지 않아도, 자동으로 호출되는 함수 이다. 객체를 초기화하는 함수 이다. public 속성을 가진다. 소멸자 (destructor) 객체가 소멸될때 명시 하지 않아도, 자동으로 호출되는 함수 이다. 객체가 메모리 해제가 될때 호출 하는 함수 이다. 생성자와 동일하게 클래스명과 같은 이름의 함수이며, '~' 를 소멸자 앞에 붙인다. public 속성을 가진다. #include #include using namespace std; class Spoint { protected: int m_nX, m_nY; public : //생성자 Spoint..

[Kotiln] 안드로이드 죽지 않는 서비스 사용하기 (라이프 싸이클 이용) [내부링크]

안녕하세요. 훈츠 입니다. 안드로이드의 죽지 않는 서비스 구현 하는 방법 입니다. 앱의 런닝 상태인지, 혹은 UI 가 안보이는 상태인지 APP 이 꺼졌는지 확인할수 있는 방법에 대해 포스팅 합니다. Android Jetpack - Lifecycle Livecycle: Lifecylce을 나타내는 객체입니다. LivecycleOwner: Activity객체를 말하며 Lifecycle객체에 액티비티 상태를 제공해줍니다. LifecycleObserver: Lifecylce로부터 액티비티 상태변화에 대한 이벤트를 받습니다. LifecycleOwner, Lifecycle LifecycleOwner는 Activity를 의미하고, 내부에 Lifecycle을 갖고 있습니다. Lifecycle은 액티비티의 상태를 저장하..

[안드로이드] Radio 버튼 & Check 박스 [내부링크]

안녕하세요. 훈츠 입니다. 안드로이드 Radio 버튼 과 Check 박스버튼을 조작하는 기본적인 방법에 대해 포스팅 합니다. 라디오 버튼 (Radio button) : RadioGroup. 그림과 같이 라디오 그룹안에 라디오 버튼을 넣는 방식으로 구성 가능합니다. 라디오 버튼 뿐만 아니라, 안드로이드에서 제공 해주는 View를 사용 할때 어떤 리스너를 상속받아야 하는지 아는것도 중요합니다. 라디오 그룹 아이디 할당 라디오 버튼 아이디 각각 할당 익명객체에 RadioGroup 상속 // 아래와 같이 옵저버 패턴에 익명 함수를 통해서 익명 클래스를 구현하여 사용 할수있습니다. colorOptionGroup.setOnCheckedChangeListener(object : RadioGroup.OnCheckedC..

[C++] C++ 8일차 클래스 2 접근지정자(public, private , protected ) [내부링크]

안녕하세요. 훈츠입니다. 금일은 클래스 접근지정자에 대해 정리 해보도록 하겠습니다. 접근 지정자 (public, private, protected) 외부에서 클래스의 멤버에 접근하여 사용할 수 있는 권한을 제한하는 역활 class 에서 접근 지정자를 사용하지 않은 멤버들은 기본적으로 private가 적용 접근 지정자의 적용 범위는 다음 접근 지정자가 나올 때까지이다. public 외부에서 모든 멤버에 접근하여 멤버 함수 호출 및 변수의 사용이 가능 합니다. #include #include using namespace std; class Spoint { public : int m_x, m_y; void Print() { cout

[Kotiln] 유저가 View 만드는 코드 [내부링크]

View 만드는 코드 Kotiln code open class InfoView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : LinearLayout(context, attrs, defStyleAttr){ init { View.inflate(context, R.layout.view_info, this) } } info_view.xml code AlarmInfoView.kt class AlarmInfoView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) :..

[Kotiln] 앱 띄울때 시스템 UI를 숨기고 전체화면 표시 [내부링크]

안드로이드 앱을 띄우는 Window의 속성을 변경하여 시스템 UI를 숨기고 전체화면으로 표시하는 코드 window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LOW_PROFILE or View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION

[Kotiln] handler and runnable [내부링크]

안녕하세요. 훈츠 입니다. hanlder 와 runnable 간단하게 메모하고 갑니다. var handler : Handler? = null var runnable : Runnable? = null //Runnable이 실행되면 ListActivity로 이동하는 코드 runnable = Runnable { val intent = Intent(applicationContext, ListActivity::class.java) startActivity(intent) } //Handler 를 생성하고 2초후 runnable을 실행 handler = Handler() handler?.run{ postDelayed(runnable, 2000) }

that is being built with jvm target 1.6. please specify proper '-jvm-target' option 에러가 뜬다면!! [내부링크]

안녕하세요. 훈츠 입니다. File-settings안의 kotlin compiler 안의 target JVM version 1.8 로 바꿔줍니다. 이래도 안되면, 껐다 켜시고 그래도 안되면 빌드(앱)에 다음을 추가 해주세요. android { kotlinOptions{jvmTarget ="1.8"} }

[Kotiln] Work Manager [내부링크]

안녕하세요. 훈츠 입니다. 금일은 Work Manger 대해 포스팅 합니다. Work Manager에 대한 내용은 다른 블로그나 개발자 홈페이지에 잘나와있으니, 간단하게 사용법에 대해 기록합니다. Work Manager 비동기 1회성 작업 또는 주기적으로 실행되는 작업을 예약 할수 있습니다. 네트워크 가용성 또는 충전 상태 같은 작업에 대한 제약 조건을 추가 할수 있으며, 작업을 순차적으로 실행 시키는 체이닝 또한 가능합니다. WorkManager 는 앱 프로세스가 사라지더라도 안전하게 종료되어야 하는 진행 중인 백그라운드 작업 또는 즉시 실행해야 하는 작업을 대상으로 하지 않습니다. 사용법 정리 Dependency 추가 Worker 만들기 WorkRequest 만들기 제약 걸기 시간 예약 기타.. Wo..

[안드로이드] Image View 이미지 뷰 [내부링크]

안녕하세요. 훈츠 입니다. 안드로이드 이미지 View를 조작하는 기본적인 방법에 대해 포스팅 합니다. 이미지 뷰 (Image View) Image View에는 'Drawable' 이라는 리소스를 표시 할수 있습니다. 안드로이드에서는 화면에 그릴수 있는 모든 종류의 그래픽 리소스를 통칭하여 드로어블 (Drawable) 이라고 부릅니다. 이미지 파일 포맷 (BitMap Drawable) Image View 속성 ImageView.setImageResource(Drawable 의 ID) 이미지 뷰의 소스를 지정 합니다. scaleType 이미지뷰의 영역내에서 이미지를 스케일하는 방식을 지정 (8 가지 방식) *원본이미지(소스), 배경이미지(이미지뷰) center : 소스 크기를 중심으로 배치하고, 이미..

[C++] C++ 8일차 클래스 1 [내부링크]

안녕하세요. 훈츠입니다. 금일은 클래스에 대해 정리 해보도록 하겠습니다. 클래스 (Class) 사용자가 정의 하며, 변수와 함수로 구성이 가능 합니다. class 키워드를 선언 하면 객체(object)가 됩니다. 객체 정의를 위한 키워드 입니다. 구성 : 변수 와 함수 기본 형식 class 클래스 명 { 멤버 리스트 (변수와 함수) }; 멤버 리스트에 변수 선언시 관례적으로 변수 앞 'm_' 를 붙입니다. 사용 예시 ※ 클래스 선언 ( 함수 바디 포함 ) #include #include using namespace std; class Spoint { int m_x, m_y; void Print() { cout

[C++] C++ 7일차 메모리2 : new and delete 포인터2 [내부링크]

안녕하세요. 훈츠입니다. 금일은 어제에 이어 포인터 2편을 이어가겠습니다. C 언어의 포인터 강좌와 같은 부분이 너무 많아서 이전 포스팅 붙여 넣습니다. https://rain2002kr.tistory.com/152?category=382972 [C] C언어 7일차 포인터2 안녕하세요. 훈츠 입니다. 포인터 정복을 해보려고 합니다. 천천히 보시죠. 포인터의 종류와 의미 포인터 (*****) , int *pPtr; : int형 메모리 주소를 저장하는 변수 선언 포인터 배열 (****) , int*pPtr[3]; : 3.. rain2002kr.tistory.com 목 차 이중 포인터 (**) , int **pPtr; : int *형 메모리 주소를 저장 하는 변수 선언 구조체 포인터 (**), DATA *pP..

[Kotiln] 코틀린 전체 소개 [내부링크]

안녕하세요. 훈츠 입니다. 안드로이드 View를 조작하는 기본적인 방법에 대해 포스팅 합니다. 안드로이드 Extension 패키지 Java 에서 findviewId 를 통해 view 를 찾았던것을, extension 패키지로 인해서 하지 않아도 됩니다. 자동 완성 기능 자동 픽스 기능 옵저버 패턴 & 익명 함수 https://rain2002kr.tistory.com/80?category=361958 [Kotlin] 코틀린 옵저버 패턴 리스너 안녕하세요. 훈츠 입니다. 오늘은 코틀린에서 광범위하게 사용되는 옵저버 패턴을 구현 하는 방법에 대해 설명 드리겠습니다. 옵저버 패턴을 구현하는 방법은 두가지 입니다. 한가지는 인터페이스를 상속하는 방법.. rain2002kr.tistory.com 글을 한번 읽어 보..

[안드로이드] View 조작하기 [내부링크]

안녕하세요. 훈츠 입니다. 안드로이드 View를 조작하는 기본적인 방법에 대해 포스팅 합니다. 안드로이드 Extension 패키지 Java 에서 findviewId 를 통해 view 를 찾았던것을, extension 패키지로 인해서 하지 않아도 됩니다. 자동 완성 기능 자동 픽스 기능 옵저버 패턴 & 익명 함수 https://rain2002kr.tistory.com/80?category=361958 [Kotlin] 코틀린 옵저버 패턴 리스너 안녕하세요. 훈츠 입니다. 오늘은 코틀린에서 광범위하게 사용되는 옵저버 패턴을 구현 하는 방법에 대해 설명 드리겠습니다. 옵저버 패턴을 구현하는 방법은 두가지 입니다. 한가지는 인터페이스를 상속하는 방법.. rain2002kr.tistory.com 글을 한번 읽어 보..

[C++] C++ 6일차 메모리1 : new and delete 포인터1 [내부링크]

안녕하세요. 훈츠입니다. 금일은 C 언어 에서 동적 메모리 할당에 해당하는, malloc 과 free 함수에 대체되는 new 와 delete 키워드에 대해 포스팅 해보겠습니다. C 언어의 포인터와 메모리 할당 해제 관련글을 한번 보고 오시는것도 좋습니다. https://rain2002kr.tistory.com/150?category=382972 [C] C언어 6일차 포인터 안녕하세요. 훈츠 입니다. 이번 시간에는 포인터에 대해 정리 해보려고 합니다. 어렵게 느껴졌는데 차근차근 정리 해보니 정리가 되네요. 같이 한번 보시죠. 포인터 메모리 에서 데이터를 읽어오는 방법 메모리.. rain2002kr.tistory.com 포인터의 사용 방법과 포인터 접근 하는 방법 모두 동일 합니다. 하지만 동적 메모리 할당..

[Kotlin] Coroutine 코루틴 [내부링크]

안녕하세요. 훈츠 입니다. 금일은 코루틴에 대해 포스팅 합니다. Kotlin 코루틴 코루틴을 사용하여, 비동기 코드를 작성할수 있습니다. 코루틴에 대한 자세한 설명은 개발자 페이지를 참조하세요. 사용법 정리 Dependency 추가 코루틴 스코프의 종류 ViewModelScope LifecycleScope liveData Dependency 추가 dependencies { def lifecycle_version = "2.2.0" def arch_version = "2.1.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" // LiveData implementation "androidx...

[안드로이드] 레이아웃 [내부링크]

안녕하세요. 훈츠 입니다. 안드로이드 레이아웃에 대해 포스팅 합니다. DP 와 SP 개념 DP density-independent pixels density : 같은 면적에 포함되어 있는 물리적인 픽셀의 밀도 independent pixels : 독립적인 크기를 가진 픽셀 단위 디스플레이 해상도 '160dpi*' 를 기준으로 디스플레이 해상도가 높아질수록 알아서 UI를 스케일링 해줍니다. SP scale-independent pixels SP 는 DP와 개념이 같지만 글꼴에 적용하기 위해 만들어진 단위 SP 를 사용한 글꼴은 안드로이드 OS의 설정에서 영향을 받습니다. 텍스트에는 SP 사용 추천합니다. ConstraintLayout 제약 조건 View 의 표시 영역 ※ 제약조건 사용시 tip 은 기본적으..

[C++] C++ 5일차 표준 입 출력 : cin.get 함수 cin.getline 함수 [내부링크]

안녕하세요. 훈츠입니다. 금일은 C++ 표준 입출력 std::cin.get() 함수와 cin.getline() 함수에 대해 포스팅 해보겠습니다. cin.get 과 cin.getline 함수 header : fstream fstream 을 포함 해야, 다음 함수를 사용 할수 있습니다. namespace : std cin.get 은 한문자만 받을때 사용 합니다. cin.getline 은 공백 포함 문자열을 받을때 사용합니다. #include #include using namespace std; int main() { // cin.get 함수 char char1; cout

UI 관련 Tips and Trick [내부링크]

안녕하세요. 훈츠 입니다. UI 관련 Tips and Trick 포스팅 합니다. 1. Dependency 추가 implementation "com.google.android.material:material:1.1.0" 2. Style 변경 3. ConstraintLayout View 들의 위치 지정시 위처 정보의 네점은 parent로 두고, Vertical_bias 혹은 Horizontal_bias로 조정 합니다. View 의 위치를 자석으로 붙일때는 Top_toBottomOf 를 이용합니다. View 의 text size 지정시, textAppearance 를 이용 합니다. = Headline, Body, Display ... View 의 xml 화면 에서 글씨를 미리 보려면, tools:text ="..

Live Data + View Model + Data Binding 설명 [내부링크]

안녕하세요. 훈츠 입니다. 금일은 Live Data 와 View Modle 그리고 데이터 바이딩 실습에 대해 포스팅 합니다. 실습 순서 Dependency 추가 Model class, ViewModel (LiveData object) 만들기 .XML DataBinding Setting DataBindingUtil 이용 해서 setContentView 하기 ViewModel 인스턴스 만들고 Data Binding object 에 assign 후 Data Binding object 에 라이프싸이클 set 하기 1. Dependency 추가 현재 최신 버전 이며, 추후는 안드로이드 AndroidX 에 배포 노트를 확인 하시면 됩니다. 1 2 3 4 5 6 7 8 apply plugin: 'kotlin-kapt..

[안드로이드] 뷰 View [내부링크]

안녕하세요. 금일은 뷰 내용에 대해 포스팅 합니다. View 뷰 실제 화면에 보이는 View View 의 종류 ImageView (파생) ImageButton TextView(파생) EditText : 편집 가능한 텍스트 박스 Button(파생) : 텍스트가 표시되는 버튼 RadioButton : 그룹 중 하나만 선택하는 버튼 CheckBox : 그룹에서 여러개를 선택하는 버튼 Switch : 스위치 모양으로 on/ off 를 하는 버튼 ViewGroup(파생) : View 들을 묶어 표시하는 View 레이아웃 계열 LinearLayout : 가로 또는 세로로 순서대로 View 들을 나열 ConstraintLayout : 여러가지 방법으로 View를 자유롭게 나열 리스트 계열 RecyclerLayout ..

[C++] C++ 4일차 표준 입 출력 : std::cout , endl, cin [내부링크]

안녕하세요. 훈츠입니다. 금일은 C++ 표준 입출력 std::cout, std::endl, std::cin 과 using 에대해 포스팅 해보겠습니다. 표준 입출력 라이브러리 클래스 헤더와 namespace header : iostream (C 언어의 같은 head file의 라이브러리) namespace : std std::cout (출력) 추출 연산자 (extraction operator) : 입력된 데이터를 바이트 단위로 가져오는 역활 cin >> 변수 using std 를 생략 할수 있는 키워드 using 입니다. 유효 범위 안의 함수를 사용할 때 namespace 명 없이 사용하는 역활 사용법 : using namespace std 전역, 지역으로 사용 가능합니다. 실습 int main() { i..

[Live Data] 안드로이드 라이브 데이터 1 [내부링크]

안녕하세요. 훈츠 입니다. Room Database 와 Realm Database 학습 하면서 라이브 데이터 관련하게 나와서 학습 하는김에 정리 해봅니다. 라이브 데이터 사용시 키 포인트 View Model 안에서 다음과 같이 구성 Live Data get() = Mutable Live Data Activity 혹은 Fragment 안에서 viewModel 가져오고 observer할 view 지정 viewModel.LiveData.observe (this , Observer { Change UI } ) 뷰모델 안에 라이브 데이터 생성 on Create() Observer 에서 UI 연결 다른 곳에서 라이브데이터 변경시 LiveData 개요 LiveData는 식별 가능한 데이터 홀더 클래스입니다. 식별 가..

[MVVM] ViewModelProviders.of() deprecated [내부링크]

안녕하세요. 훈츠 입니다. ViewModel ViewModelProviders.of() deprecated 되어서 다른 방식으로 하는 방법 포스팅 합니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 //Hoons Blog---https://rain2002kr.tistory.com------------------------------------------------------------------코드/// lateinit var viewModleFactory: ViewModelProvider.AndroidViewModelFactory private lateinit var contactViewModel : ContactViewModel //fragment 에서 받을때 viewMod..

[안드로이드] 액티비티 Activity [내부링크]

안녕하세요. 금일은 액티비티에 대한 내용에 대해 포스팅 합니다. Activity 액티비티 안드로이드 시스템에 의해 관리 되어지며, 사용자가 호출을 요청할수 있습니다. 시스템에 의해 관리 되어지는 액티비티는 생명주기가 있습니다. 물론 이 생명 주기로인해 데이터를 보존 하기 위해 지금도 배우기 위해 애쓰고 있는 LiveData 나 ViewModel 같은 것이 있습니다. onCreate() : activity 생성시 단 한번만 호출 되므로 공통적으로 사용되는 변수의 초기화, UI 의 초기값 설정 onStart() : activity 가 가려졌다 돌아올때, 혹은 완전히 전환되는 경우에 onStart와 onResume 차례로 동작 onResume() : 다른화면에서 입력받은 내용을 통해 바뀔 수있는 데이터를 초기..

[C++] C++ 3일차 표준 입 출력 : Namespace [내부링크]

안녕하세요. 훈츠입니다. 금일은 C++ 표준 입출력 라이브러리 클래스 헤더와 namespace 에대해 포스팅 해보겠습니다. 표준 입출력 라이브러리 클래스 헤더와 namespace header : iostream (C 언어의 같은 head file의 라이브러리) namespace : std namespace C++ 언어는 심볼(변수, 함수, 클래스)를 굉장히 많이 제공해주기 때문에, 충돌 방지를 위해서 namespace 라는 기능을 제공 합니다. :: (스코프 연산자) 범위 확정 연산자이며 보통 스코프 연산자라고 합니다. the scope-resolution operator #include namespace X { int a; int b; } namespace Y { int a; int b; } int m..

[안드로이드] 안드로이드 시스템 Gradle [내부링크]

안녕하세요. 금일은 안드로이드 스튜디오 툴에 대한 내용에 대해 포스팅 합니다. 그레들 : Gradle 프로젝트에 포함된 파일과 그에 연관된 모듈들을 링크하여 앱을 컴파일하는 빌드 시스템입니다. 프로젝트에 포함되는 모듈이 추가되거나 변경될 때마다 Gradle에 의한 sync 과정이 발생합니다.

[C++] C++ 2일차 데이터형과 변수 [내부링크]

안녕하세요. 훈츠 입니다.금일은 C++ 데이터형과 변수에 대해 알아보고 새로운 기능에 대해 포스팅 해보겠습니다. 불형 : bool size : 1 byte false, true int main() { bool bData=7; //0 이외의 int값은 모두 true 입니다. printf("bool 크기 %d 값%d, true=%d, false=%d \n", sizeof(bData),bData, true, false); } 열거형 참조 해보세요. https://rain2002kr.tistory.com/155?category=382972 [C] C언어 8일차 기타 문법1 (enum, goto, label, union, 전처리기 지시문) 안녕하세요. 훈츠 입니다. 드디어 앞으로 한번만 더 정리하면 C언어 문법을..

[MVVM] ROOM Database 정리 [내부링크]

안녕하세요. 훈츠 입니다. 금일은 ROOM에 대해 정리해 보도록 하겠습니다. MODEL - VIEW - VIEW MODEL : MVVM Dependency 추가 ROOM 생성 (Contact(Entity), ContactDao, ContactDatabase) Repository 생성 (main Thread 접근 불가 하기 때문에, 별도의 Thread 생성) ViewModel 생성 (Application context를 사용하기 위해 Application을 인자로 받는다. 이유: 메모리릭 발생가능성) Activity or Fragment 설정 ( ViewModelProViders 를 이용해 get, observe 로 만들어서 생명주기 관찰을 정함) RecyclerView 설정 (xml, Adapter) 1..

안드로이드 앱 종료 방법 [내부링크]

안녕하세요. 훈츠 입니다. 금일은 앱을 종료 하는 방법에 대해 포스팅 합니다. finishAffinity() ActivityCompat.finishAffinity(this); System.runFinalizersOnExit(true); System.exit(0); // only API 16+ activity.finishAffinity(); // support library v4 ActivityCompat.finishAffinity(activity);

TODO 사용 하기 [내부링크]

안녕하세요. 훈츠 입니다. 금일은 TODO 에 대해 포스팅 합니다. TODO 사용법 : //TODO 내용 작업을 해야 하거나, 마킹 하고 싶은곳에 //TODO "내용 삽입" 합니다.

[안드로이드] 안드로이드 시스템 [내부링크]

안녕하세요. 훈츠 입니다. 금일은 안드로이드 시스템에 대해 포스팅 합니다. 안드로이드 시스템 아키텍처 리눅스 시스템 위에, C와 C++ 코드로 이루어진 그래픽, 브라우저, 미디어, Database... 와 안드로이드 가상머신과 함께 안드로이드 API Framework 위에서 시스템 앱과 유저 앱이 Running 됩니다. View System 눈에 보이는 기능 및 UI를 제공 하는 View System 입니다. Content Providers 앱간에 데이터들을 주고 받기 위해서, 데이터 형식을 등록합니다. Managers Activity Manager : 앱들이 가진 화면들을 관리 Location Manager : 단말기의 위치정보를 관리 Package Manager : 설치된 앱들을 관리 Resource..

[C++] C++ 1일차 C VS C++ 차이점 [내부링크]

안녕하세요. 훈츠 입니다. 금일 부터 C++ 언어 정주행 시작 합니다. C언어와 마찬가지로 전체적 완주 한적이 없어서 이번 기회에 완주 하려고 하니 모두 같이 시작해 보셨으면 좋겠네요. C 언어에서 편리하게 추가된 키워드 C 언어 기본 데이터형(int, double...) + bool 형 C 와 C++ 공통 개념 배열 포인터 메모리 동적 할당 C 언어 : malloc, free C ++ : new, delete 객체 -> 클래스 구조체 함수 변수와 상수 C 언어의 기본 키워드와 개념에서 확장 되었으며, 구조체, 함수, 변수와 상수를 묶어 클래스를 만들고 그 클래스를 가지고 인스턴스를 만드는 객체지향 개념이 추가 되었습니다.

[PROSAVE] SIEMENS HMI 공장 초기화 하는 방법 [내부링크]

안녕하세요. 훈츠 입니다. 이번 시간에는 SINAMIC V90 서보 드라이브에 대해 포스팅 합니다. 링크를 클릭 하시면 바로 해당 메뉴얼을 다운 받으실 수 있습니다. DT Configurator V90 및 지멘스 드라이브를 SELECTION 할수 있는 DT Configuration 입니다. 온라인으로 작업 할수있습니다. https://mall.industry.siemens.com/spice/jom/jom/ https://mall.industry.siemens.com/spice/jom/jom/ mall.industry.siemens.com V90 서보 드라이브 구성 200V 와 400V Version이 있습니다. 드라이브 명판 V90 드라이브 국문 메뉴얼 (GSG , OPI) GSG : getting st..

[SINAMICS V] SIEMENS SINAMICS V90 Drive [내부링크]

안녕하세요. 훈츠 입니다. 이번 시간에는 SINAMIC V90 서보 드라이브에 대해 포스팅 합니다. 링크를 클릭 하시면 바로 해당 메뉴얼을 다운 받으실 수 있습니다. DT Configurator V90 및 지멘스 드라이브를 SELECTION 할수 있는 DT Configuration 입니다. 온라인으로 작업 할수있습니다. https://mall.industry.siemens.com/spice/jom/jom/ https://mall.industry.siemens.com/spice/jom/jom/ mall.industry.siemens.com V90 서보 드라이브 구성 200V 와 400V Version이 있습니다. 드라이브 명판 V90 드라이브 국문 메뉴얼 (GSG , OPI) GSG : getting st..

LocationManager 이용 해서 기기 위치 정보 가져 오기 [내부링크]

안녕하세요. 훈츠 입니다. 안드로이드 단말에 위치 정보를 가져오는 방법을 정리 합니다. LocationManager 위치 정보를 위도, 경도로 가져올 수 있습니다. 기기의 GPS 모듈 이용 통신사의 기지국 정보 (NetWork) 이용 권한 설정 manifest 에 권한을 설정 합니다. ...이하 생략 권한 요청 및 확인 함수 introActivity 를 이용 해서, 최초 권한을 얻고 확인 하는 함수를 구현합니다. class IntroActivity : AppCompatActivity() { var handler : Handler? = null var runnable : Runnable? = null //권한 요청시 권한 Activity에 전달할 고유 코드(상수) 추가 companion object { p..

AlertDialog 와 SnackBar [내부링크]

안녕하세요. 훈츠 입니다. AlertDialog 와 SnackBar 사용법 정리 합니다. AlertDialog AlertDialog.Builder(this).setTitle("최초 타이틀") .setMessage("안내 메시지를 넣는곳 입니다.") .setPositiveButton("Yes 버튼", DialogInterface.OnClickListener { dialog, which -> //코드 삽입 하면 됩니다. }) .setNegativeButton("No 버튼", DialogInterface.OnClickListener { dialog, which -> //코드 삽입 하면 됩니다. }) .show() //람다식 이용시 AlertDialog.Builder(this).setTitle("최초 타이틀")..

인텐트 이동 및 간단한 사용법 [내부링크]

안녕하세요. 훈츠 입니다. 인텐트 사용법 정리 합니다. 인텐트 띄우기 //보내는쪽 val intent = Intent(applicationContext, ListActivity::class.java) intent.putStringExtra("MEMO_ID", "memo_id") startActivity(intent) startActivityForResult(intent, 100 ); //request 값을 넣을수도 있습니다. //받는쪽 val intent = getIntent() val memoId = intent.getStringExtra("MEMO_ID") setResult(RESULT_OK,intent) finish();

안드로이드 위험 권한 요청 및 권한체크 [내부링크]

안녕하세요. 훈츠 입니다. 안드로이드 권한 요청 및 얻기에 대한 정리 입니다. 권한 설정 Manifest 등록 하기 ...이하 생략 권한 확인 ContextCompat.checkSelfPermisson() 메서드 이용해서 권한 확인을 합니다. int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permisson.SMS_READ) == PackageManager.PERMISSION_GRANTED ContextCompat.checkSelfPermission() 메서드는 권한이 있는 경우, PERMISSION_GRANTED를 반환하고 없는 경우는 PERMISSION_DINIED를 반환 합니다. 권한 요청 ActivityCompat.sh..

[S7 F] Safety 프로그래밍 유의 사항 [내부링크]

안녕하세요. 훈츠 입니다. 금일은 Safety 프로그램시 유의 사항에 대해 포스팅 합니다. https://support.industry.siemens.com/cs/document/19183712/what-should-you-do-if-the-f-cpu-goes-into-stop-mode-and-the-message-data-corruption-in-the-safety-program-appears-in-the-diagnostics-buffer-?dti=0&lc=en-WW 불러오는 중입니다... Main safety block Data buffer 및 MainSafety 는 OB35 에서 주기적으로 처리 해야 합니다. 위와 같이 HMI 파트와 통신 하는 부분의 DB를 다이렉트로 Safety block 에다가..

[C] C언어 9일차 파일 입출력 [내부링크]

안녕하세요. 훈츠 입니다. 금일은 파일 입출력에 대해 알아보도록 하겠습니다. C, C++ 동일하게 사용된다고 하니 이번기회에 잘 정리해 놓으면 편할듯 싶네요. 파일 입출력 종류 공통점 : 0과 1로 저장된 이진 데이터 차이점 : 저장하는 방식과 읽는 방식 텍스트 파일 입출력 아스키 코드 값으로 저장 되는 파일 이진 파일 입출력 binary 파일 파일 입출력 함수 파일 형식과 상관없이 공용으로 사용하는 함수 FILE *open( const char *filename, const char *mode ); int fclose( FILE *stream ); int feof( FILE *stream ); int fscanf( FILE *s, const char *format, argument... ); int f..

[C] C언어 8일차 분할 컴파일 [내부링크]

안녕하세요. 훈츠 입니다. 분할 컴파일에 대해 정리해 보도록 하겠습니다. 지금 까지 main.c 파일 내에서 실습을 해왔는데요. 구조적 프로그램을 구성하기 위해서는 기능과 용도에 맞게 프로그램을 분리하고 만드는 작업이 필요합니다. 이때 필요한 것이 바로 분할 컴파일 개념 입니다. 분할 컴파일 여러 변수와 함수를 기능별로 구분하여 외부 파일에 저장한 후에 필요에 따라 main()에서 호출하여 컴파일 하는 방법 입니다. 파일 추가 .c 함수 및 변수 헤더 파일 추가 .h 함수의 원형 선언 #include "xx.h" 전역 변수를 외부에서 사용 하는법

[C] C언어 8일차 기타 문법2 (지역, 전역, 정적 변수 사용 범위) [내부링크]

안녕하세요. 훈츠 입니다. 지역 변수, 전역 변수, 정적 변수에 대해서 정리해 보도록 하겠습니다. 변수의 사용 범위 구분 선언 범위 구분(사용 가능) 생성 시기 소멸 시기 지역 변수 함수 안 함수 안 함수 호출 함수 종료 전역 변수 함수 밖 프로젝트 전체 Prog. 실행 Prog. 종료 정적 변수 함수 안,밖 선언된 함수안 or 해당 file 함수 or Prog Prog. 종료 지역 변수 (local variable) 함수 안에서 선언 하고, 함수 안에서만 사용 가능 합니다. 함수 호출시 생성되고, 함수 종료시 소멸됩니다. 초기값 : 이전 메모리에 남아 있던 임의의 값으로 초기화 전역 변수 (globla variable) 함수 밖에 선언 후, 프로젝트 전체에서 사용 가능 합니다. 프로그램 실행시 생성되고..

[C] C언어 8일차 기타 문법1 (enum, goto, label, union, 전처리기 지시문) [내부링크]

안녕하세요. 훈츠 입니다. 드디어 앞으로 한번만 더 정리하면 C언어 문법을 마무리 하게 되었습니다. 사전 지식이 있어서 그런지 생각보다 빠르고 쉽게 정리 할수있었네요. ㅎㅎ 기타 문법에 대해 정리해 보도록 하겠습니다. enum 열거형 역활 : 문자열이 정수형 상수를 대신 하도록 한다. 형식 enum 태그 { 문자열1, 문자열2, ...}; : 초기값이 없으면 0부터 1씩 증가한 값으로 설정 됩니다. enum 태그 { 문자열1 = 초기값, 문자열2, ...}; : 초기값이 있으면 설정값 부터 1씩 증가한 값으로 설정 됩니다. ex) enum COUNT { ZERO, ONE, TWO }; enum COUNT Count; printf("%d ", Count = TWO }; #include #include #i..

[C] C언어 7일차 구조체와 TypeDef [내부링크]

안녕하세요. 훈츠 입니다. 이번 시간에는 구조체를 정의 해보려고 합니다. 구조체 개념 : 사용자가 정의 하는 데이터 형식 구성 : 필드 또는 멤버인 변수로 구성. 단, void 형은 사용할 수 없다. 멤버 접근 연산자 변수 선언인 경우 ('.' dot 사용) Point.x = 10; Point.y = 20; 포인터 선언인 경우 ('->' 사용) pPoint->x = 10;, pPoint->y = 20; 다양한 구조체 변수 선언(일반변수와 동일하게 사용 및 선언) struct POINT Point; struct POINT *pPoint; struct POINT PointXY[3]; 등 #include #include #include #include #include struct POINT { int x; i..

[C] C언어 7일차 포인터2 [내부링크]

안녕하세요. 훈츠 입니다. 포인터 정복을 해보려고 합니다. 천천히 보시죠. 포인터의 종류와 의미 포인터 (*****) , int *pPtr; : int형 메모리 주소를 저장하는 변수 선언 포인터 배열 (****) , int*pPtr[3]; : 3개의 열을 가진 배열의 메모리 주소를 저장하는 배열 선언 void 포인터 (****) , void *pPtr; : 모든 데이터형의 주소를 저장하는 변수 선언 사용할때는 반드시 형 변환 (type casting)을 해야 한다. 이중 포인터 (**) , int **pPtr; : int *형 메모리 주소를 저장 하는 변수 선언 함수 포인터 (**) , (*function)(int) : 함수의 메모리 주소를 저장하는 변수 선언 배열 포인터 (*), int (*pPtr)[..

[C] C언어 6일차 포인터 [내부링크]

안녕하세요. 훈츠 입니다. 이번 시간에는 포인터에 대해 정리 해보려고 합니다. 어렵게 느껴졌는데 차근차근 정리 해보니 정리가 되네요. 같이 한번 보시죠. 포인터 메모리 에서 데이터를 읽어오는 방법 메모리 주소 -> 데이터 위치 메모리의 주소와 데이터 타입을 알면, 데이터를 읽거나 저장 할 수있다. 포인터의 역활 : 임의의 메모리에 접근하여 값을 저장하거나 읽는 역활 포인터 변수 : 메모리 주소를 저장 하는 변수 일반 변수와 포인터 변수의 공통점과 차이점 공통점 차이점 일반 변수 값 저장 상수 저장 포인터 변수 값 저장 메모리 주소 저장 '*' 참조 연산자 아스트리크 선언된 변수가 포인터 변수임을 나태내는 역활 ex) int *pVar; == int* pVar; 포인터 변수에 저장된 메모리 주소로 접근한 ..

[C] C언어 5일차 배열 [내부링크]

안녕하세요. 훈츠 입니다. 이번 시간에는 1차원 , 2차원, 3차원(다차원) 배열에 대해 정리해 보도록 하겠습니다. 배열 (Array) 데이터형과 변수명이 같은 변수의 집합 배열 형식과 선언 데이터형 배열명[ 열의 갯수 ] ; 두가지 초기화 방법 선언과 동시 초기화 인덱스를 이용한 초기화 memset 표준 함수를 이용한 초기화 : 0 , -1로 만 초기화 가능 //1. 선언과 초기화 동시지정 //배열의 갯수를 지정 int array[3] = {1,2,3} //값을 초기화 int array[3] = {0,} //이후의 값은 모두 0으로 초기화 //배열의 갯수를 컴파일러가 판단하도록 지정하지 않는법 int array[] = {1,2,3} //값을 초기화 int array[] = {0,} //이후의 값은 모두..

[C] C언어 4일차 함수 [내부링크]

안녕하세요. 훈츠 입니다. 오늘은 함수에 대해 정리 해보도록 하겠습니다. 함수 정의 특정한 작업을 수행하도록 제작된 독립적인 코드 ( 코드 덩어리 + 이름 ) = 함수 처리가 시작되는 메모리 주소를 의미 코드의 재사용이 가능하며, 전체 구조를 파악하기 쉽다. Init() : 초기화에 관한 코드 Update() : 업데이트에 관한 코드 Release() : 메모리 해제에 관한 코드 제공 함수 (표준 함수) MSDN 라이브러리 확인해보면, 포함해야하는 헤더 및 사용용례를 확인가능합니다. https//docs.microsoft.com/ko-kr/cpp/c-language-reference?view=vs-2019 헤더 파일 포함 #include : 이미 설치 파일에 함수가 있을때 경로 지정법 #include "..

[지멘스 PLC SIEMENS] 지멘스 카다로그 Catalog S7-1500 ST70 PLC HMI DRIVE PM21 ST80 [내부링크]

지멘스 PLC 카다로그 무료로 다운 받으세요. 지멘스 카다로그에 대해 설명 드립니다. 지멘스사에서 제공해주는 카다로그 메뉴얼은 너무 방대해서 사용하시는 분야가 어느 카다로그와 메뉴얼에 속해있는지 아는게 중요한것 같습니다. 그래서 자동화 분야에서 많이 사용하는 PLC, HMI, Drive 에 핵심 부품 카다로그 설명드리고 현재 날짜 기준 최신 파일 공유 드립니다. 목차 PLC - ST70 카다로그 HMI - ST80 카다로그 S210 Drive 카다로그 S120 Drive 카다로그 IKPI 산업용 통신 카다로그 PLC ST70 카다로그 ST70 카다로그 에는 SIMATIC 패밀리 라인들중 아래 하드웨어 제품군 종류와 스펙에 대해 잘 나와있습니다. 처음 제품 선정시 도움을 주는 TIA Selection To..

[C] C언어 3일차 반복문과 분기문 [내부링크]

안녕하세요. 훈츠 입니다. C언어 뿐만 아니라, 정말 많이 사용하는 반복문과 분기문에 대해서 정리 합니다. 렛츠 고우~ 반복문 (for , while, do while) for 무한 루프 for ( ; ; ) break 를 만나면 정지 while 무한 루프 while(1) break 를 만나면 정지 do while 최초 1회는 무조건 수행 //for 문 for(int i=0; i < 3; i++) { printf("for 문 %d", i); } //while 문 int i = 0; while(i < 3) { printf("for 문 %d", i++); } //do while 문 int i = 0; do{ printf("do while 문 %d", i++); }while(i < 3); 분기문 (if , s..

[C] C언어 3일차 연산자 [내부링크]

안녕하세요. 훈츠 입니다. 이어서 연산자에 대해서도 정리해보도록 하겠습니다. 논리 연산자 C 언어에서 참(True) 와 거짓(False) 의미 && : AND 연산자 || : OR 연산자 ! : NOT 연산자 비트 연산자 & : and 연산자 | : or 연산자 ~ : not 연산자 ^ : xor 연산자 > : shift 연산자 1 100 이 되며 정수값 으로는 4가 됩니다. 형 변환 연산자 일시적 형 변환 (type casting) (데이터형) 변수 또는 상수 int A; char B; A = (int) B; 형변환시 메모리 크기와 데이터 허용 범위를 고려 해야 합니다. 연산자 우선 순위 우선순위 연산자 결합성 1 () , [], .->, 후위++, 후위-- 좌 -> 우 2 전위++, 전위--, siz..

[C] C언어 3일차 상수 [내부링크]

안녕하세요. 훈츠 입니다. C언어를 처음 시작 해야겠다는 마음 먹었을땐 방대한 양에 지치진 않을까? 하는 걱정도 앞섰는데 컴퓨터 랭귀지가 기본적인 부분이 비슷한게 많아서 지금 와선 괜한 걱정이었다는 생각이 듭니다. 아는 내용을 쭉 훓는 거라서 굉장히 가볍게 지나가고 있습니다. ㅎㅎ 앞으로 포인트 부분이 나오면 당황할지도 모르나 현재까진 그렇습니다. 그럼 오늘 학습한 내용에 대해 정리해 보도록 하겠습니다. 수 number 사람 입장 아리비아 숫자를 이용 0 ~ 9 해서 값을 구분하기 쉽습니다. 컴퓨터 입장 이진법 을 이용 합니다. 0 , 1 디지털 신호는 기본적으로 이진법 수들의 나열입니다. 수를 표기 하는 기수법 : 진법 10진법 : 0 ~ 9 까지 2진법 : 0 , 1 (십진수)11 -> (이진수)10..

[C] C언어 2일차 상수와 printf() 함수 [내부링크]

안녕하세요. 훈츠 입니다. C언어는 절차지향 프로그램 이며 함수형 프로그램 입니다. 함수형 프로그램에 장점은 함수로 인해 반복 코드를 쉽게 사용할수 있고 역활에 따라 코드 구분이 쉽다는 장점이 있습니다. 전처리기 : Preprocessor 역활 컴파일 전에 프로그램 소스에 특정한 작업을 수행(추가적인 작업, 작성한 소스 코드를 변경하지는 않음) 지시문(매크로) #define, #include, #pragma, #endif, #ifndef, #line, #elif, #error, #ifdef, #else, #if, #undef #include 표준 파일이기때문에 이형식으로 지정합니다. 표준 으로 포함이 안되어있을때는 " " 대괄호를 이용해서 경로를 지정합니다. MSDN 함수 사용 방법 확인 https://..

[C] C언어 2일차 C언어 프로젝트 생성 [내부링크]

안녕하세요. 훈츠 입니다. 금일은 C언어 학습 한지 2일차 되는 날입니다. 대학생때 C언어 하면 'void main() {}' 이부분까지 생각이 났는데 다시 강좌를 보면서 보니, 전처리기 #include , printf()등 재밌네요. 처음 프로젝트 만드는 부분부터 시작해 보도록 하겠습니다. 컴파일러 고급 언어로 작성된 코드를 컴파일 과정을 통해 목적코드(프로그램 기계어) 로 변경 링커 목적 코드와 소스 코드 안에 사용한 함수 코드를 라이브러리와 연결하는 역활 실행파일 *.exe 를 생성 ex1.c -> ex1.obj -> ex1.exe 디버깅(Debugging) 프로그램의 오류 부분을 찾아내고 수정하는 작업 프로젝트 생성 소스 파일과 관련된 여러 파일과 링크 정보가 저장됨. 비주얼 스튜디오에서 프로젝트..

[C] C 언어 시작 [내부링크]

안녕하세요. 훈츠 입니다. 금일 부터 C언어를 학습 하면서 기록 형식으로 남겨 보도록 하겠습니다. 대학생때 C언어를 배웠습니다만, 잘 기억이 나지 않습니다. 그만큼 C 하면 고전 이라는 생각에 많이 안쓰일줄 알았는데, 오히려 4차 산업혁명이 도래 되면서 IOT(Internet of things) 사물 인터넷 제품들 때문에 C의 사용범위가 더욱 다양해 진것 같습니다. 요즘 코틀린하고 C#에 관심이 생겨 유튜브에서 찾아보다가, 강사님께서 C -> C++ -> C# 코스를 추천해주셔서 새로운 마음으로 시작 하게 되었습니다. 사실 하고 싶은것은 많은데, 무엇을 해야할지 몰라서 Basic을 쌓고 가고자 합니다. 슬퍼요. 나이먹고 하려니,,, 어렸을때 할걸 하는 후회도 있지만 이게 또 나름 활력이 됩니다. ㅎㅎㅎ ..

[VSCODE C# , Windows forms C#] C# UserControl 모듈화 방법 및 소개 [내부링크]

VSCODE C# 을 활용해서, Windows Forms UserControl 모듈화 하는 방법에 대해 알아보도록 하겠습니다. 새로운 Windows form 만들고 띄우기 사용자 정의 컨트롤 (Windows Forms) 만들기 Main Form에서 사용자 정의 컨트롤 활용 하기 새로운 Window Form 만들고 띄우기 프로젝트 -> 구성요소 추가 -> Windows Forms -> 양식(WindowsForms) 선택 합니다. Show , ShowDialog, Close 명령어로 form을 제어하세요. Form3 form3 = new Form3(); //show or showDialog 둘중에 하나 사용하시면 됩니다. form3.Show(); form3.ShowDialog(); //띄운 form을 닫을때..

[Kotiln] 코틀린 안드로이드 런처 아이콘 변경 하기 [내부링크]

안녕하세요. 훈츠 입니다. 이번 시간에는 안드로이드 아이콘 변경 하는 방법에 대해 알아보도록 하겠습니다. 다음 순서로 아이콘 런처를 변경 가능합니다. 아이콘 런처 만들기 혹은 다운로드 하기 이미지 Asset 추가 (생략 가능 합니다.) AndroidManifest.xml 파일 수정 최초 앱의 아이콘 런처는 안드로이드 보이 입니다. 1. 아이콘 런처 만들기 혹은 다운로드 하기 직접 만드셔도 되고, 저처럼 freeimage icon을 이용 하셔도 됩니다. freeimage icon을 다운받을수 있는 사이트 입니다. https://www.flaticon.com/packs/social-media-logos-2 48 free vector icons of Social Media Logos designed by Fr..

[C#] C# 컬렉션 함수 Dictionary [내부링크]

안녕하세요. 훈츠 입니다. 금일은 Dictionary 함수 사용법에 대해 알아보도록 하겠습니다. 컬렉션 함수 딕셔네어리 (Dictionary) 코틀린의 map 처럼 key, value 로 구성 되며, key값이 중복되면 안됩니다. ContainsKey("key"), TryGetValue("cat" , out test) KeyValuePair Dictionary 컬렉션을 상속받기에 루프에서 사용할 땐 keyValuePair 구조체를 이용합니다. keyNotFoundException 존재 하지 않는 키를 사용하면 에러를 발생합니다. 항상 Containkey나 TryGetValue로 키 존재 여부를 먼저 확인 해야 합니다. ContainsKey("key"), TryGetValue("cat" , out test..

[TIA Portal PLC] 지멘스 & 미찌비시 PLC CPU 비교 [내부링크]

지멘스 S7-1500 CPU 와 미찌비시사의 UDV CPU에 대한 사양에 대해 알아 보겠습니다. 지멘스 CPU 사양 오버뷰 미찌비시 CPU 사양 오버뷰 QCPUV 씨리즈는 1.9ns로 CPU type에 상관없이 빠른 연산처리 속도를 나타내고 있습니다. 하지만 CPU의 처리 속도에는 bit, word, fixed point, floating point 입출력 처리 등이 모두 합산이되어서 비교 되어져야 하는데 미찌비시의 처리속도는 단순히 bit operation에 대한 내용만 카다로그에 기술하고 있습니다. 어플리케이션에 따라 bit처리만 하는 아주아주 단순한 어플리케이션이 아니라면 대부분 다른 연산들을 사용 할것입니다. 그러므로 CPU의 bit 처리 속도 만으로 CPU의 빠름을 판단하는것은 잘못된것 입니다...

[C#] C# 컬렉션 함수 List [내부링크]

안녕하세요. 훈츠 입니다. 금일은 List 사용법에 대해 알아보도록 하겠습니다. Console app 으로 만들었을때 바로 종료되는것을 방지 하기 위해서는 다음 명령어를 추가해야 합니다. Console.ReadKey(); 컬렉션 함수 리스트 (List) List 는 Generic이나 구조체로 간주합니다. 그래서 사이에 자료형을 선언 해야합니다. List list = new List(); add, Count, Clear, AddRange, ForEach, ToArray, remove, revmoveat..etc 함수를 사용 할수 있습니다 String.Join 을 이용해서 단어 사이에 ';'가 찍히는 문자열을 만들수 있습니다. List에서 문자열을 추출할 때는 , ToArray를 이용 합니다. 인수에 대한 ..

[TIA Portal PLC] S7-1500 PLC Interface 모듈 for PTO (펄스 트레인 출력) TM PTO 4 [내부링크]

안녕하세요. 훈츠 입니다. 금일은 Interface 모듈 for PTO (펄스 트레인 출력) TM PTO 4에 대해 설명 드리겠습니다. S7-1500, Interface 모듈 for PTO (펄스 트레인 출력) TM PTO 4 • 4-channel interface module for PTO (Pulse Train Output) • 3 signal interfaces can be configured for speed and direction: - 24 V asymmetrical up to 200 kHz - RS 422, 5 V symmetrical up to 1 MHz - TTL 5 V asymmetrical up to 200 kHz • 3 signal types can be configured: - P..

[TIA Portal PLC] S7-1500 PLC Time-based IO 모듈 [내부링크]

안녕하세요. 훈츠 입니다. 금일은 Time-based IO moudle 인 TM Timer DI/DQ에 대해 설명 드리겠습니다. S7-1500, Time-based IO module TM Timer DI/DQ 8 디지털 입력, 16 디지털 출력, 최대 16개 까지 다른 구성을 적용해서 사용 할수 있습니다. 입력은 마이크로초 에 입력 펄스를 감지 할수 있고, 출력 또한 마이크로초 단위로 스위칭 출력을 내보냅니다. 32배 오버샘플링가능하며, PWM 출력과 카운터 기능 그리고 출력은 0.5A 부터 패스트 0.1A 빠른 출력을 스위치 가능합니다. • 8 digital inputs, 16 digital outputs, of which up to 16 can be used in different configurat..

[TIA Portal PLC] S7-1500 PLC TM PosInput 2 카운트 모듈 [내부링크]

안녕하세요. 훈츠 입니다. 금일은 Technical module TM PosInput 2 에 대해 설명 드리겠습니다. TM PosInput 2 RS 422 인터페이스를 가지는 카운팅과 포지션 감지 모듈 입니다. • 2-channel counting and position detection module with RS 422 interface • Extensive parameterization options for optimum task-specific adaptation • Reduces load on controller due to preprocessing on the module • Position detection with incremental and SSI absolute encoders • Spe..

[TIA Portal PLC] S7-1500 PLC TM Count 2x24V 카운트 모듈 [내부링크]

안녕하세요. 훈츠 입니다. 금일은 Technical module TM Count 2x24V에 대해 설명 드리겠습니다. S7-1500, TM Count 2x24V counter module • 2-channel high-speed counter module • With comprehensive parameterization options for an optimum adaptation to the task and reduction of control load • Speed and time period measuring • Storage and comparison functions • Connection of 24 V encoders Card technical data https://support.indust..

[Kotlin] 코틀린 변수의 활용 (상수, 늦은 초기화,지연 대리자)const, lateinit, lazy by { } [내부링크]

안녕하세요. 훈츠 입니다. 이번 시간에는 변수에 선언에 대해 알아보도록 하겠습니다. 변수 관련해서 앞선 포스팅 2개를 했는데요. 오늘은 조금더 고급 스러운 변수 선언에 대해 알려 드리도록 하겠습니다. 바로 상수, 늦은 초기화, 초기화의 지연 입니다. 앞선 포스팅 한번씩 보시고 오셔도 도움이 될듯하여, 링크 붙였습니다. https://rain2002kr.tistory.com/62?category=361958 [Kotiln] 코틀린 변수와 자료형 안녕하세요. 훈츠 입니다. 이번 시간에는 코틀린의 자료형에 대해 설명 드리겠습니다. 코틀린은 자바를 대체할 목적으로 개발 되어 졌기 때문에, 자바에서 자주 발생하는 nullpointException 에러를 막는 방법도.. rain2002kr.tistory.com h..

[Kotlin] 코틀린 컬렉션 클래스 (collection) [내부링크]

안녕하세요. 훈츠입니다. 이번 시간에는 코틀린 에서 제공하는 List,Set,Map 을 사용하면 기본적으로 사용할수있는 컬렉션에 대해 이야기 해보겠습니다. 컬렉션 함수에 대해 설명한 이전 포스팅도 같이 한번 보시면 도움이 될것 같습니다. https://rain2002kr.tistory.com/91?category=361958 [Kotiln] 코틀린 컬렉션 함수 : 리스트, 셋, 맵(List, Set, Map) var list = listOf(1,2,3,4,5) var mutablelist :MutableList = mutableListOf() 안녕하세요. 훈츠 입니다. 오늘은 컬렉션 함수중 리스트에 대해 설명 드리도록 하겠습니다. 컬렉션 함수 리스트 (List) List.. rain2002kr.tisto..

[Kotlin] 코틀린 데이터 & 이늄 클래스 (data & enum class) [내부링크]

안녕하세요. 훈츠 입니다. 오늘은 데이터 클래스와 이늄 클래스에 대해 설명 드려보도록 하겠습니다. 데이터 클래스 (data class) 일반 클래스에 data 를 붙이면 data 클래스가 됩니다. data 클래스는 코틀린에서 데이터를 저장할 목적으로 만들어진 클래스로 데이터클래스로 선언하면 5가지 기능의 함수가 자동적으로 생성됩니다. equals() hashcode() toString() copy() component() x1 는 key값 , x2는 value값을 가져올수 있습니다. data class Data(var name:String,var hobby:String, var age:Int){} fun main() { var data = Data("은서", "공부",13) println(data.equ..

[Kotiln] 코틀린 중첩 클래스와 내부 클래스 [내부링크]

안녕하세요. 훈츠 입니다. 금일은 중첩 클래스와 내부클래스에 대해 알아보도록 하겠습니다. 중첩 클래스 외부 클래스와 내부에 다른 클래스와 강하게 연결되어 있다는 의미를 전달하기 위해 만들어진 클래스 입니다. 하지만 외부 클래스와 내부 클래스는 내용을 공유 할수 없다는 특징도 있습니다. 외부 클래스와 내용을 공유 할수 없습니다. 사용시에는 중첩 클래스에 인스턴스를 만들어서 사용해야 합니다. var nested = Outer.Nested() class Outer(){ var text = "Outer class" class Nested(){ fun introduce(){ println("nested class") } } } fun main() { var outerNested = Outer.Nested() ou..

[Kotiln] 코틀린 함수의 활용 Vararg [내부링크]

안녕하세요. 훈츠 입니다. 금일은 함수에 대해 알아보겠습니다. 코틀린에서 함수를 사용할때 유용한 사항에 대해 정리 해보겠습니다. 함수 오버로딩 (Overloading) 함수의 이름이 같더라도, 속성값의 자료형이 다르거나 속성값의 갯수가 다르다면 오버로딩이 가능합니다. fun main(){ userPrint("testString") userPrint(100) } fun userPrint(data:String) { println("userPrint String : ${data}") } fun userPrint(data:Int) { println("userPrint Value : ${data}") } //출력화면 userPrint String : testString //오버로딩 확인 userPrint Valu..

[지멘스 PLC SIEMENS PLC] CP 와 CM 카드 차이 및 통신 [내부링크]

지멘스 PLC CP(Commuincation Processor) CM(Commuincation Module) 모듈에 대한 차이를 설명드립니다. CP와 CM 의 차이와 PLC 제품별 통신 지원 방식에 대한 설명을 드리도록 하겠습니다. 물론 두카드 사이에 금액차이가 있고, CP 가 조금더 비쌉니다. SIEMENS 통신 종류 이더넷 프로피넷 IO 프로피버스 DP 이더넷 프로피넷 IO 프로피버스 DP 비주기적 통신 주기적 통신 주기적 통신 시간이 중요하지 않은 app 시간이 중요한 app 시간이 중요한 app 제어기 - 제어기 간 통신 제어기 - 장치 간 통신 마스터 - 슬레이브 간 통신 S7-1500 CPU 인터페이스 X1, X2 포트는 프로피넷을 지원합니다. X3 포트는 이더넷을 지원하며, X1,X2 포트로..

[Kotiln] 코틀린 nullable 변수 처리 [내부링크]

안녕하세요. 훈츠 입니다. 금일은 nullable 변수에 대한 처리에 대해 알아보도록 하겠습니다. Nullable 연산자 종류 [ ?. null safe , ?: 엘비스 , !! null 어소션] ?. null safe 연산자 (마치 if 문 처럼 동작합니다.) 스코프 함수와 같이 사용하면 편리합니다. ?: 엘비스 연산자 null이면 대체 되어서 동작 합니다. !!. 논 null 어소션 연산자 (일부러 null값이 오면 익셉션 에러를 발생 시킵니다.) val a : String? = "test" a?.run {println(a)} // null safe 연산자 a?:println("null입니다.") // 엘비스 연산자 println(a!!.toUpperCase()) // null 어소션 연산자 //출력..

[Kotlin] 코틀린 String 문자 클래스 객체 활용 [내부링크]

안녕하세요. 훈츠 입니다. 오늘은 문자열 클래스에 대해 알아보도록 하겠습니다. 문자열 : 나누기, 대체하기, 합치기 val telnumber ="010-9898-8989" var telSplite = telnumber.split("-") //split 나누기 println(telSplite) println(telSplite.joinToString("-")) //joinToString 합치기 var tel = telnumber.replace("-","") //replace 대체하기 println(tel) println(tel.substring(3..10)) //원하는 영역 보기 //출력화면 [010, 9898, 8989] //split 나누기 010-9898-8989 //joinToString 합치기 01..

[Kotiln] 코틀린 컬렉션 함수 : 리스트, 셋, 맵(List, Set, Map) [내부링크]

var list = listOf(1,2,3,4,5) var mutablelist :MutableList = mutableListOf() 안녕하세요. 훈츠 입니다. 오늘은 컬렉션 함수중 리스트에 대해 설명 드리도록 하겠습니다. 컬렉션 함수 리스트 (List) List 는 가장 단순한 형태로 데이터의 집합 입니다. List = listOf() : 생성시에 넣은 객체를 대체, 추가, 삭제 할수 없습니다. MutableList = mutablelistOf() : 생성시에 넣은 객체를 대체, 추가, 삭제가 가능합니다. add, shuffle, remove, revmoveat 함수를 사용할수 있습니다. var list = listOf(1,2,3,4,5) var mutablelist :MutableList = mut..

[TIA Portal OPC UA] OPC UA [내부링크]

안녕하세요. 훈츠 입니다. 금일은 TIA Portal 에서 OPC UA 와 Server Enable 하는 방법에 대해 설명 드리도록 하겠습니다. OPC UA [Open Platform Communications Unified Architecture] : 산업용 표준 프로토콜 산업용 프로토콜을 사용하는 환경은 현장에서 장비, 통신 간 호환, 안정적인 연결이 필수 입니다. 장비간 안정적인 연결, 즉 호환성을 더 높여 사용할 수 있는데 꼭 필요한 기술 입니다. 또, 통신 부분에서 많은 양의 데이터를 주고받으면서 보안, 데이터 손실, 안전성 등 다양한 문제가 발생할 수 있습니다. 이런 과정에서 만들어진 산업용 표준 프로토콜은 산업용으로 다양하게 활용하면서 생기는 문제점을 해결하고 요구 사항을 해결 할수 있을 것..

[TIA Selection Tool] Tia Selection tool 설치 및 관리 [내부링크]

안녕하세요. 훈츠 입니다. 금일은 TIA Selection Tool 에 대해 알아보도록 하겠습니다. TIA Selection Tool - 빠르고, 쉽고, 스마트 구성 가능 TIA Selection Tool 을 이용하시면, 기존에 일일이 카다로그를 보시고 제품에 대한 비교와 이해를 하셔야 했던 작업을 아주 빠르고 쉽게 스마트하게 구성이 가능합니다. TIA Selection Tool은 클라우드 버젼과 설치 버전을 제공해 드립니다. 다운로드는 다음 사이트를 이용하시면 됩니다. 클라우드 버전 : 항상 최신 버전을 유지 한다는 장점이 있는 반면 설치 버전보다는 반응이 느립니다. 설치 버전 : 클라우드 버전보다 반응이 빠르고, UI 구성이 좀더 시안성이 좋습니다. 하지만 주기적으로 최신 버전으로 업그레이드 해야하는..

[Kotlin] 코틀린 제너릭 Generic [내부링크]

안녕하세요. 훈츠 입니다. 오늘은 제너릭 Generic 에 대해 알아보도록 하겠습니다. 제너릭 클래스를 구현 하는 방법과 제너릭 펑션을 구현 하는 방법에 대해 알아보겠습니다. 제너릭 (Generic) 제너릭은 클래스나 함수에서 사용하는 자료형을 외부에서 지정할수 있는 기능입니다. 제너릭은 함수나 클래스를 선언 할때, 고정적인 자료형 대신 실제 자료형으로 대체되는 '타입 패러미터'를 받아 사용하는 방법입니다. 제너릭을 이용하면, 다형성에서 배운 is, as연산자 없이 타입변경 없이 사용이 가능합니다. 타입 파라미터의 이름은 클래스 이름과 규칙이 같지만 일반적으로 'TYPE' 의 이니셜인 'T' 를 사용하는 것이 관례입니다. 만약 여러개의 제너릭을 사용할 경우 T의 다음 알파벳인 를 추가적으로 사용 하기도 ..

[지멘스 PLC TIA portal Team center] 팀센터 Team center PLM [내부링크]

Team Center PLM Teamcenter 소프트웨어는 혁신을 위한 디지털 스레드를 통해 기능 사일로 전반에 걸쳐 사람과 프로세스를 연결하는 최신 적응형 PLM(제품 라이프사이클 관리) 시스템입니다. 비할 데 없이 폭넓고 심층적인 Teamcenter 포트폴리오는 매우 성공적인 제품을 개발하는 데 필요한 다수의 어려운 난제를 해결할 수 있음을 의미합니다. 쉽고 직관적인 Teamcenter 사용자 인터페이스를 통해 조직 전체의 사용자가 이전과는 달리 제품 개발 프로세스에 한층 더 쉽게 참여할 수 있습니다. 3D 설계, 전자장치, 임베디드 소프트웨어, 문서, BOM(Bill of Materials)을 비롯한 제품 데이터 및 프로세스를 제어하는 단계부터 Teamcenter를 시작해보십시오. 제조, 품질,..

[Kotlin] 코틀린 다형성의 개념과 사용방법 is, as 연산자 [내부링크]

안녕하세요. 훈츠 입니다. 오늘은 다형성의 개념과 Downcasting 할때 사용되는 is와 as 연산자에 대해 알아보도록 하겠습니다. 다형성 (Polymorphism) 클래스를 상속하다보면 하위 클래스에서 상위 클래스와 똑같은 이름의 프로퍼티나 메서드를 지정 할일이 생깁니다. 하위 클래스에서 이름은 같지만 호출 매개변수가 다르거나 전혀 다른 동작의 메서드를 정의할 필요가 있습니다. 이렇게 이름은 같지만 매개변수가 다르거나 다른 동작을 하도록 하는것을 다형성(Polymorphism) 이라고 합니다. 다형성에 대해 클래스로 예를 들어 보겠습니다. Class Animal : super class Class Tiger : sub class (eat 함수를 override 하고, tiger 클래스만의 shout..

[Kotlin] 코틀린 옵저버 패턴 리스너 [내부링크]

안녕하세요. 훈츠 입니다. 오늘은 코틀린에서 광범위하게 사용되는 옵저버 패턴을 구현 하는 방법에 대해 설명 드리겠습니다. 옵저버 패턴을 구현하는 방법은 두가지 입니다. 한가지는 인터페이스를 상속하는 방법과, 두번째는 익명 함수를 통해서 익명 클래스를 구현하는 방법입니다. 옵저버 패턴 키의 입력, 터치의 발생 같은 시스템 또는 루틴에 의해 발생되는 동작들을 이벤트라고 부릅니다. 이벤트가 발생 했을때 상호 작용 할수있는 패턴을 옵저버 패턴이라고 합니다. 코틀린에서는 리스너라고 부르기도 합니다. 옵저버 패턴을 구현하는 방법 [class A - - class B ] 인터페이스 구현 두개의 클래스 class A, class B class A : 인터페이스를 속성값으로 받는 펑션 클래스 class B : 인터페이스..

[Kotlin] 코틀린 오브젝트 싱글톤 패턴 object [내부링크]

안녕하세요. 훈츠 입니다. 오늘은 오브젝트 object 에 대해 이야기 해 보겠습니다. 여러 인스턴스를 생성할 필요 없이 하나의 객체만으로 공통적인 속성과 함수를 사용해야 할때는 class 가 아닌 object로 선언하여 사용 할수 있습니다. 오브젝트 Object 클래스 대신 object 라는 키워드를 사용합니다. 생성자는 허용하지 않습니다. 싱글톤 패턴 : Singleton Pattern 싱글톤 패턴 : 클래스의 인스턴스를 단하나만 만들어 사용하도록 하는 코딩 아키텍쳐 패턴 object Calculator{ fun add(a:Int,b:Int) = a + b fun sub(a:Int,b:Int) = a - b fun multiply(a:Int,b:Int) = a * b fun divide(a:Int,b..

[Kotlin] 코틀린 스코프 함수 [apply, also, run, let,] [내부링크]

안녕하세요. 훈츠 입니다. 오늘은 스코프 함수에 대해 이야기 해 보겠습니다. 코틀린에서 함수형 언어의 특징을 좀더 쉽게 사용할수 있도록 제공 하는것입니다. 스코프 함수 .{ 변수 혹은 함수 } (apply 참조연산자 없이 사용/ also "it"을 이용) 처리가 끝나면 인스턴스를 반환 합니다. (run 참조연산자 없이 사용 / let "it"을 이용) 처리가 끝나면 최종값을 반환 합니다. with(a){...} run과 완전 동일하며 함수 사용하는 형식 만 다릅니다. 함수형 언어의 특징을 좀더 쉽게 사용하도록 제공 합니다. 인스턴스의 속성이나 함수를 좀더 깔끔하게 사용 가능합니다. apply / also 처리가 끝나면 인스턴스를 반환, apply 는 참조연산자 없이 also 는 it 연산자 사용 clas..

[Kotlin] 코틀린 고차 함수와 람다 함수 [내부링크]

안녕하세요. 훈츠 입니다. 오늘은 고차 함수와 람다 함수에 대해 이야기 해 보겠습니다. 고차 함수 함수를 마치 클래스에서 만들어낸 인스턴스 처럼 취급 하는 방법 입니다. 코틀린에서는 모든 함수를 고차함수로 사용 가능 하여, 함수를 파라메터로 넘겨 줄수도 있고, 결과값으로 반환 받을 수도 있습니다. fun main() { b(::a) //고차함수 출력할때 사용 } fun a(string: String){ println("$string 함수 a") } //고차함수 예시 fun b(fc : (String) -> Unit){ //fun b(function : (자료형) -> 반환형 fc("b 가 호출한") } //출력 b 가 호출한 함수 a 함수의 형식(자료형, 자료형...) -> 함수의 반환형 //반환형이 없..

[Kotlin] 코틀린 변수 함수 클래스의 스코프 접근 제한자 [내부링크]

안녕하세요. 훈츠 입니다. 오늘은 클래스의 스코프 접근 제한자에 대해 알아 보겠습니다. 스코프 : 범위 같은 스코프내에 동일 변수가 있으면 같은 스코프 변수를 사용 합니다. 하나의 패키지에서 다른 패키지 사용할때 동일 스코프 내에서는 공유 할수 있습니다. 같은 스코프에서 같은 멤버이름을 허용 하지 않습니다. var a = "패키지" fun main() { println(a) var a = "사람" println(a) show() } fun show(){ var a = "인간" println(a) } //출력 화면 패키지 사람 인간 접근 제한자 패키지 스코프 public : 기본값 internal : 같은 모듈 내에서만 접근 가능 private : 같은 파일 내에서만 접근 가능 클래스 스코프 public ..

[Kotlin] 코틀린 클래스 3 오버라이딩 & 추상화 & 인터페이스 [내부링크]

안녕하세요. 훈츠 입니다. 이번 시간으로 클래스 편을 마무리 하려고 합니다. 지난시간에 소개해 드린 클래스1,2편을 참조하시고 이번편을 보시면 코딩 하시는데 도움이 될것 같습니다. 이번 시간에는 추상화 와 인터페이스 그리고 오버라이딩에 대해 이야기 해보겠습니다. 오버라이딩 (overriding) 서브클래스 에서 슈퍼클래스에서 이미 구현된 함수를 재구현 해서 사용하는 것을 오버라이딩이라고 합니다. class에 상속 허용 처럼 function 에도 open을 붙이면 override가 가능합니다. fun main() { var tiger = Tiger("호랭이",2) tiger.eat() var bear = Bear("곰탱이",1) bear.eat() } open class Animal (var name:St..

[Kotlin] 코틀린 클래스 2 상속 & 기능 확장 [내부링크]

안녕하세요. 훈츠 입니다. 오늘은 코틀린 클래스 1편에 이어 2편을 이어갈 예정인데요. 아직 클래스에 대해 감이 없으신분들은 다음 글을 한번 읽어보시는게 도움이 될것 같습니다. 이번 시간에는 코틀린에서 어떻게 상속 가능하게 만들고 상속할수 있는지 설명 드리겠습니다. https://rain2002kr.tistory.com/72 [Kotlin] 코틀린 클래스 1 안녕하세요. 훈츠 입니다. 이번 시간에는 객체 지향에서 이야기 하는 클래스에 대해 이야기 해보려고 합니다. 사실 코틀린은 객체 지향 언어 + 함수형 언어의 장점을 흡수한 언어 입니다. 그럼 코틀린에서는 어떤.. rain2002kr.tistory.com 상속 (inheritance) 상속이 필요한 경우와 상속에 관한 내용을 정리 해보자면 다음과 같습니..

[Kotlin] 코틀린 클래스 1 [내부링크]

안녕하세요. 훈츠 입니다. 이번 시간에는 객체 지향에서 이야기 하는 클래스에 대해 이야기 해보려고 합니다. 사실 코틀린은 객체 지향 언어 + 함수형 언어의 장점을 흡수한 언어 입니다. 그럼 코틀린에서는 어떤 부분이 다른지 한번 들어가 보시죠. 클래스 구성 속성 : 고유의 값 함수 : 기능 구현 클래스란 값과 함수의 묶음 입니다. 코틀린 클래스 종류 class : 아무 것도 붙이지 않으면 일반 class data class : 앞에 data 를 선언하면 data class가 됩니다. 데이터 클래스의 생성자는 1개 이상의 속성 값을 가져야 합니다. 데이터 클래스의 속성을 선언 할때는 var 또는 val으로 선언 해야합니다. 데이터 클래스는 abstract, open, sealed, inner 를 붙일수 없습..

[Kotlin] 코틀린 코드 흐름제어 및 논리 연산자 [내부링크]

안녕하세요. 훈츠 입니다. 오늘은 코드 흐름제어를 위한 키워드 및 논리 연산자에 대해 설명 드리겠습니다. 금일 설명 드릴 항목 입니다. RETURN : 함수를 종료하고 값을 반환 하는 역활을 합니다. BREAK : 주로 반복문 안에서 break 조건문이 참일 경우, 그 즉시 반복문을 종료 합니다. CONTINUE : 주로 반복문 안에서 contiune 조건문이 참일 경우, 그 조건을 건너띄고 다음 조건문을 실행합니다. loop@for lable : 다중 반복문 안에서 @loop@ for lable 조건문이 참일 경우, 그 즉시 반복문을 종료 합니다. 논리 연산자 &&, ||, ! BREAK 와 CONTINUE //BRAEK 문 for (i 1..10) { if(i == 3) break //2까지 찍히고 ..

[Kotiln] 코틀린 반복문과 증감 연산자 [내부링크]

안녕하세요. 훈츠 입니다. 오늘은 프로그래밍 할때 아주 많이 사용되는 반복문에 대해 이야기 해보겠습니다. 반복문은 최신 언어들이 제공하는 기능들을 제공하고 있어 조금더 사람이 이해하기 쉽게 되어 있는것 같습니다. 반복문의 종류 조건형 반복문 : while , do whild 범위형 반복문 : for While 문 var a = 0 while(a < 5){ print (a++) //전위 연산자 : 연산후 값 체크 } 출력내용 //0,1,2,3,4 while(a < 5){ print (++a) //후위 연산자 :다음구문에서 사용 } 출력내용 //1,2,3,4,5 a++ 전위 연산자 : 연산후 값 체크, ++a 후위 연산자 :다음구문에서 사용 Do while 문 do{ println (a++) }while (..

[Kotlin] 코틀린의 조건문 및 비교 연산자 [내부링크]

안녕하세요. 훈츠 입니다. 오늘은 프로그래밍 할때 아주 많이 사용이 되는 조건문과 비교 연산자에 대해 이야기 해보려고 합니다. IF 문 var a = 7//a 에 7을 할당 if( a > 10 ){ println("a는 10보다 크다.") //조건이 참인 경우 실행 } else { println("a는 10보다 작거나 같다.") //조건이 거짓인 경우 실행 } 비교 연산자 =, != , == if( a < b ) // a가 b보다 작다면 if( a b ) // a가 b보다 크다면 if( a >= b ) // a가 b보다 같거나 크다면 if( a != b ) // a와 b가 다르다면 if( a == b ) // a와 b가 같다면 is 연산자 와 !is 연산자 var a : Int = 0 if(a is In..

[Kotiln] 타입 추론과 편리한 함수 [내부링크]

안녕하세요. 훈츠 입니다. 오늘은 타입 추론과 코틀린에서 편리한 함수에 기능에 대해 설명 드리고자 합니다. 자 그럼 들어가시죠~ 타입 추론 : 대부분은 타입 추론으로 자료형의 생략이 가능해 코드량을 줄일수 있습니다. //자료형 없이 할당 var str = "type test" var a = 1234 var a = 1234L var c =12.45 var d =12.45f ....etc 변수나 함수들을 선언 할때나 연산이 이루어 질때, 자료형을 명시 하지 않아도 코틀린이 자동으로 자료형을 추론해 주는 기능 입니다. 함수 : 특정한 동작을 하거나 원하는 결과값을 연산하는데 사용 합니다. fun add(a:Int, b:Int, c:Int) : Int { //(함수의 인자값 선언) : 리턴 타입 선언 retur..

[Kotiln] 형 변환 과 배열로 자료형 변경 저장법 [내부링크]

안녕하세요. 훈츠 입니다. 오늘은 형변환 TypeCasting 과 배열 Array에 대한 설명을 드리겠습니다. 코틀린은 다른 언어와 마찬가지로 기본 자료형을 가지고있습니다. 기본 자료형 숫자형 : Int, short, Long, Double, Float... 문자형 : Char, String 코틀린 에서는 기본 자료형들 간에 형변환 을 할수 있는 형변환 함수를 제공 합니다. 형변환 함수 : type casting function toByte(), toShort(), toInt(), toLong(), toFloat(), toDouble(), toChar() 코틀린은 암시적 형 변환을 지원 하지 않고 명시적 형 변환만 허용 합니다. 변환될 자료형을 개발자가 직접 지정함. 암시적 형변환 : 변수를 할당 할시 ..

[Kotiln] 코틀린 변수와 자료형 [내부링크]

안녕하세요. 훈츠 입니다. 이번 시간에는 코틀린의 자료형에 대해 설명 드리겠습니다. 코틀린은 자바를 대체할 목적으로 개발 되어 졌기 때문에, 자바에서 자주 발생하는 nullpointException 에러를 막는 방법도 있습니다. 그리고 코드의 끝을 알리는 ; 세미콜론 역시 생략이 가능하다는 점이 자바와 다른 점입니다. 주석 //, /* */ : 이렇게 하면 주석 처리를 할수 있습니다. 표기법 ClassName : 파스칼 표기법으로 주로 클래스명에 사용합니다. nameFunction : 카멜 표기법으로 주로 펑션명이나 변수에 사용합니다. 변수 선언법 var : 초기화 된후에도 변수의 값을 변경 할수 있습니다. val : 초기화 된후에는 변수의 값을 변경 할수 없습니다. 코틀린이 기본 변수에서 null을 허..

[Kotiln] 코틀린 개발 환경 및 장점 [내부링크]

코틀린은 JetBrains에서 자바를 대체할 목적으로 만든 최신 패러다임을 가진 언어입니다. 자바의 장점은 그대로, 단점은 보안 했습니다. 개발 환경 안드로이드 스튜디오 인텔리제이 장점 자바 100% 호환 JVM 지원 안드로이드 및 웹 개발 가능 자바스크립트, 스위프트 연동 개발 가능 객체 지향과 함수형 언어 지원 안드로이드 스튜디오 혹은 인텔리제이 IDE 설치 하기 전 다음 사이트에서 미리 언어에 대해 알아보고 코딩 해보실수 있습니다. 감사합니다. https://kotlinlang.org/docs/reference/ Reference - Kotlin Programming Language kotlinlang.org

구글 파이어베이스 : GsonConvert class 객체를 이용한 데이터 추가, 검색 기능 [내부링크]

안녕하세요. 훈츠 입니다. 오늘은 구글 파이어베이스에 GsonConvert class 객체를 적용해 json 파일로, 변환하고 json파일을 gson 객체로 변환하는 방법에 대해 포스팅 해봅니다. 객체 설명은 다음 포스팅을 읽으시면 도움이 될것 같습니다. https://rain2002kr.tistory.com/53?category=374708 [kotlin] Gson & Json 저장 할수 있는 class 만들어 보기 안녕하세요. 훈츠 입니다. 모두 즐겁게 공부하면서 안드로이드 앱 학습하고 계신가요? 오늘은 Gson 클래스 객체를 Json 객체로 만들고, 다시 Json 객체를 Gson 객체로 만들수 있는 클래스를 설명 드려보고자 합니.. rain2002kr.tistory.com 그리고 FireBase p..

[TIA Portal PLC] PLC Time read and write 하는 법 [내부링크]

안녕하세요. 즐겁게 PLC 프로그래밍 하고 계신 가요? 오늘은 TIA Portal 에서 PLC에 Module Time을 읽어오고 변경하는 기능에 대해 설명 드리고자 합니다. PLC Module set Time 하는 방법 입니다. 프로젝트 트리에서, online diagonstic에 들어갑니다. Functions 에서 Set time 으로 이동 합니다. PG/PC time은 현재 PC 의 시간이므로 저시간을 보고 맞추시고, Apply를 누르시면 현재 시간이 변경되게 됩니다. PLC 프로그램에서 Local time 및 System Time 읽기 쓰기 PLC Instructions 중 Extended instructions 에서 Clock functions 를 이용해서 local time 및 system ti..

[TIA Portal PLC] HMI Hidden input 기능 [내부링크]

안녕하세요. TIA portal HMI 에서 Hidden input 기능을 사용하기 위해서는 다음 체크 박스를 체크 하시면 됩니다. Hidden input 체크 합니다. **** 별 표시 확인 , 참 쉽죠?

[kotlin] Gson & Json 저장 할수 있는 class 만들어 보기 [내부링크]

안녕하세요. 훈츠 입니다. 모두 즐겁게 공부하면서 안드로이드 앱 학습하고 계신가요? 오늘은 Gson 클래스 객체를 Json 객체로 만들고, 다시 Json 객체를 Gson 객체로 만들수 있는 클래스를 설명 드려보고자 합니다. 물론 객체를 만들지 않고도 가능하지만 객체로 만들어 놓고 사용하면 조금더 손쉽게 적용할수 있지 않을까 하는 생각에 만들어 보았습니다. 저처럼 아직 Gson 객체를 Json 객체로 만드는게 익숙하지 않으시는 분들은 제가 설명드리는 부분과 함께 클래스 가져가셔서 해당하는 부분만 일부 변경해서 사용하셔도 괜찮을거 같습니다. GsonConvert Class 를 만들어 봅니다. Contact라는 data class를 type으로 예시를 들어 만들었습니다. data class Contact(va..

[Kotiln] 코틀린 타입 변환 및 체크 as for type check and conversion [내부링크]

코틀린에서 명시적 형변환과 암시적 형변환을 지원한다고 해도 Any type같은 경우는 암시적 형변환이 아닌 명시적 형변환을 사용해야 합니다. 이때 as 를 이용하여 형변환을 할수있습니다. as 사용법 : map list를 가지고 있는 map 예시 data class Person(var name:String, var number:String) //data class var mapOfperson = mutableMapOf() //Person type mutable map var mapOfMaps = mutableMapOf() //map 을 가지고있는 map //두개의 map of Person mapOfperson.put("key1",Sperson("lkh","01")) mapOfperson.put("key2..

[TIA Portal] CM PtP , RS 422/485 High Feature : Modubus RTU [내부링크]

TIA Portal 1500 MP 제품 군에서 Modubus 통신을 이용하기 위해서 CM PtP , RS 422/485 High Feature 카드를 이용 해야 합니다. 모드버스 기본 설명 http://gofile.me/6AMKe/B4zgEk0WM Connecting... {0}Synology C2 30일 무료 평가판{1}을 시작하여 Synology NAS에 가장 적합한 공용 클라우드 백업 서비스를 경험해 보십시오. gofile.me 모드버스 케이블 주문 가능 합니다. [5M,10M, 50M] Setting 은 다음 메뉴얼 참조 하시면 됩니다. http://gofile.me/6AMKe/ogscGc0u4 Connecting... {0}Synology C2 30일 무료 평가판{1}을 시작하여 Synology..

[TIA Portal] PLC 에서 HMI Screen 변경 [내부링크]

TIA Portal 에서 HMI 화면을 PLC에서 TAG 변경으로 가능하게 하는 법에 대해 설명 드리도록 하겠습니다. PLC Tag 생성 int type 후 HMI 로 Drag and drop HMI 에서 이동한 TAG에 속성 -> 셋팅 -> Acquisition mode -> continuous mode 셋팅 TAG에 Event 에서 Value change -> ActivateScreenByNumber 셋팅 HMI 에서 SCREEN NO 입력 및 셋팅 : SCREEN -> 속성 -> Number PLC에서 ONLINE 후 테스트 하면 화면이 이동 되는것을 확인 할수 있습니다. [New] POP-Up 스크린 띄우기 by PLC : 위에 방법 동일 하며, 펑션만 달리 하면 됩니다.

Google firebase 구글 파이어베이스 app 연동 [내부링크]

데이터베이스 DB를 언젠가 공부해서 구현 해야겠다는 마음만 먹고 있는 상황에서 우연치 않게 알게된 구글 파이어베이스 DB에 대해 어떻게 APP과 연동하는지 포스팅 해보겠습니다. 구글 파이어베이스 접속 및 앱 추가 패키지 이름과 앱 닉네임(선택사항) 을 기입후 앱 등록을 누릅니다. 구성 파일 다운로드후, 다운 받은 .json 파일을 앱 모듈 루트 디렉토리로 이동 합니다. Dependecies 에 구글 서비스 및 firebase 빌드 그래들에 추가 //프로젝트 수준의 build.gradle (/build.gradle): buildscript { repositories { // Check that you have the following line (if not, add it): google() // Googl..

Tia portal PLC Tips [내부링크]

Tia portal PLC 사용시 TIP을 정리해서 계속 업데이트 하도록 하겠습니다. DB Actual value값 초기화 방지 DB 모니터링 값이 프로그램 수정 혹은 DB 수정후 바뀐 부분만 다운로드 하더라도 모니터링값이 RESET이 되는 것을 방지 하기 위해서는 몇가지 셋팅이 필요합니다. 다음과 같이 셋팅 하면 모니터링 값이 Reset되는것을 방지 할수 있습니다. DB 안에 Attributes : Optimized block access 클릭 Download without reinitialization : Enable download without reinitialization for retentive tags클릭 DB 모니터링 후 Keep actual values 클릭

[kotlin] Gson & Json 이용 하여, arrayList값 저장 하기 [내부링크]

Sharedprefence 를 싱글톤으로 만들어 가볍게 앱의 이곳 저곳에서 값을 저장하고 있었는데, 많이 사용하는 arrayList 값 저장하는법에 대해 몇일간 블로깅을 통해 알아낸 결과 Gson 과 Json을 이용한다면 가능하다는 것을 알게 되었습니다. 하지만 그렇게 친절? 한 블로그를 찾지 못했고, 사실 이부분은 제가 기본이 없어서 그렇습니다. ㅠㅠ 코틀린 사이트에서 검색해서 알았는데 설명은 자바로 이루어져 있었습니다. Gson type을 Json type으로 변경하고 반대로 Json 을 Gson으로 변경하는 법을 순서대로 설명 드리겠습니다. Gson Dependencies 에 라이브러리 추가 build.gradle(Module:app) 에서 직접 추가 하셔도 좋고, file -> Project st..

[Kotlin] 리싸이클러뷰 : recyclerView 프래그먼트에 구현하기. [내부링크]

프래그먼트에서 리싸이클러뷰를 구현 하기 위해서는 액티비티와는 다르게 구성 해주어야 하는 부분들이 있어 정리 차원 및 정보 전달 차원에서 포스팅 해봅니다. 기본적으로 구현 하는 방법은 같은데, 프래그먼트 내에서 구현하는 방법만 정리 하겠습니다. 리싸이클러뷰 이전편을 참조 바랍니다. https://rain2002kr.tistory.com/42 [Kotlin] 리싸이클러뷰 : recyclerView 적용 자바에서 리싸이클러뷰를 구현하는 방법에 대해 포스팅 해놓은것이 있으나, 코틀린이라는 언어적 장점으로 비교적 간단한 방법으로 리싸이클러뷰를 구현 할수 있습니다. 코틀린 언어적 설명보다 지금 당장 구현 할.. rain2002kr.tistory.com 1. 프래그먼트 구성 class MainFragment : Fr..

[Kotlin] 리싸이클러뷰 : recyclerView 적용 [내부링크]

자바에서 리싸이클러뷰를 구현하는 방법에 대해 포스팅 해놓은것이 있으나, 코틀린이라는 언어적 장점으로 비교적 간단한 방법으로 리싸이클러뷰를 구현 할수 있습니다. 코틀린 언어적 설명보다 지금 당장 구현 할수 있는 방법에 대해 설명해 보도록 하겠습니다. 1. 리싸이클러뷰 다운로드 : Gradle 이용 해서, 다운로드 하거나, XML 구성하는곳에서 RecyclerView를 drag and drop 으로 구성 dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'androidx.ap..

[kotlin] Fragment 적용 하기 [내부링크]

자바로 프래그먼트를 활용해 보았지만 코틀린으로 작성하려고 하니 약간은 생소해서 기록으로 남겨 놓습니다. 프래그먼트 개념이나 여러가지 설명은 자바의 프래그먼트를 참조 하시고, 이곳에서는 코틀린으로 실행하는 방법만 설명 하도록 하겠습니다. 1. Main Layout 에서 프래그먼트 만들기 (Main액티비티에서 inflation없이 사용시에는 fragment는 사용) 프로그램에서 inflation 원할때는 FrameLayout에 id를 할당 1 2 3 4 5 //Hoons Blog---https://rain2002kr.tistory.com------------------------------------------------------------------코드/// Colored by Color Scripter..

[kotlin ] SharedPreferences : 데이터 저장 하는 방법 [내부링크]

안드로이드 프로그램에는 생명 주기 라는 것이 있어서, 다른 액티비티로 이동한다던지 앱을 재시작 혹은 화면을 바꿀때 데이터를 적절히 처리 하지 않으면 초기화 되게 되어있습니다. 안드로이드에서 SQL 데이터베이스를 통해서, 혹은 Intent안에 저장하는 방법외에도 SharedPreference 라는것을 이용하여 데이터를 저장할수 있게 설계 되었습니다. 많은 양의 데이터를 저장할때 혹은 앱이 삭제되었을때는 SharedPreference 저장한 영역역시 삭제 되므로 다른 방법을 검토 해야 할것 같습니다. 1. 액티비티 에서 사용 방법 1 2 3 4 5 6 7 8 9 10 11 12 //Hoons Blog---https://rain2002kr.tistory.com----------------------------..

SMS 메시지보내기 : registerReceiver [내부링크]

안녕하세요. 훈츠입니다. 요즘 코틀린 언어 공부하면서 이전에 만들어 두었던 SmS 자동 전송 app을 개발하면서 어려웠던점에 대해 전달 드려보도록 하겠습니다. 기본적으로 이 앱은 아직 배포 하지 않은 초기버젼으로 아직 완성 되지는 않았지만 app에 대한 기능은 사용자가 등록시켜 놓은 연락처로 문자가 오면, 그 문자 메시지를 등록시켜 놓은 상대방에게 자동으로 전송해 주는 앱 입니다. Java 코드로 작성한 버젼도 동작은 했지만, 간혹 broadcast 리시버는 문자 메시지를 받아서 mainActivity로 받은 문자를 띄어 주었지만 실제 메시지는 전송이 안되는 문제가 발생 하였습니다. 그래서 문자 메시지의 전송유무를 확인하고 그에 따른 적절한 메시지를 띄어 주어야 겠다는 생각을 하였습니다. 구글링을 해보니..

리싸이클러뷰 : chapter 1 [내부링크]

코틀린 코드를 이용하여, 리싸이클러뷰 를 사용하는 방법에 대해 설명 드려보겠습니다. 자바 언어를 이용할때 보다는 훨씬 더 심플하게 리싸이클러뷰를 사용 할수 있습니다. 이번 포스팅에서는 리싸이클러 뷰를 적용 하기 위해서 몇가지 기본이 되는 부분에 대해 이야기 드리겠습니다. 먼저 리싸이클러 뷰를 구성하기 위해서는 리싸이클러뷰는 기본 적으로 포함 되어있지 않기때문에 다운로드를 해야합니다. 그리고 리싸이클러뷰를 담을 ViewHolder 와 데이터와 리싸이클러뷰를 연결 시킬 Adpater가 필요합니다. 자 그럼 처음 부터 차근 차근 단계별로 설명 드리겠습니다. 1. 리싸이클러뷰 다운로드 (먼저 파일에 프로젝트 스트럭처를 선택합니다.) 2. 리싸이클러뷰를 XML 에 구성 하고, ID 값을 넣습니다. 설명에서는 "c..

SMS message : 보내기 [내부링크]

안녕하세요. 훈츠 입니다. 취미로 안드로이드 프로그래밍에 대해 하나씩 공부해가면서 재미있게 프로그래밍 하고 있습니다. 먼저 SMS Message는 SDK Version 22 이상 버젼에서는 권한을 얻어야 SMS 를 보내고 받고가 가능 합니다. 이부분 때문에 사실 조금 고생 했습니다. ㅜㅜ 왜냐하면 권한을 얻지 못하면 앱이 그냥 종료가 되어버려서 권한 문제 보다는 코드에 에러가 있는줄 알았습니다. 다른 글들을 많이 참고 했는데 이부분에 대한 설명은 못찾았습니다. 먼저 권한을 얻고 나면 생각보다는 쉽게 메시지를 보내고 받을수 있었습니다. 전 BroadcastReceiver를 통해 메시지를 받고, 받은 내용을 activity로 보내서 다시 메시지를 보냈습니다. 1. Manifests 에 SMS 보내기와 받기 ..

리싸이클러뷰 : [내부링크]

리스트뷰 와 마찬가지로, 리싸이클러뷰 역시 어댑터 객체를 연결시켜줘야 이용 가능합니다. 리스트뷰 보다는 조금더 세팅해줘야 하는 부분들이 있어 단계별로 설명 드려 보겠습니다. 1) build.gradle (Module:app) 리싸이클러뷰 의존성 추가 현재 시점의 최신 버젼 등록 해주시면 됩니다. dependencies { ... implementation 'androidx.recyclerview:recyclerview:1.1.0' } 2) XML 에 recyclerView 추가 하기 : id 와 방향 설정 3) Activity 에서 Recycler 와 adpater 선언, recyclerAdpter 클래스 생성 RecyclerView recycler1; recyclerAdpater adpater; cla..

SQLite : DataBase helper 객체 이용하기 [내부링크]

데이터베이스의 버전 업데이트 관리를 위해서 Helper 클래스를 이용하는 방법에 대해 설명 합니다. 헬퍼 클래스를 사용하려면 SQLiteOpenHelper 클래스를 상속해서 Helper 클래스를 만들고, 객체를 만들어서 사용하면 됩니다. 1-1) SQLiteOpenHelper 클래스 만들기 class DatabaseHelper extends SQLiteOpenHelper { } 1-2) onCreate() 메소드 , onUpgrade 메소드 implement 실행하기 @Override public void onCreate(SQLiteDatabase db) { } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersio..

SQLite : Database 강좌 [내부링크]

안드로이드에서는 Sharedpreference 말고, SQLite가 내장되어있어 간단하게 데이터베이스를 구성하여 저장하고 쉽게 조회 할수가 있습니다. 여기서 모바일 데이트 베이스를 만들고, 그안에 테이블을 만들어 저장하고, 조회하는 기능에 대해 설명 하겠습니다. 데이터베이스를 검색해보니, 현재 안드로이드에 내장되어있는 SQLite 말고도 아주 많은 데이터베이스 프로그램이 있었습니다. 하지만 안드로이드에서 데이터베이스 구성하는 방법들에 대해서만 기술해 보도록 하겠습니다. 1) 데이터 베이스 만들기 : database = openOrCreateDatabase( name, MODE_PRIVATE, null ); public void createDatabase(String name){ println( "crea..

Intent : intent 생성 및 화면 전환 사용법 [내부링크]

안드로이드 앱의 기본 구조는 화면과 레이아웃이다. 그리고 화면은 액티비티로 만든다. 그 위에 XML 파일로 작성한 레이아웃을 올리고 소스 코드를 이용하여 이벤트를 처리한다. 화면간 전환 하는 방법을 기록 한다. 1) 화면 간 전환 방법 = Intent 생성 : (getApplicationContext(), MenuActivity.class) 해당하는 Activity.class 를 해주고 startActivity해 주면 된다. public class MainActivity extends AppCompatActivity { Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceS..

Fragment : Adapter 에서 View 에 대한 정리 [내부링크]

Fragment 에서 XML 파일을 부분화면으로 혹은 전체 화면으로 붙이기 위해서 Inflation 이라는 작업을 거쳐야 하는데 adapter나 기타 View 를 붙여넣어야 하는 경우에 View 를 return 하는 Java 파일을 만들어서 붙이는데 헷갈려서 정리하기 위해서 기록 한다. 현재 까지 이해하고 있는 범위는 adapter 같이 view 를 돌려 받아야 하는 경우에만 추가로 view를 리턴 받을수 있는 View 자바 파일을 만들고 이용하면 된다. 1) View 자바 파일 코드 : 최상위 붙일 Layout 을 상속한다. inflation 작업하고, 접근 할수있는 set 메소드를 만든다. public class SingerItemView extends LinearLayout { ImageView i..

Fragment : Activity 에서 부분화면 inflation 하는 방법 [내부링크]

부분화면을 Activity에 붙이는 코드가 헷갈려서 정리 해본다. 기본적으로 XML 에 있는 데이터를 JAVA 코드에서 사용하려면 Inflation 이라는 메모리화 작업이 필요하다는것을 이해했다. 하지만 Fragment에서 inflation 할때와 Activity에서 Inflation 할때 약간의 코드가 다르다. 다음 코드를 보면 명확히 기억 할수 있을것이다. 1) XML 파일 2) Activity 에서 inflation 하는 코드 public class MainActivity extends AppCompatActivity { FrameLayout container; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate..

Git hub : Repository Gib Bash로 올리기 [내부링크]

https://coding-factory.tistory.com/245 [Git] 윈도우버전 Git설치하기 (Git for Windows) GItHub를 사용하려면 먼저 Git이 PC에 설치되어 있어야합니다. Git설치방법에 대해 알아봅니다. 1. Git 설치파일을 다운로드 받습니다. Git다운로드 링크 바로가기 위에 링크되어 있는 페이지에 들어가서 자신의.. coding-factory.tistory.com git 프로그램 설치 GitHub에서 원격저장소를 만든 뒤 Git Bash를 활용하여 Push하는 방법입니다. Git Repository생성 깃허브 바로가기 1. 위에 링크된 깃허브 사이트에가서 로그인을 합니다. (회원이 아니라면 회원가입을 해주세요.) 그런 뒤 1시방향에 있는 +버튼을 눌러서 New ..

Thread - AsyncTask [내부링크]

Thread 에서 핸들러를 사용해보면 코드가 조금 복잡해 보이는데, 안드로이드에서는 핸들러를 사용하지 않고 좀더 간단하게 작업하는 방법도 있다. AsyncTask 클래스를 상속하여 새로운 클래스를 만들면 그 안에 스레드를 위한 코드와 UI 접근 코드를 한꺼번에 넣을 수있다. 따라서 스레드로 처리 해야 하는 코드를 하나의 AsyncTask 클래스로 정의 할수 있다는 장점이 생긴다. 예를 들어, 웹서버에서 고객 이름을 가져오는 작업과 웹서버에서 제품이름을 가져오는 작업을 서로 다른 코드로 분리시키고 싶다면 두개의 AsyncTask 상속 클래스를 만든 후 각각의 코드를 넣으면 된다. AsyncTaks 객체를 만들고 execute() 메서드를 실행하면 이 객체는 정의된 백그라운드 작업을 수행하고 필요한 경우에 ..

Thread : 루퍼 를 이용한 message 보내기 [내부링크]

핸들러 기능은 새로 만든 스레드에서 메인 스레드로 메시지를 전달하는 것이었습니다. 반대로 메인 스레드에서 별도의 새로만든 스레드에 메시지를 전달하는 방법이 필요 할때가 있다. 이를 위해 메인 스레드에서 변수를 선언 하고 별도의 스레드가 그값을 읽어가는 방법을 사용할 수도 있다. 하지만 별도의 스레드가 관리하는 동일한 객체를 여러 스레드가 접근할때는 별도의 스레드 안에 들어있는 메시지 큐를 이용해 순서대로 접근 하도록 만들어야 한다. 마치 메인스레드가 처리하는 것처럼 말이다. 루퍼는 메시지 큐에 들어오는 메시지를 지속적으로 보면서 하나씩 처리하게 된다. 메인 스레드는 UI 객체들을 처리하기 위해 메시지 큐와 루퍼를 사용한다. 그러나 별도의 스레드를 새로 만들었을 때는 루퍼가 없다 따라서 메인 스레드나 다른..

Thread : Runnable & post AlertDialog 박스 [내부링크]

,핸들러를 사용해서 메시지를 보내면 조금 코드가 복잡하게 보이는 단점이 있어, 이보다 조금더 간단한 방법인 Runnable 객체를 실행 시키는 법에 대해 기술 해보겠다. 핸들러 클래스는 메시지 전송 방법 이외에 Runnable 객체를 실행 시킬수있는 방법을 제공 한다. 즉 Runnable 객체를 핸들러의 post() 메서드로 전달해주면 이 객체에 정의된 run()메서드 안의 코드들은 메인 스레드에서 실행 된다. 한마디로 별도의 핸들러 정의 할 필요 없이 Handler 객체 만들고, 만든 userThread 안에서 hander.post( new Runnable ) 하면 별도의 핸들러 없이 바로 메인 UI 접근이 가능하다. 1) hander.post( new Runnable )코드 public class M..

Thread : information [내부링크]

[안드로이드 스레드]에서 설명한 내용 중에서 메인 스레드와 관련된 내용을 간단히 정리해볼까요? 스레드란, 프로세스 내에서 "순차적으로 실행되는 실행 흐름"의 최소 단위를 말합니다. 프로그램의 main() 함수로부터 시작되는 최초 실행 흐름 또한 하나의 스레드이며, 이를 메인 스레드라고 부릅니다. 안드로이드 앱에서 메인 스레드는 메시지 큐(Message Queue) 수신을 대기하는 루프를 실행하며, 사용자 입력과 시스템 이벤트, 화면 그리기 등의 메시지가 수신되면 각 메시지에 매핑된 핸들러의 메서드를 실행합니다. 어떠한 경우에 스레드를 사용해야 하는지, 그 판단은, 구현하고자 하는 기능이 메인 스레드와 병행적으로(Concurrently) 실행되어야 하는가를 확인하는 것입니다. 이를 다르게 말하자면, 어떤 ..

Thread : 스레드 와 핸들러 [내부링크]

새로운 프로젝트를 만들게 되면 메인 액티비티는 앱이 실행될 때 하나의 프로세스에서 처리된다. 따라서 이벤트 처리나 특정 메서드 기능 구현 할때도 같은 프로세스 안에서 실행된다. 같은 프로세스 안에서 일련의 순서대로 실행 될때, 대부분은 큰문제가 없지만, 대기 시간이 길어지는 네트워크 요청 등의 기능을 수행할 때는 화면에 보이는 UI도 멈춤 상태로 있게 되는 문제가 생길수 있다. 이런 문제를 해결하기 위해 하나의 프로세스 안에서 여러 개의 작업이 동시 수행되는 멀티 스레드 방식을 사용하게 된다. 스레드는 동시 수행이 가능한 작업 단위이다. 하지만 공통 메모리 소스를 나눠 쓰기 때문에 데드락이 발생하여 시스템이 비정상적으로 동작 가능 하다. 데드락이란, 동시에 두 곳 이상에서 요청이 생겼을 때 어떤 것을 먼..

Web View : 내부 사이트 [내부링크]

WebServer가 없는 경우, 테스트 할 목적으로 사용하면 좋을듯 하다. 하는 방법은 assets 이라는 디렉토리를 만들고 그안에 .html 파일을 넣는다. 그후 액티비티에서 WebView 를 만들고 세팅하면 보여지게 된다. 설명한 과정을 아래 실습을 통해 보여주겠다. 1) assets 폴더 만들기, 그리고 sample.html 작성하기. 웹페이지 테스트용 웹페이지입니다. 그렇게 테스트 해보고 싶으면 해라 2) mainActivity 에 WebView 추가후 설정 public class MainActivity extends AppCompatActivity { WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { s..

Menu : 메뉴 만들기 [내부링크]

메뉴 보이기 실습 1) menu 폴더 만들기 2) menu_main.xml 파일 만들기 3) mainActivity 에서 onCreateOptionsMenu and onOptionsItemSelected 오버라이드 하기 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate( R.menu.main_menu, menu ); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int curId = item.getItemId(); switch (curId){ case R.id.refresh: Toast.makeText( getA..

Fragment : 생명주기 [내부링크]

Fragment 생명 주기 안드로이드 프래그먼트는 안드로이드 활동과 매우 유사한 자체 수명주기를 가지고 있다. Fragment lifecycle

Fragment : 프래그먼트 부분 화면 이동하기 [내부링크]

액티비티 클래스에 여러 액티비티를 넣는것은 많은 리소스를 포함시키므로 합리적이지 않은 방법이다. 하나의 화면을 여러 부분으로 나눠서 보여주거나 각각의 부분 화면 단위로 바꿔서 보여주고 싶을 때 사용하는 것이 프래그먼트 이다. 프래그먼트의 목적 코드가 복잡해지는 문제를 해결하기 위해 각 부분화면의 코드를 분리시킨 것이므로 프래그먼트를 사용하는 가장 큰 목적은 분할된 화면들을 독립적으로 구성하고 그 상태를 관리하는 데 있다. 액티비티 화면과 프래그먼트 화면은 다른것이다. 똑같이 XML 레이아웃으로 만들지만 액티비티에 사용되면 시스템에서 관리하는 화면이고, 프래그먼트에서 사용되면 단순히 액티비티 위에 올라가는 화면의 일부, 즉 부분화면이 된다. 프래그먼트는 항상 액티비티 위에 올라가 있어야 한다는 점이다. 프..

Service : 서비스 [내부링크]

서비스는 백그라운드에서 실행 되어 사용자와 상호 작용할 필요 없이 장시간 실행 되는 작업을 수행하는 구성 요소 이다. 응용 프로그램이 손상된 경우에도 작동한다. 서비스는 두가지 상태를 취 할수 있다. 1) startService() 호출하여 서비스를 시작할 때 서비스가 시작된다. 시작된 서비스는 시작된 구성요소가 손상되더라도 백그라운드에서 무기한으로 실행 될수 있다. 2) bindService()를 호출하여 응용 프로그램 구성 요소가 바인딩 될때 서비스가 바인딩 된다. 바인딩 된 서비스는 구성 요소가 서비스와 상호 작용하고, 요청을 보내고, 결과를 얻거나, 프로세스 간 통신 (IPC)을 통해 프로세스간에 수행 할 후있는 클라이언트-서버 인터페이스를 제공 한다. 서비스에는 서비스 상태의 변경 사항을 모니터..

PackML 이란 ? [내부링크]

안녕하세요. 훈츠입니다. PackML 관련한 글을 업데이트 해서 정리해 보았습니다. OMAC PackML 실전 핵심 노하우 https://rain2002kr.tistory.com/434?category=361225 [전자책 출간] OMAC PackML 실전 핵심 노하우 안녕하세요. 훈츠입니다. PackML 관련 핵심 노하우 정리한 전자책을 만들었습니다. 전자책 구매하시는 분들에게 제가 가지고있는 관련 최신 자료 모두 전달 드리도록 하겠습니다. 전자책 구매하 rain2002kr.tistory.com PackML은 Packaging Machine Language의 약어로 우리말로 패키징 장비 언어라는 의미입니다. 즉 장비들의 언어라고 이해하셔도 좋을 것 같습니다. PackML 적용 산업 군 PackML이란 ..

SharedPreference : save ArrayList with Json and Gson [내부링크]

안드로이드 프로그램에서는 데이터를 다른 화면으로 이동 할때, 그안에 쓰고 있던 데이터를 따로 저장하지 않으면 다시 화면으로 들어왔을때 그값을 확인 할수가 없다. 그래서 안드로이드에서는 SharedPreferences 라는것을 제공하는데, 사용 법에 대해 정리 해본다. 원시 데이터 String, Int... 와 달리 Object 나 ArrayList 를 SharedPreferences 로 저장 하기 위해서, Json 방식을 이용해 저장 하는방법을 정리 해본다. 0. Gson 사용하기 위해서 그래들에 라이브러리 인스톨 할수 있도록 기입하고, Sync now 를 누른다. build.gradle(Module:app) 폴더 dependencies { implementation 'com.google.code.gso..

Date & time : date picker and time picker [내부링크]

데이터 객체 와 타임 객체를 하나의 복합객체를 만드는 법을 학습 하므로써 시간 과 날짜 객체 사용법을 익히고 정리하기 위해서 작성해 본다. 1) Date picker 와 Time picker 의 xml 레이 아웃을 정의 한다. 2) PicerView 를 만든다. 다음과 같은 기본 메소드를 오버라이드 한후, init 메소드를 만든다. public class PickerView extends LinearLayout { DatePicker datePicker; TimePicker timePicker; CheckBox checkTimePicker; OnDateTimeChangeListener listener; public PickerView(Context context) { super( context ); in..

선택 위젯 : 스피너 : 기본 Array Adapter 설정 [내부링크]

스피너는 선택 위젯으로 다른 선택 위젯과 마찬가지로 Adapter 설정을 해줘야한다. 추가 적으로 스피너는 드랍 박스 식으로 누르면 해당 하는 아이템을 보여주고, 선택 하면 그 선택된 item 을 받을 수 있다. 다음 실습을 통해 스피너에 대한 기본 사용법 을 익혀 보자. 1) XML 안에 스피너 넣기 2) MainActivity 에서 스피너 객체 선언 Spinner spinner; String [] items = {"소녀시대", "티아라","여자친구", "블랙핑크"}; TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate( savedInstanceState ); setContentVi..

선택 위젯 : 리스트뷰&그리드뷰 : baseAdapter 정의 하기 [내부링크]

선택 위젯 이라고 불리는 리스트뷰, 그리드뷰, 리사이클러뷰, 카드뷰 는 모두 baseAdpter 객체를 정의후 setAdapter 를 해줘야 사용이 가능하다. 여기서는 리스트뷰를 만드는 법부터 baseAdpter 객체 정의 하기까지를 정리 해 보도록 하겠다. 1) 메인 엑티비티에 button 하나와 리스트 뷰를 넣는다. 2) 리스트뷰에 들어갈 item.xml 을 만든다. 3) item.xml 을 inflation 시키기 위한 itemView.java 파일을 만든다. public class SingerItemView extends LinearLayout { ImageView imageView; TextView textView; TextView textView2; public SingerItemView(Co..

Animation : sample sliding [내부링크]

안드로이드에서는 화면을 움직이거나 다른 것을 이동 할수 있도록 애니메이션 기능을 제공하고있다. 하는 방법은 res 폴더에 anim 이라는 폴더를 생성 후, 그 안에 움직일 xml 파일을 생성한다. 어디에서 어디로 어떤 크기로 움직일것인지 셋팅 할수있다. 그 후 MainActivity 에서 AnimationUtils.loadAnimation 를 통해서 시점을 완성 할 수 있다. 아래 예시를 보고 실습 해볼수 있다. 1) anim 폴더 만들고 그안에 xml 파일 정의 하기 2) main.xml 파일 정의 하기 : 프래임레이아웃 안에 두개의 레이아웃을 만들고 하나는 배경, 나머지하나는 슬라이딩 가능하도록 id=page라고 줬다. 3) Activity 에서 AnimationUtils.loadAnimation 이..

Intent(bundle)를 통한 데이터 전달 : Serializable and Parcelable [내부링크]

안드로이드 에서 서로다른 Activity 혹은 서버 같은 다른 영역으로 데이터를 보낼때, Intent 를 통해서 보내게 되는데 이때 원시데이터 (String, int , boolen etc) 를 제외하고 복합 데이터 타입 혹은 오브젝트를 보낼때는 데이터 직렬화를 해야한다. Serializable 같은 것은 데이터를 변환하고 보내는데 리소스를 많이 잡아 먹기 때문에 안드로이드에서는 안드로이드에 최적화 되어있는 Parcelable을 권장한다. 하지만 Parcelable은 구성하는데 조금 귀찮은 부분도 있으니, 경우에 따라 적용하면 될것 같다. 1) 기본 ArrayList 타입을 보낼때는 보낼때는 그냥 보내고 받을때만 getSerializableExtra 로 받으면 된다. ArrayList sData = ne..

onSaveInstanceState : 내용 저장하기 Fragment or Activity [내부링크]

안드로이드 기기에서 새로운 화면으로 이동 할때, Fragment 혹은 Activity에 써놓은 값이 리셋 되는것을 방지 하기 위해서 onSavInstanceState를 이용하여 저장 하는 방법이다. 물론 SharedPreferences 혹은 DataBase에 저장하는 방법도 있지만 용도에 따라서 아주 적은 값을 저장할때 사용 하는 방법이 onSaveInstanceState 이다. 1) onSaveInstanceState 를 오버라이드 메소드하고, SaveInstanceState 가 null 이아니면 get으로 값을 복원한다. @Override public void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState( outS..

Tips and Trick : //TODO [내부링크]

아래의 그림과 같이, " // TODO : " 를 통해서 내가 "작업을 해야 하거나", "마킹하고 싶은 곳" 에 사용해서 쉽게 찾아 가서 작업을 할 수 있습니다. 입력한 곳에는 오른쪽 스크롤바 옆에 마킹이 되어있는 것을 확인 할 수 있습니다.

Manu: 액션바 탭 [내부링크]

탭을 구성할때, 프래그먼트를 이용하는것 이 일반적이다. 1) 외부 라이브러리 추가 com.android.support:design 2) bulid.gradle 확인 apply plugin: 'com.android.application' android { compileSdkVersion 28 defaultConfig { applicationId "rain2002kr.techworld.myautosmssender_ver1" minSdkVersion 22 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release {..

SharedPreference : save String type [내부링크]

안드로이드 프로그램에서는 데이터를 다른 화면으로 이동 할때, 그안에 쓰고 있던 데이터를 따로 저장하지 않으면 다시 화면으로 들어왔을때 그값을 확인 할수가 없다. 그래서 안드로이드에서는 SharedPreferences 라는것을 제공하는데, 사용 법에 대해 정리 해본다. 1. SharedPreferences 와 SharedPreferences.Editor 정의 하기 SharedPreferences pref; SharedPreferences.Editor editor; pref = getSharedPreferences( "pref" , MODE_PRIVATE); editor = pref.edit(); 2. Save 시점 정의 하기 : 편의상 button 의 event click 이용 btEnter.setOnCl..