양도소득세 예제

세금 목적을 위해, 실현 된 이익과 실현되지 않은 이익의 차이를 이해하는 것이 중요합니다. 감사한 보안이 판매될 때까지 이득은 실현되지 않습니다. 예를 들어 회사에서 일부 주식을 구입하고 투자가 1년 동안 15%로 꾸준히 증가한다고 가정해 보겠습니다. 연말에 주식을 매각하기로 결정합니다. 주식을 매입한 날부터 투자가 증가했지만, 주식을 매각하기 전까지는 이익을 얻지 못할 것입니다. 구매 및 보유. 자본 자산에 대한 세금 납부를 미루는 가장 간단한 방법은 그들에게 매달려있는 것입니다. 아마도 자본 이득 률이 내려올 것입니다. 그것은 전에 일어났다! 또는 은퇴 후와 같이 나중에 더 낮은 세금 부류에 있을 수 있습니다. 어쨌든, 당신은 단순히 그들을 떠나서 투자를 계속 성장시킬 수 있습니다. SmartAsset에서 우리는 미래에 투자하는 것에 관한 것입니다.

투자가 잘 수행하고 판매하려는 경우, 당신은 일치하는 더 높은 세금 청구서를해야합니다. 자본 이득 세금 책임을 다듬기 위해 탐구에 가고 싶은 길이를 결정하는 것은 당신에게 달려 있습니다. “매수 및 보유” 전략으로 가기로 결정했다면 투자를 청산하기로 결정할 때까지 자본 이득에 대해 너무 많이 생각할 필요가 없습니다. 자본 이득은 투자 가치의 증가입니다. 자산의 매수 가격(기준)과 판매 가격의 차이입니다. 당신이 가정을 소유하는 경우, 당신은 정부가 주택 판매에서 이익을 세금 방법을 궁금해 할 수 있습니다. 주식과 같은 다른 자산과 마찬가지로, 주택의 자본 이득은 판매 가격과 판매자의 기준의 차이와 같습니다. 일반 소득에 대한 개인에 대한 세율은 10%, 12%, 22%, 24%, 32%, 35%, 37%이지만 장기 자본 이득 세율은 일반적으로 더 낮은 세율로 과세됩니다.

기본 자본 이득 비율은 0%, 15%, 20%입니다. 지금 청구된 것은 과세 소득에 따라 다릅니다. (이 요금의 중단점은 나중에 설명합니다.) 단기 자본 이득은 장기 자본 이득보다 더 높은 세율을 가합니다. 이것은 단기 거래를 억제하기위한 의도적 인 것입니다. 주식 및 기타 자산을 거래하는 것은 시장 변동성과 위험을 증가시킬 수 있습니다. 또한 개인 투자자에게 거래 수수료가 더 많이 듭니다. 당신은 집의 판매에 이익을 했습니까, 일부 투자, 또는 자동차 올해? 그렇다면 장기 양도소득세로 인해 반품에 대한 매각을 보고해야 할 것입니다. 이는 양도소득세율이 보통 소득에 지불하는 세율보다 낮은 경우가 많기 때문에 투자 소득에 대한 보다 바람직한 범주가 될 수 있기 때문에 차이가 있습니다. 그러나 모든 자산이 이 혜택을 받을 수 있는 것은 아닙니다. 자본 이득은 과세되지만 실현될 때만 가능합니다. 즉, 자산이 매각될 때만 과세됩니다.

그 시점까지, 모든 이익은 실현되지 않은 것으로 간주되며 과세되지 않습니다.

안드로이드 xml 예제

