GitHub Copilot 코드 완성 제안을 사용하여 코드 생성
GitHub Copilot은 다양한 프로그래밍 언어와 다양한 프레임워크에 대한 코드 완료 제안을 제공할 수 있지만, 특히 Python, JavaScript, TypeScript, Ruby, Go, C# 및 C++에서 잘 작동합니다. 코드 줄 완료는 작성 중인 코드의 컨텍스트를 기반으로 생성됩니다. GitHub Copilot에서 제공하는 제안을 수락, 거부 또는 부분적으로 수락할 수 있습니다.
GitHub Copilot은 코드 줄 완료를 생성하는 두 가지 방법을 제공합니다.
주석에서: 생성하려는 코드를 설명하는 주석을 작성하여 코드 줄 완료를 생성할 수 있습니다. GitHub Copilot은 사용자가 작성한 주석을 기반으로 코드 완료 제안을 제공합니다.
코드에서: 코드 줄을 시작하거나 완료된 코드 줄 다음에 Enter 키를 눌러 코드 줄 완료를 생성할 수 있습니다. GitHub Copilot은 작성한 코드를 기반으로 코드 완료 제안을 제공합니다.
GitHub Copilot을 사용하여 주석에서 코드 줄 완료 생성
GitHub Copilot은 주석과 앱의 기존 컨텍스트를 기반으로 코드 완료 제안을 생성합니다.
주석을 사용하여 코드 조각, 메서드, 데이터 구조 및 기타 코드 요소를 설명할 수 있습니다.
다음 코드 조각이 있다고 가정합니다.
namespace ReportGenerator;
class QuarterlyIncomeReport
{
static void Main(string[] args)
{
// create a new instance of the class
QuarterlyIncomeReport report = new QuarterlyIncomeReport();
// call the GenerateSalesData method
// call the QuarterlySalesReport method
}
public void QuarterlySalesReport()
{
Console.WriteLine("Quarterly Sales Report");
}
}
예를 들어 다음 주석을 사용하여 데이터 구조를 만들 수 있습니다.
// public struct SalesData. Include the following fields: date sold, department name, product ID, quantity sold, unit price
GitHub Copilot는 코드 주석 및 편집기에서 열려 있는 코드 파일에 따라 하나 이상의 코드 완성 제안을 생성합니다.
데이터 구조의 필드를 선언하는 데 사용되는 데이터 형식을 확인합니다. GitHub Copilot은 기존 코드와 코드 주석을 기반으로 데이터 형식과 변수 이름을 선택합니다. GitHub Copilot은 애플리케이션에서 변수를 사용하는 방법을 확인하고 그에 따라 데이터 형식을 정의합니다.
GitHub Copilot이 두 개 이상의 제안을 생성하면 >
단추 왼쪽에 있는 왼쪽 또는 오른쪽 화살표(<
또는 )를 선택하여 제안을 순환할 수 있습니다. 이를 통해 요구 사항에 가장 적합한 제안을 검토하고 선택할 수 있습니다.
원하는 것과 정확히 일치하지 않는 코드 완성 제안을 수락해도 됩니다. 그러나 제안을 "수정"하는 데 필요한 변경 내용은 명확해야 합니다. 이 경우 일부 데이터 형식은 원하는 형식이 아니지만 제안된 자동 완성을 수락한 후 조정할 수 있습니다.
제안된 옵션이 필요한 옵션과 유사하지 않은 경우 두 가지를 시도해 볼 수 있습니다. 다른 제안 목록이 포함된 새 편집기 탭을 열려면 Ctrl + Enter 키를 누릅니다. 이 바로 가기 키 조합은 최대 10개의 추가 제안이 포함된 새 탭을 엽니다. 각 제안 뒤에는 제안을 수락하는 데 사용할 수 있는 단추가 잇습니다. 제안을 수락하면 탭이 자동으로 닫힙니다. 다른 옵션은 Esc 키를 눌러 제안을 해제하고 다시 시도하는 것입니다. 코드 주석을 조정하여 GitHub Copilot이 사용할 더 많은 컨텍스트를 제공할 수 있습니다.
비고
GitHub Copilot은 경우에 따라 단계적으로 제안할 수 있습니다. 이런 일이 발생하면 Enter 키를 눌러 Tab 키를 누른 후 제안의 추가 단계를 볼 수 있습니다.
제안된 데이터 구조를 수락하려면 Tab 키를 누르거나 수락을 선택합니다.
필드 데이터 형식을 수정하려면 다음과 같이 코드를 업데이트합니다.
public struct SalesData
{
public DateOnly dateSold;
public string departmentName;
public int productID;
public int quantitySold;
public double unitPrice;
}
코드 완성 제안을 빠르게 조정하면 원하는 코드를 빌드하는 데 도움이 됩니다. 코드베이스의 상당 부분을 계속 개발해야 하는 경우 개발 프로세스 초기에 수정하는 것이 특히 중요합니다. 후속 코드 완성은 이미 작성한 코드를 기반으로 하므로 코드가 가능한 한 정확한지 확인하는 것이 중요합니다.
GitHub Copilot을 사용하여 주석에서 코드 줄 완료 생성
GitHub Copilot은 주석과 앱의 기존 컨텍스트를 기반으로 코드 완료 제안을 생성합니다. 주석을 사용하여 코드 조각, 메서드, 데이터 구조 및 기타 코드 요소를 설명할 수 있습니다.
이 연습 섹션을 완료하려면 다음 단계를 따릅니다.
Program.cs 파일에서
Main
메서드 아래에 두 개의 빈 코드 줄을 만듭니다.테스트 데이터를 만드는 데 사용할 수 있는 데이터 구조를 만들려면 다음 코드 주석을 만든 후 Enter 키를 누릅니다.
// public struct SalesData. Include the following fields: date sold, department name, product ID, quantity sold, unit price
GitHub Copilot은 코드 주석과 앱에서 찾은 기존 코드를 기반으로 하나 이상의 코드 완료 제안을 생성합니다.
잠시 시간을 내어 GitHub Copilot에서 제공하는 코드 완료 제안을 검토합니다.
비고
GitHub Copilot이 데이터 구조가 아닌 메서드에 대한 제안을 생성하는 경우 public str을 입력하고 코드 완성 제안이 업데이트될 때까지 기다립니다. GitHub Copilot은 추가 정보를 사용하여 제안을 개선합니다.
데이터 구조의 필드를 선언하는 데 사용되는 데이터 형식을 확인합니다. GitHub Copilot은 기존 코드와 코드 주석을 기반으로 데이터 형식과 변수 이름을 선택합니다. GitHub Copilot은 애플리케이션에서 변수를 사용하는 방법을 확인하고 그에 따라 데이터 형식을 정의합니다.
GitHub Copilot이 두 개 이상의 제안을 생성하면
>
단추 왼쪽에 있는 왼쪽 또는 오른쪽 화살표(<
또는 )를 선택하여 제안을 순환할 수 있습니다. 이를 통해 요구 사항에 가장 적합한 제안을 검토하고 선택할 수 있습니다.원하는 것과 정확히 일치하지 않는 코드 완성 제안을 수락해도 됩니다. 그러나 제안을 "수정"하는 데 필요한 변경 내용은 명확해야 합니다. 이 경우 일부 데이터 형식은 원하는 형식이 아니지만 제안된 자동 완성을 수락한 후 조정할 수 있습니다.
제안된 옵션이 필요한 옵션과 유사하지 않은 경우 두 가지를 시도해 볼 수 있습니다. 다른 제안 목록이 포함된 새 편집기 탭을 열려면 Ctrl + Enter 키를 누릅니다. 이 바로 가기 키 조합은 최대 10개의 추가 제안이 포함된 새 탭을 엽니다. 각 제안 뒤에는 제안을 수락하는 데 사용할 수 있는 단추가 잇습니다. 제안을 수락하면 탭이 자동으로 닫힙니다. 다른 옵션은 Esc 키를 눌러 제안을 해제하고 다시 시도하는 것입니다. 코드 주석을 조정하여 GitHub Copilot이 사용할 더 많은 컨텍스트를 제공할 수 있습니다.
비고
GitHub Copilot은 경우에 따라 단계적으로 제안할 수 있습니다. 이런 일이 발생하면 Enter 키를 눌러 Tab 키를 누른 후 제안의 추가 단계를 볼 수 있습니다.
제안된 데이터 구조를 수락하려면 Tab 키를 누르거나 수락을 선택합니다.
필드 데이터 형식을 수정하려면 다음과 같이 코드를 업데이트합니다.
public struct SalesData { public DateOnly dateSold; public string departmentName; public int productID; public int quantitySold; public double unitPrice; }
코드 완성 제안을 빠르게 조정하면 원하는 코드를 빌드하는 데 도움이 됩니다. 코드베이스의 상당 부분을 계속 개발해야 하는 경우 개발 프로세스 초기에 수정하는 것이 특히 중요합니다. 코드 완성은 기존 코드를 기반으로 하므로 코드가 가능한 한 정확한지 확인하는 것이 중요합니다.
SalesData
데이터 구조 아래에 두 개의 빈 코드 줄을 만듭니다.SalesData
데이터 구조를 사용하여 테스트 데이터를 만드는 메서드를 만들려면 다음 코드 주석을 작성한 후 Enter 키를 누릅니다./* the GenerateSalesData method returns 1000 SalesData records. It assigns random values to each field of the data structure */
잠시 시간을 내어 GitHub Copilot에서 제공하는 코드 완료 제안을 검토합니다.
GenerateSalesData
메서드는SalesData
개체의 배열을 반환하도록 설계되었습니다. 이 메서드는SalesData
데이터 구조의 각 필드에 임의의 값이 할당된 테스트 데이터 레코드 1,000개를 생성합니다.GitHub Copilot 및 GitHub Copilot Chat에서 제안한 제안을 항상 검토해야 하며, 그것이 올바르게 보일 때도 예외는 아닙니다.
비고
GitHub Copilot이 완료된
GenerateSalesData
메서드가 아닌 단일 코드 줄을 제안하는 경우 Ctrl + Enter 키를 눌러 GitHub Copilot 제안 탭을 엽니다. 새 탭에서 제안을 검토합니다. 다음 단계에서는 "제안 수락 #" 단추를 사용하여 제안을 수락합니다. GitHub Copilot은 경우에 따라 제안을 증분 방식으로 제공합니다. 코드 완성을 증분 방식으로 수락할 수 있지만 GitHub Copilot 제안 탭을 사용하여 전체 제안을 검토한 후 수락 또는 취소를 결정하는 것이 좋습니다.코드 완성 제안을 스크롤하여 요구 사항에 가장 적합한 항목을 선택합니다.
코드 완성을 허용하려면 Tab 키를 누릅니다.
코드 완성 제안에는
DateSold
필드를 생성하는 데 사용된 코드의 구문 오류가 포함되어 있습니다.DateOnly
은 올바른 순서로 나열되어야 하는 세 개의 정수 값을 허용합니다. 연도, 월, 일.DateSold
필드를 생성하는 데 사용된 코드에 대해 단일 연도를 지정하려면 다음과 같이 코드 행을 업데이트합니다.salesData[i].DateSold = new DateOnly(2023, random.Next(1, 13), random.Next(1, 29));
필요한 경우 다음 코드 조각과 일치하도록 다른 코드 줄을 조정합니다.
public SalesData[] GenerateSalesData() { SalesData[] salesData = new SalesData[1000]; Random random = new Random(); for (int i = 0; i < salesData.Length; i++) { salesData[i].dateSold = new DateOnly(2023, random.Next(1, 13), random.Next(1, 29)); salesData[i].departmentName = "Department " + random.Next(1, 11); salesData[i].productID = random.Next(1, 101); salesData[i].quantitySold = random.Next(1, 101); salesData[i].unitPrice = random.NextDouble() * 100; } return salesData; }
코드 주석에서 코드를 생성하는 기능은 GitHub Copilot의 강력한 기능입니다. 단 두 개의 코멘트만으로 데이터 구조와 테스트 데이터를 생성하는 메서드를 생성할 수 있었습니다.
GitHub Copilot을 사용하여 코드 줄 완료 생성
GitHub Copilot은 입력한 코드를 기반으로 코드 줄 완료를 생성할 수 있습니다. 다음 두 가지 방법으로 코드 줄 완료를 생성할 수 있습니다.
- 코드 줄 입력을 시작한 다음 GitHub Copilot이 완료되지 않은 코드 줄에 대한 자동 완료를 제안할 때까지 기다립니다.
- 전체 코드 줄을 입력하고 Enter 키를 누른 후 GitHub Copilot이 다음 코드 줄에 대한 자동 완료를 제안할 때까지 기다립니다.
비고
GitHub Copilot은 입력한 코드와 앱 내 코드에서 정의한 컨텍스트를 기반으로 제안된 코드 완료를 생성합니다. 앱에서 사용할 수 있는 코드가 많을수록 응답을 생성할 때 GitHub Copilot의 컨텍스트가 더 높습니다. GitHub Copilot는 기존 코드에 대한 응답을 기반으로 할 수 있으므로 코드의 품질이 중요합니다. 기존 코드의 양과 품질이 높아짐에 따라 GitHub Copilot에서 제안하는 코드 줄 완료의 품질과 안정성도 높아집니다. GitHub Copilot는 특히 관련 구성 요소 시퀀스를 생성해야 하는 경우 일반적인 프로그래밍 작업 및 패턴에 대한 코드 줄 완성을 생성하는 데 유용합니다.
연습의 이 부분에서는 QuarterlySalesReport
메서드를 사용합니다.
완료해야 하는 작업은 다음과 같습니다.
-
SalesData
개체 컬렉션을 허용하는 매개 변수로 메서드 생성자를 업데이트합니다. - GitHub Copilot을 사용하여 분기별 보고서에 대한 판매 데이터를 처리하는 코드 줄 완료를 생성합니다.
- 앱을 실행하고 분기별 판매 보고서를 검토합니다.
이 연습 섹션을 완료하려면 다음 단계를 따릅니다.
다음과 같이
QuarterlySalesReport
의 메서드 생성자를 업데이트합니다.public void QuarterlySalesReport(SalesData[] salesData)
개발에 필요한 코드를 생각해 보세요.
개념은 간단합니다. 코드에서 판매 데이터를 기반으로 분기별 매출을 계산한 다음 보고서를 작성하려고 합니다. 그렇게 하려면 코드에서 다음을 수행해야 합니다.
-
salesData
컬렉션을 반복합니다. - 판매된 수량과 단가를 기준으로 각 판매 금액을 계산합니다.
- 판매 날짜를 사용하여 판매가 속한 분기를 확인합니다.
- 분기별 매출을 합산합니다.
- 분기별 매출 보고서를 작성합니다.
한 가지 옵션은
foreach
루프에 대한 코드 입력을 시작한 다음 GitHub Copilot이 제안하는 내용을 확인하는 것입니다.-
QuarterlySalesReport
메서드에서 코드 블록 맨 위에 새로운 코드 줄을 만드세요.새 코드 줄과
Console.WriteLine()
이 포함된 코드 줄 사이에 빈 코드 줄이 하나 이상 있어야 합니다.코드 줄 완료를 생성하려면
foreach (
를 입력한 다음 GitHub Copilot이 코드 줄 완료 옵션을 제안할 때까지 기다립니다.GitHub Copilot에서 제안한 코드 완료를 검토합니다.
제안된 코드 완성은 원하는 것이 아닙니다.
GitHub Copilot에서는
foreach
를 반복하는salesData
루프를 제안하지만 루프 내부에는 분석이나 계산이 없습니다. 제안된 코드에는 원하지 않거나 필요하지 않은 문이 포함되어Console.WriteLine
있습니다.GitHub Copilot이
Console.WriteLine
문을 제안하는 이유를 생각해 보세요.GitHub Copilot은 코드 컨텍스트를 기반으로 코드 완료 제안을 생성한다는 점을 기억합니다. 이 경우 GitHub Copilot에서 고려해야 할 코드가 실제로 많지 않습니다. 그리고 상황은 악화됩니다.
GitHub Copilot이 메서드 내에서 볼 수 있는 코드는
Console.WriteLine
문입니다. 메서드 내에 사용할 수 있는 다른 컨텍스트가 없고 코드베이스에 참조할 유사한 메서드가 없다면, GitHub Copilot은 사용자가 아마도 루프 내에Console.WriteLine
문을 원할 것이라고 결론을 내립니다.GitHub Copilot은 코드가 깔끔하고 집중되어 있을 때 가장 잘 작동합니다. 코드에 불필요한 코드 주석이나 문장이 있는 경우, GitHub Copilot의 코드 자동 완성 기능을 사용하기 전에 이를 제거하는 것이 좋습니다.
GitHub Copilot을 다시 시도하기 전에 코드를 정리하려면 다음 단계를 완료합니다.
- 제안된
foreach (
코드 완료를 취소합니다. - 입력한 부분
foreach (
문을 삭제합니다. -
Console.WriteLine
메서드에서QuarterlySalesReport
문을 삭제합니다.
이제 GitHub Copilot을 다시 사용해 볼 준비가 되었습니다.
- 제안된
QuarterlySalesReport
메서드가 다음 코드와 유사한지 확인합니다.public void QuarterlySalesReport(SalesData[] salesData) { }
QuarterlySalesReport
메서드 내부의 빈 코드 줄에 커서를 놓은 다음 Enter 키를 누릅니다.GitHub Copilot이 제안된 코드 완료를 생성하는 데 시간이 걸릴 수 있습니다.
제안된 코드 완료를 검토해 보세요.
중요합니다
사용자가 받는 코드 완료는 다음 스크린샷에 표시된 제안과 다를 수 있습니다. GitHub Copilot에는 작업할 메서드 이름과 매개 변수만 있지만 유용한 제안을 생성하는 데는 충분할 수 있습니다. 분기별 매출을 계산하는 제안이 표시됩니다. 제안을 거부하고 다시 시도하면 다른 결과가 나올 수 있습니다.
>
또는<
를 선택하여 제안 사항을 순환할 수 있습니다.제안된 코드 완료 기능은 판매 데이터를 반복 처리하며 분기별 판매 계산을 수행합니다.
제안된 코드 완료를 수락하려면 Tab 키를 누릅니다.
제안된 코드 완료는 매출 데이터를 기준으로 분기별 수입을 계산하여 표시합니다.
// create a dictionary to store the quarterly sales data Dictionary<string, double> quarterlySales = new Dictionary<string, double>(); // iterate through the sales data foreach (SalesData data in salesData) { // calculate the total sales for each quarter string quarter = GetQuarter(data.dateSold.Month); double totalSales = data.quantitySold * data.unitPrice; if (quarterlySales.ContainsKey(quarter)) { quarterlySales[quarter] += totalSales; } else { quarterlySales.Add(quarter, totalSales); } } // display the quarterly sales report Console.WriteLine("Quarterly Sales Report"); Console.WriteLine("----------------------"); foreach (KeyValuePair<string, double> quarter in quarterlySales) { Console.WriteLine(entry.Key + ": $" + entry.Value); }
이 메서드는
GetQuarter
판매 월을 사용하여 판매 분기를 결정합니다.GetQuarter
메서드가 다음에 생성됩니다.QuarterlySalesReport
메서드 아래에 두 개의 빈 코드 줄을 만듭니다.GitHub Copilot은
GetQuarter
메서드에 대한 코드 완료를 제안합니다.QuarterlySalesReport
메서드에서 제공하는 컨텍스트를 사용하면 GitHub Copilot은 판매 월을 기준으로 분기를 결정하는GetQuarter
메서드에 대한 코드 완료를 쉽게 생성할 수 있습니다.GetQuarter
메서드에 대해 제안된 코드 줄 완료를 검토해 보세요.제안된 코드 완료를 수락하려면 Tab 키를 누릅니다.
public string GetQuarter(int month) { if (month >= 1 && month <= 3) { return "Q1"; } else if (month >= 4 && month <= 6) { return "Q2"; } else if (month >= 7 && month <= 9) { return "Q3"; } else { return "Q4"; } }
코드를 실행하려면 먼저
Main
메서드를 완료해야 합니다.Main
메서드의 주석을 사용하여 코드를 업데이트할 수 있습니다.// call the GenerateSalesData method
코드 주석 끝에 커서를 놓은 다음 Enter 키를 누릅니다.GitHub Copilot은 주석을 사용하여 메서드에 대한 호출 문을 제안합니다.
GitHub Copilot에서 제안한 코드 완료를 검토한 후 수락합니다.
// call the QuarterlySalesReport method
코드 주석에 대해 프로세스를 반복합니다.Main
메서드에는 다음 코드가 포함되어야 합니다.static void Main(string[] args) { // create a new instance of the class QuarterlyIncomeReport report = new QuarterlyIncomeReport(); // call the GenerateSalesData method SalesData[] salesData = report.GenerateSalesData(); // call the QuarterlySalesReport method report.QuarterlySalesReport(salesData); }
QuarterlyIncomeReport
클래스의 코드를 검토해 보세요.namespace ReportGenerator { class QuarterlyIncomeReport { static void Main(string[] args) { // create a new instance of the class QuarterlyIncomeReport report = new QuarterlyIncomeReport(); // call the GenerateSalesData method SalesData[] salesData = report.GenerateSalesData(); // call the QuarterlySalesReport method report.QuarterlySalesReport(salesData); } /* public struct SalesData includes the following fields: date sold, department name, product ID, quantity sold, unit price */ public struct SalesData { public DateOnly dateSold; public string departmentName; public int productID; public int quantitySold; public double unitPrice; } /* the GenerateSalesData method returns 1000 SalesData records. It assigns random values to each field of the data structure */ public SalesData[] GenerateSalesData() { SalesData[] salesData = new SalesData[1000]; Random random = new Random(); for (int i = 0; i < 1000; i++) { salesData[i].dateSold = new DateOnly(2023, random.Next(1, 13), random.Next(1, 29)); salesData[i].departmentName = "Department " + random.Next(1, 11); salesData[i].productID = random.Next(1, 101); salesData[i].quantitySold = random.Next(1, 101); salesData[i].unitPrice = random.NextDouble() * 100; } return salesData; } public void QuarterlySalesReport(SalesData[] salesData) { // create a dictionary to store the quarterly sales data Dictionary<string, double> quarterlySales = new Dictionary<string, double>(); // iterate through the sales data foreach (SalesData data in salesData) { // calculate the total sales for each quarter string quarter = GetQuarter(data.dateSold.Month); double totalSales = data.quantitySold * data.unitPrice; if (quarterlySales.ContainsKey(quarter)) { quarterlySales[quarter] += totalSales; } else { quarterlySales.Add(quarter, totalSales); } } // display the quarterly sales report Console.WriteLine("Quarterly Sales Report"); Console.WriteLine("----------------------"); foreach (KeyValuePair<string, double> quarter in quarterlySales) { Console.WriteLine(entry.Key + ": $" + entry.Value); } } public string GetQuarter(int month) { if (month >= 1 && month <= 3) { return "Q1"; } else if (month >= 4 && month <= 6) { return "Q2"; } else if (month >= 7 && month <= 9) { return "Q3"; } else { return "Q4"; } } } }
이 코드는 거의 전적으로 GitHub Copilot에서 만들어진 코드 줄 완료를 사용하여 만들어졌습니다. 그러나 코드 제안 검토가 중요하며 수정이 필요했습니다. 항상 GitHub Copilot에서 제안하는 코드 완성을 검토하여 코드가 요구 사항을 충족하는지 확인해야 합니다.
보고서 출력을 검토하려면 앱을 실행합니다.
Visual Studio Code에서 터미널 창을 열고 다음 명령을 입력합니다.
dotnet run
출력에는 부서 이름, 분기, 테스트 데이터에 나타난 각 부서 및 분기의 소득을 보여 주는 분기별 소득 보고서가 표시되어야 합니다.
터미널 창에서 출력을 검토합니다.
분기별 결과는 임의의 숫자 값을 기반으로 하지만 다음 출력과 비슷한 형식의 보고서가 표시됩니다.
Quarterly Sales Report ---------------------- Q3: $635637.5019563352 Q4: $672247.315297204 Q2: $667269.194630603 Q1: $642769.2700531208
요약
코드 줄 완성은 코드를 빠르고 효율적으로 생성하는 데 도움이 되는 GitHub Copilot의 강력한 기능입니다. 주석을 사용하여 생성하려는 코드를 설명하면 최소한의 노력으로 데이터 구조, 메서드 및 기타 코드 요소를 만들 수 있습니다. 또한 GitHub Copilot는 입력한 코드에 따라 코드 줄 완성을 생성하여 복잡한 애플리케이션을 쉽게 빌드할 수 있습니다.