다음 세 가지 레이아웃 유형은 Android XML 레이아웃의 루트 요소일 수 있습니다. HTML은 웹 사이트에 이미지와 텍스트를 배치하고 글꼴과 색상을 설정합니다. HTML에서 컴퓨터 게임을 만들 수 없습니다 (어쨌든 아주 좋은 게임), 그래서 더 많은 대화형 요소에 대 한 자바 스크립트 같은 설정 수 있습니다. 문제를 복잡하게 하기 위해서지만, 자바스크립트는 기술적으로 스크립팅 언어입니다! eXtensible 마크업 언어 또는 XML: 인터넷 기반 응용 프로그램에서 데이터를 인코딩하는 표준 방법으로 만든 태그 언어입니다. Android 응용 프로그램은 XML을 사용하여 레이아웃 파일을 만듭니다. HTML과 달리 XML은 대/소문자를 구분하며 각 태그를 닫아야 하며 공백을 유지합니다. 각 레이아웃 파일에는 View 또는 ViewGroup 개체여야 하는 루트 요소가 하나만 포함되어야 합니다. 루트 요소를 정의한 후에는 추가 레이아웃 개체 또는 위젯을 자식 요소로 추가하여 레이아웃을 정의하는 View 계층 구조를 점진적으로 빌드할 수 있습니다. 예를 들어, 다음은 세로 LinearLayout을 사용하여 TextView 및 단추를 보유하는 XML 레이아웃입니다. 예를 들어 일반 텍스트를 허용하는 경우 입력Type을 “텍스트”로 지정해야 합니다.

EditText 필드가 암호용인 경우 입력 유형을 “textPassword”로 지정해야 합니다. ViewGroup 클래스의 각 하위 클래스는 뷰 내에 중첩된 뷰를 표시하는 고유한 방법을 제공합니다. 다음은 Android 플랫폼에 내장된 보다 일반적인 레이아웃 유형 중 일부입니다. 저작권 © 2012-2019 vogella GmbH. 소프트웨어 예제의 무료 사용은 이클립스 공공 라이센스 2.0의 조건에 따라 부여됩니다. 이 튜토리얼은 크리에이티브 커먼즈 저작자 표시-비상업적-공유3.0 독일 라이선스에 따라 게시됩니다. 이 자습서에서는 XML 파일에 정의된 레이아웃을 기반으로 GUI를 만드는 방법에 대해 자세히 다다. 레이아웃에는 단추, 레이블, 텍스트 상자 등과 같은 모든 유형의 위젯이 포함될 수 있습니다.

다음은 LinearLayout을 갖는 XML 파일의 간단한 예입니다 – 당신은 예를 들어 레이아웃의 배경 속성에 그릴 수있는 할당 할 수 있습니다. HTML 레이아웃을 만들고 나중에 jQuery로 변경하는 것과 마찬가지로 이전 코스에서 수행한 것처럼 Android에서 XML 레이아웃을 만들고 나중에 Java 논리를 사용하여 변경할 수 있습니다. 그래픽 파일 외에도 Android는 XML 그리기 및 9 패치 그래픽을 지원합니다. XML 그리기 는 모양 (색상, 테두리, 그라데이션), 상태, 전환 등을 설명하는 데 사용됩니다. 새로운 옵션, 기능 또는 도구 또는 기술의 버전이 존재한다고 해서 모든 회사와 제품이 즉시 최신 옵션으로 마이그레이션되는 것은 아닙니다! 특히 이전 버전이나 기능이 여전히 자신의 요구를 성공적으로 제공하는 경우. 이것은 안드로이드 레이아웃과 다른 웹 개발 기술 모두에 간다. 당신은 의심 할 여지없이 여전히 현장에서 이러한 표준 레이아웃을 볼 수 있습니다.

안드로이드 카메라 어플 예제

이 샘플에서는 Android Beam을 통해 대용량 파일을 전송하는 방법을 보여 줍니다. NFC를 통해 초기 핸드셰이크 후, 파일 전송은 블루투스 또는 WiFi 다이렉트와 같은 보조 고속 통신 채널을 통해 진행됩니다. 이 기능은 안드로이드 4.1 (젤리 빈) 이상이 필요합니다. 기존 빔과 달리 응용 프로그램은 수신 장치에서 의도를 받지 않습니다. 대신 시스템은 파일을 디스크에 저장하고 사용자가 표준 ACTION_VIEW 의도를 사용하여 파일을 열도록 선택할 수 있다는 알림을 표시합니다. 이 샘플의 목표는 여러 폼 팩터에서 작동하는 오디오 미디어 앱을 구현하고 Android 휴대폰, 태블릿, Android Auto, Android Wear, Android TV, Google Cast 장치 및 Google에서 일관된 사용자 환경을 제공하는 방법을 보여 주는 것입니다. 도우미. 당신이 스마트 폰 사진에 대한 심각한 경우, 당신은 당신이 정말로 최고 품질의 스마트 폰 사진을 원하는 경우 안드로이드에 RAW 사진을 촬영하는 방법과 이유와 안드로이드에 RAW 사진을 촬영하는 방법과 이유RAW에서 촬영해야합니다, 당신은 RAW에서 촬영하고 싶을 것이다. 자세한 내용을 읽어보십시오. 이 압축되지 않은 처리되지 않은 형식은 카메라에서 절대적인 최고 품질의 이미지를 얻을 수 있도록 하므로 원하는 방식으로 처리할 수 있습니다. 그래서, 이 예제에서는, 우리는 더 자세한 방법으로 안 드 로이드 카메라 API의 사용을 볼 거 야, 그리고 사진을 찍고 우리의 모바일 장치의 전면 및 후면 카메라 사이 전환 하는 안 드 로이드 응용 프로그램을 개발.

activity_main.xml로 이동, 이 XML 파일에는 Android 앱의 디자인 코드가 포함되어 있습니다. XML 코드는 아래에 있습니다. 당신은 종종 전용 카메라에서 수동 모드에서 촬영 더 심각한 사진 작가 인 경우 5 디지털 SLR을 통해 미러리스 카메라를 고려하는 이유 5 디지털 SLR을 통해 미러리스 카메라를 고려하는 이유 5 디지털 SLR을 통해 미러리스 카메라를 고려하는 이유는 DSLR보다 미러리스 카메라보다 더 나은? 향상된 기술이 매니아와 전문가를 위해 더 실용적일 수 있도록 만들었습니까? 우리는 알아 자세한 모습을 가지고. 더 읽기, 기회는 당신이 당신의 스마트 폰에 그 같은 수동 컨트롤과 집에서 더 있을 것입니다. 우리는 성공적으로 안드로이드에서 카메라를 시작하는 응용 프로그램을 만들었습니다. 단계 1 안드로이드 스튜디오를 열고 새로운 안드로이드 스튜디오 프로젝트를 시작합니다. 안드로이드에 파이어 베이스 API를 보여주는 빠른 시작 샘플의 컬렉션입니다. 자세한 내용은 https://firebase.google.com 참조하십시오.

이 샘플에서는 Android 응용 프로그램에서 AdMob 배너 광고를 요청하고 표시하는 방법을 보여 줍니다. 응용 프로그램은 레이아웃의 하단에 배너와 하나의 “안녕하세요 세계”활동이 포함되어 있습니다. 이 예제에서는 Android 지원 라이브러리에서 DrawerLayout 위젯의 일반적인 사용을 보여 줍니다. 더 나은 카메라의 HDR 모드는 환상적인 하이 다이나믹 레인지 이미지를 생성합니다. 그것은 어떤 구성을 필요로하지 않습니다, 그것은 단지 다른 노출 설정에서 세 개의 이미지를 스냅하고 함께 혼합. 촬영 하는 동안 카메라를 안정적으로 유지 해야 합니다. 샘플은 안드로이드 빠른 오디오 경로에서 플레이어와 레코더를 만들고 루프 백 오디오에 연결하는 OpenSL ES를 사용하는 방법을 데모. 대부분의 Android 기기에는 대기 시간이 짧은 목적으로 조정된 최적화된 오디오 경로가 있습니다. 샘플은 매우 최적화된 이 오디오 경로(기본 오디오 경로, 낮은 대기 시간 경로 또는 빠른 오디오 경로라고도 함)에서 작동하도록 플레이어/레코더를 만듭니다. 응용 프로그램은 다음과 같은 구성에 대해 검증됩니다 : * 안드로이드 L 안드로이드 원 * 안드로이드 M 넥서스 5, 넥서스 9 이 샘플은 CMake 지원과 함께 새로운 안드로이드 스튜디오를 사용하고, 안드로이드 스튜디오 버전 2.2.0공유 stl lib를 사용하는 방법을 보여줍니다, 참조 CMakeLists.txt 세부 사항에 대한 네이티브 활동은 GLES 2.0 컨텍스트를 초기화하고 네이티브 활동을 사용하여 C 코드에서 가속도계 데이터를 읽는 안드로이드 샘플입니다. 이 샘플은 C ++ 지원과 새로운 안드로이드 스튜디오 CMake 플러그인을 사용합니다.

시스템소프트웨어 예제

전통적으로 펌웨어는 회사라는 단어로 표시된 고정 소프트웨어를 의미하는 데 사용됩니다. 비휘발성 칩에 설치되었으며 미리 프로그래밍된 새 칩으로 교체해야만 업그레이드할 수 있습니다. 펌웨어 업그레이드는 OS 제조업체가 아닌 장치 제조업체에서 가져옵니다. 사용자가 컴퓨터 하드웨어에 새 하드웨어 및 소프트웨어 지원을 받으려면 필요합니다. 펌웨어는 장치가 이전 및 새로운 운영 체제 및 응용 프로그램과 함께 더 잘 작동 할 수 있도록합니다. 시스템 소프트웨어는 컴퓨터의 하드웨어뿐만 아니라 응용 프로그램 및 실제 하드웨어와 응용 프로그램 사이의 인터페이스를 실행하는 컴퓨터 프로그램입니다. 시스템 소프트웨어의 예로는 컴퓨터에서 다른 모든 프로그램을 관리하는 운영 체제가 있습니다. 시스템 소프트웨어는 컴퓨터전원이 켜질 때마다 메모리에 로드되는 소프트웨어의 첫 번째 계층입니다. 비즈니스 또는 개인 용도에 적합한 응용 프로그램 소프트웨어를 선택하면 기능과 효율성이 향상될 수 있습니다. 옵션을 이해하지 못하면 비즈니스에 도움이 되지 않는 것을 초래할 수 있으며, 더 나쁜 것은 생산성을 떨어뜨리고 시간과 자원을 희생시킬 수 있습니다. 필요에 맞게 특별히 설계된 기성 앱 또는 사용자 지정 앱 빌드등 사용할 수 있는 응용 프로그램 소프트웨어 유형을 이해하면 모든 옵션을 보다 명확하게 평가하는 데 도움이 됩니다. 응용 프로그램 소프트웨어는 프로그램으로 생각되지만 컴퓨터에서 실행되는 모든 것이 될 수 있다는 점에 유의해야합니다.

아래 표에는 프로그램이 아닌 소프트웨어를 명확히 하는 프로그램 열도 포함되어 있습니다. 다음은 컴퓨터가 관련 프로그램의 예와 함께 설치했을 수 있는 다양한 종류의 소프트웨어 목록입니다. 자세한 내용을 보려면 아래 링크를 클릭하십시오. 응용 프로그램 플랫폼은 응용 프로그램에 서비스를 제공하며 응용 프로그램이 실행하는 데 사용하는 도구 집합으로 구성됩니다. 사실상 모든 응용 프로그램은 데이터베이스 관리 소프트웨어에서 클라우드에 이르기까지 실행하는 다른 소프트웨어에 의존합니다. 이 소프트웨어 그룹은 우리가 응용 프로그램 플랫폼이라고 부르는 것입니다. 응용 프로그램 플랫폼은 장치의 단일 사용자 응용 프로그램부터 클라우드의 수천 명의 사용자 응용 프로그램에 이르기까지 모든 스타일의 응용 프로그램을 지원해야 합니다. 응용 프로그램 플랫폼에는 일반적으로 운영 체제, 실행 서비스(예: 소프트웨어 실행을 위한 라이브러리), 데이터 서비스, 클라우드 서비스 및 개발 도구가 포함됩니다.

교육용 소프트웨어는 새로운 콘텐츠, 개념 또는 프로세스의 교육 및 학습을 용이하게 하는 소프트웨어 유형입니다. PM(프로젝트 관리) 소프트웨어는 프로젝트를 계획하고 실행하고 해당 프로젝트와 관련된 리소스를 관리하도록 설계된 비즈니스 소프트웨어의 한 유형입니다. PM 소프트웨어는 사용자가 일정 예약, 작업 할당, 예산 및 비용 관리, 진행 상황 문서화 및 결과 보고와 같은 기능을 지원합니다. Quick Base 사용자가 응용 프로그램 소프트웨어 구축 프로세스에 익숙해지도록 돕기 위해 고안된 방법 비디오 및 자습서를 살펴보십시오. 컴퓨터 프로그래머(또는 여러 컴퓨터 프로그래머)는 프로그래밍 언어를 사용하여 소프트웨어를 구조화된 데이터에서 작동하는 방법을 정의하는 지침을 작성합니다. 그런 다음 프로그램을 해석하거나 기계 코드로 컴파일할 수 있습니다. 소프트웨어가 컴퓨터에 설치되면 발견된 오류를 수정하기 위해 업데이트해야 할 수 있습니다.

전자 서명 예제

디지털 서명은 디지털 서명 인증서와 혼동해서는 안 됩니다. 신뢰할 수 있는 기관에서 발급하고 디지털 서명에 대한 공개 키의 소유자임을 증명하는 문서입니다. 디지털 인증서는 제한된 시간 동안만 유효합니다. 디지털 서명은 전자 “지문”과 같습니다. 코딩된 메시지의 형태로 디지털 서명은 서명인을 기록된 트랜잭션의 문서와 안전하게 연결합니다. 디지털 서명은 PKI(공개 키 인프라)라고 하는 표준 형식의 허용 형식을 사용하여 최고 수준의 보안 및 보편적 수용을 제공합니다. 전자 서명(eSignature)의 특정 서명 기술 구현입니다. 이 유형의 생체 인식 측정은 암호로 쓸모가 없습니다. 그러나, 그들은 일종의 전자 서명으로 서비스 될 수 있습니다., 그들은 너무 쉽게 스푸어 수 있다는 것을 제외 하 고 그들은 거의 보장을 수행할 수 있습니다 그 사칭 문서에 서명 한 사람이 실제로 한 사람. 안타깝게도, 각 신호는 문서에 서명을 `부착`하는 컴퓨터 시스템에 생성되고 제출된 전자 신호를 재생하여 쉽게 스푸어할 수 있습니다. 도청 기술은 종종 이것에 충분합니다. 지문의 경우, 일본의 교수와 일부 대학원생은 일반 주방 화학 (거미 곰 사탕 젤)과 약간의 독창성으로 사용할 수있는 모든 상업적으로 사용 가능한 지문 판독기를 스푸핑 할 수있었습니다.

모든 판독 장치를 성공적으로 스푸핑하기 위해 실제 손가락이 필요하지 않았습니다. [36] 또 다른 예에서 베트남 의 연구원들은 2017년 후반에 특별히 제작된 마스크가 iPhone X.[37] 디지털 서명(필기 서명)에서 Apple의 Face ID 프로그램을 이길 수 있는 방법을 성공적으로 시연했습니다. DocuSign과 같은 디지털 서명 솔루션 공급자는 PKI라는 특정 프로토콜을 따릅니다. PKI는 공급자가 수학적 알고리즘을 사용하여 키라는 두 개의 긴 숫자를 생성하도록 요구합니다. 하나의 키는 공용이고 한 키는 비공개입니다. 오늘날의 기업에 미치는 중대한 영향에도 불구하고 많은 사람들은 전자 서명이 무엇인지, 현대 거래를 가속화하고 보호하는 방법, 디지털 시대의 시장 진출 전략에 미치는 전반적인 영향에 대해 잘 모르고 있습니다. 디지털 서명 소프트웨어는 해시라고 하는 문서의 압축된 버전을 생성하며, 이 문서는 서명인증서의 키를 사용하여 암호화됩니다. 이 암호화된 “해시”는 서명입니다. 서명의 유효성을 검사하기 위해 해시는 서명자의 키로 해독되고 원본 문서를 비교합니다. 전자 서명에 대해 이야기할 때 디지털화된 서명(스캔된 서명)을 의미하는 경우가 많습니다. 그러나 그것의 법적 측면도 있다.

기존의 전자 서명 관련 규정을 준수하려면 전자 서명이 있어야 합니다: 이러한 서명 유형 및 보안 수준은 아래에서 자세히 설명합니다. 기본 수준에서 전자 문서의 모든 표시를 사용하여 해당 문서의 내용을 승인하거나 수락하려는 서명자의 의도를 캡처할 수 있습니다. “마크”의 형태 또는 생성 된 방법은 중요하지 않습니다. 중요한 것은 누가 마크를 만들었는지, 문서가 나중에 변경되지 않았다는 것을 증명하는 것입니다. DocuSign은 서명자가 DocuSign 익스프레스 디지털 서명을 사용하여 서명할 때 CA이기도 합니다. 즉, DocuSign을 인증 기관으로 사용하여 디지털 서명이 있는 문서를 언제든지 보낼 수 있습니다.

자바 클래스 생성 예제

Object – 개체는 상태와 동작을 가있습니다. 예: 개는 꼬리를 흔들고, 짖고, 먹고 , 행동뿐만 아니라 색깔, 이름, 품종뿐만 아니라 상태상태입니다. 개체는 클래스의 인스턴스입니다. Java는 클래스의 인스턴스를 하나만 만들 수 있는 Singleton 클래스도 지원합니다. 클래스는 개별 개체가 만들어지는 사양 또는 Blueprint입니다. 클래스에는 클래스의 개체에 대해 가능한 작업을 정의하는 개체의 상태 와 메서드를 나타내는 필드가 포함되어 있습니다. 클래스에는 생성자, 클래스의 인스턴스 또는 개체를 만드는 데 사용 되는 특수 메서드가 있습니다. 생성자가 정의하지 않은 경우 기본 생성자가 사용됩니다. 생성자 메서드는 반환 값 없이 클래스 이름으로 동일한 이름을 갖습니다.

생성자는 개체의 상태를 초기화하는 데 사용되는 매개 변수를 가질 수 있습니다. 이 예제에서 클래스의 인스턴스 변수 및 메서드에 액세스하는 방법을 설명합니다. 먼저 메모장을 열고 다음 코드를 추가합니다. 이 클래스는 Employee 클래스이고 클래스는 공용 클래스임을 기억하십시오. 이제 Employee.java라는 이름으로 이 소스 파일을 저장합니다. MyClass의 개체를 만들려면 클래스 이름을 지정하고 개체 이름 다음에 새 키워드를 사용합니다. 객체 지향 기능을 가지고 있는 언어로서 Java는 다음과 같은 기본 개념을 지원합니다 – 익명은 단순히 무명의 것을 의미합니다. 참조가 없는 개체를 익명 개체라고 합니다. 개체 를 만들 때에만 사용할 수 있습니다.

상태 및 동작이 있는 엔터티를 의자, 자전거, 마커, 펜, 테이블, 자동차 등과 같은 개체라고 합니다. 물리적 또는 논리적(유형 및 무형)일 수 있습니다. 무형 객체의 예는 뱅킹 시스템입니다. 우리는 다른 자바 파일 또는 단일 자바 파일에 여러 클래스를 가질 수 있습니다. 단일 Java 소스 파일에서 여러 클래스를 정의하는 경우 main() 메서드가 있는 클래스 이름으로 파일 이름을 저장하는 것이 좋습니다. 클래스는 객체가 생성되는 사용자 정의 청사진 또는 프로토타입입니다. 한 형식의 모든 개체에 공통적인 속성 또는 메서드 집합을 나타냅니다. 일반적으로 클래스 선언에는 위에서 언급한 클래스 유형 외에도 Java에는 내부 클래스 및 익명 클래스라는 몇 가지 특수 클래스가 있습니다. 참고 : 모든 클래스에는 하나 이상의 생성자가 있습니다. 클래스가 명시적으로 선언하지 않으면 Java 컴파일러는 기본 생성자라고도 하는 인수 없음 생성자를 자동으로 제공합니다.

이 기본 생성자는 클래스 부모의 인수 없음 생성자(;) 라는 하나의 문만 포함하거나 클래스에 다른 부모가 없는 경우 Object 클래스 생성자가 직접 또는 간접적으로 모든 클래스의 부모이기 때문에)를 호출합니다. 클래스의 정의가 포함된 파일 이름은 항상 공용 클래스 이름과 동일하며 확장명은 .java로 파일에 Java 소스 코드가 포함되어 있는지 식별합니다. Java에서 패키지와 클래스 이름을 포함하는 정규화된 이름이 지정되면 컴파일러는 소스 코드 또는 클래스를 쉽게 찾을 수 있습니다. Import 문은 컴파일러가 특정 클래스를 찾을 수 있는 적절한 위치를 제공하는 방법입니다.

재귀 예제

단일 자체 참조만 포함하는 재귀는 단일 재귀라고 하며 여러 자체 참조를 포함하는 재귀는 다중 재귀라고 합니다. 단일 재귀의 표준 예는 선형 검색과 같은 목록 통과를 포함하거나 요인 함수를 계산하는 반면, 다중 재귀의 표준 예는 깊이 우선 검색과 같은 트리 순회를 포함합니다. 재귀 함수는 프로그래머가 최소한의 코드를 사용하여 효율적인 프로그램을 작성할 수 있기 때문에 컴퓨터 과학에서 일반적입니다. 단점은 제대로 작성되지 않으면 무한 루프 및 기타 예기치 않은 결과가 발생할 수 있다는 것입니다. 예를 들어 위의 예에서 숫자가 0 이하이거나 9보다 크면 함수가 종료됩니다. 적절한 케이스가 실행을 중지하는 함수에 포함되지 않으면 재귀가 영원히 반복되어 프로그램이 충돌하거나 더 심해져 전체 컴퓨터 시스템이 중단됩니다. 재귀의 가장 기본적인 예와 여기에 제시된 대부분의 예제는 함수가 자신을 호출하는 직접 재귀를 보여 줍니다. 간접 재귀는 함수가 그 자체가 아니라 함수가 호출한 다른 함수(직접 또는 간접적으로)에 의해 호출될 때 발생합니다. 예를 들어 f가 f를 호출하는 경우, 즉 직접 재귀이지만 f가 f를 호출하는 g를 호출하면 f. 세 개 이상의 함수 체인의 간접 재귀가 가능합니다. 예를 들어 함수 1 은 함수 2, 함수 2 호출 함수 3, 함수 3 호출 함수 1을 다시 호출합니다. 재귀에 대한 재귀 코딩 연습에 대한 퀴즈: 재귀 재귀 연습 문제에 대한 모든 문서 솔루션에 대한 모든 문서는 파일 시스템의 디렉터리 구조와 관련된 모든 것에 대해 어떻게 설명합니다. 파일을 재귀적으로 찾고, 파일을 삭제하고, 디렉토리를 만드는 등의 재귀 알고리즘은 재귀 알고리즘으로 대체할 수 있습니다.

[20]. 재귀 알고리즘을 대체하는 한 가지 방법은 스택 메모리 대신 힙 메모리를 사용하여 시뮬레이션하는 것입니다. [21] 대안은 전적으로 비재귀 방법을 기반으로 대체 알고리즘을 개발하는 것입니다. [22] 예를 들어, Rich Salz의 와일드매트 알고리즘과 같은 와일드카드 일치를 위한 재귀 알고리즘[23]은 한때 일반적이었습니다. 와일드카드 알고리즘과 일치하는 Krauss와 같은 동일한 목적을 위한 재귀 알고리즘은 재귀의 단점을 피하기 위해 개발되었으며[24] 테스트 수집 및 프로파일링 성능과 같은 기술에 따라 점차적으로 개선되었습니다. [25] 자신과 유사한 작은 부품을 포함하는 것들의 좋은 예: 다중 재귀는 때때로 단일 재귀로 변환될 수 있습니다(원하는 경우 반복으로 변환). 예를 들어 Fibonacci 시퀀스를 순진하게 계산하는 것은 여러 반복이지만 각 값에는 두 개의 이전 값이 필요하므로 두 개의 연속값을 매개 변수로 전달하여 단일 재귀로 계산할 수 있습니다. 이것은 더 자연스럽게 코어커션으로 구성되며, 초기 값에서 구축되고, 각 단계의 연속적인 값에서 추적됩니다. 보다 정교한 예제는 여러 번의 재귀가 아닌 반복적인 트리 순회를 허용하는 스레드된 이진 트리를 사용하는 것입니다.

재귀 문제는 추적해야 하는 이전 상태 때문에 본질적으로 재귀적입니다. 한 가지 예는 깊이 우선 검색에서와 같이 트리 순회입니다. 재귀 및 반복 메서드가 모두 사용되지만[19] 목록의 목록 통과 및 선형 검색과 대조되는 데, 이는 독창적인 재귀적이며 따라서 자연스럽게 반복되는 방법입니다. 다른 예로는 Quicksort와 같은 분할 및 정복 알고리즘과 Ackermann 함수와 같은 함수가 있습니다. 이러한 모든 알고리즘은 명시적 스택의 도움으로 반복적으로 구현할 수 있지만 스택 관리에 관련된 프로그래머의 노력과 결과 프로그램의 복잡성은 반복 솔루션의 장점보다 큽니다. 재귀 알고리즘은 반복되는 함수 호출 및 반환의 오버헤드로 인해 작은 데이터에 비효율적입니다.

#define 매크로 예제

매크로 _toupper를 참조하면 컴파일러는 매크로와 해당 매개 변수를 지시문의 대체 목록으로 대체하여 대체 목록의 각 매개 변수 발생에 대한 매크로 참조 인수를 대체합니다. 반면 에이터처는 실제 상수입니다. 스위치 대/소문자 및 배열 크기를 정의하는 데 사용할 수 있습니다. 그러나 이러한 단점은 정수만 정의할 수 있다는 것입니다. 문자열 상수 및 부동 점 상수에 사용할 수 없습니다. 따라서 결국 #define 상수는 코드에서 상수를 만드는 통합된 방법을 원하는 경우에만 유일한 옵션입니다. 결과 코드는 정확하지만 오히려 바보 같아 보입니다. pos-form 및 0-폼을 생략할 때 더 나은 코드를 생성 하기 위해 매크로 정의 다시 작성할 수 있습니다., 또는 하나는 단순히 코드 자체를 개선 하기 위해 충분히 스마트 컴파일러를 제공 하는 공통 Lisp 구현에 의존 수 있습니다. 인수는 기호여야 합니다.

심볼에 매크로 정의인 전역 함수 정의가 있는 경우 확장 함수(두 인수, 매크로 호출 양식 및 환경의 함수)가 반환됩니다. 기호에 전역 함수 정의가 없거나 일반 함수또는 매크로가 아닌 특수 한 형식으로 정의가 있는 경우 nil이 반환됩니다. 함수 매크로 확장은 확장 함수를 호출하는 가장 좋은 방법입니다. 반면에 매크로로 이 작업을 수행하려고 하면 매크로에 정의된 변수가 다른 변수와 동일한 함수에 있기 때문에 컴파일 오류가 발생합니다. 을 참조하십시오. 이 매크로는 다음과 같이 정의됩니다: 인수가 있는 매크로를 만들려면 매크로 이름 다음에 쉼표로 구분된 괄호안에 넣습니다. 자체 수정 매크로를 원한다면 m4와 같은 멋진 매크로 프로세서를 사용해야합니다. X3J13은 1988년 3월(MACRO-FUNCTION-ENVIRONMENT)에 매크로 함수에 선택적 환경 인수를 추가하기로 결정했습니다. 그러나 무언가를 사용하기로 결정했다면 매크로를 정의하기위한 좋은 규칙을 따르십시오.

이러한 종류의 속임수는 주로 디버깅에 사용됩니다. 어설션 매크로는 기본 제공 매크로 __FILE___(현재 소스 파일로 인용된 문자열로 확장) 및 __LINE__(인용되지 않은 현재 소스 줄 번호로 확장)을 사용하여 잘못된 매크로를 인쇄하는 보다 정교한 버전입니다. 표현뿐만 아니라 소스에서 의 위치도 볼 수 있습니다. ## 전처리자 연산자는 다음 예제와 같이 두 개의 토큰을 세 번째 유효한 토큰으로 연결하는 데 사용됩니다: 매크로 참조를 지정할 때 이러한 규칙을 따르십시오: setf는 매크로 함수와 함께 사용하여 기호의 전역 함수 정의로 매크로를 설치할 수 있습니다. : 인터프리터에 의해 양식이 실행되는 경우 심볼 산술 연산의 함수 정의가 발생하며, 이 함수는 대략 2인수 확장 함수와 동일한 매크로가 매크로의 매우 강력한 기능입니다. 이를 사용하여 사용자 고유의 구문을 만들 수 있습니다. defmacro를 사용하여 매크로를 재정의하거나(예: 잘못된 정의의 수정된 버전을 설치하거나) 함수를 매크로로 재정의할 수 있습니다. 특수 양식의 이름을 매크로로 재정의하는 것은 오류입니다(표 5-1 참조). 제한된 어휘 범위에 대해 매크로 정의를 설정하는 매크로렛을 참조하십시오. # 사전 처리자 연산자는 다음에 오는 인수를 문자열 리터럴로 변환하는 데 사용됩니다. 전처리기 연산자 #은 함수와 같은 매크로 정의에서만 사용할 수 있습니다.

예를 들어, 어떤 선택을 하든 상관없습니다. 가장 인기있는 것은 모든 매크로 이름 대문자를 정의하는 것입니다. 그래서 당신은 그 규칙을 따를 수 있습니다. 바라건대, 이제 함수와 매크로 사이에 차이가 있음을 이해합니다.