{"id":9386,"date":"2024-07-08T13:41:56","date_gmt":"2024-07-08T04:41:56","guid":{"rendered":"https:\/\/www.auctionpro.co.kr\/?p=9386"},"modified":"2024-07-08T13:41:56","modified_gmt":"2024-07-08T04:41:56","slug":"%ec%9d%98%ec%a1%b4%ec%84%b1-%ec%a3%bc%ec%9e%85dependency-injection-di-car","status":"publish","type":"post","link":"https:\/\/www.auctionpro.co.kr\/?p=9386","title":{"rendered":"\uc758\uc874\uc131 \uc8fc\uc785(Dependency Injection, DI) Car"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>\uc758\uc874\uc131 \uc8fc\uc785\uc744 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uacbd\uc6b0<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>Car<\/code> \ud074\ub798\uc2a4\ub294 <code>Engine<\/code> \ud074\ub798\uc2a4\uc5d0 \uc9c1\uc811 \uc758\uc874\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li><code>Car<\/code> \ud074\ub798\uc2a4 \ub0b4\ubd80\uc5d0\uc11c <code>Engine<\/code> \uac1d\uccb4\ub97c \uc0dd\uc131\ud558\ubbc0\ub85c, <code>Engine<\/code> \ud074\ub798\uc2a4\ub97c \ubcc0\uacbd\ud558\ub824\uba74 <code>Car<\/code> \ud074\ub798\uc2a4\ub97c \uc218\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>\uc774\ub85c \uc778\ud574 \ucf54\ub4dc\uc758 \uacb0\ud569\ub3c4\uac00 \ub192\uc544\uc9c0\uace0, \ubcc0\uacbd\uacfc \ud14c\uc2a4\ud2b8\uac00 \uc5b4\ub835\uc2b5\ub2c8\ub2e4.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\uc758\uc874\uc131 \uc8fc\uc785\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>Car<\/code> \ud074\ub798\uc2a4\ub294 <code>IEngine<\/code> \uc778\ud130\ud398\uc774\uc2a4\uc5d0 \uc758\uc874\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>\uc2e4\uc81c \uc5d4\uc9c4 \uad6c\ud604\uccb4\ub294 <code>GasolineEngine<\/code> \ub610\ub294 <code>ElectricEngine<\/code> \ud074\ub798\uc2a4\uc785\ub2c8\ub2e4.<\/li>\n\n\n\n<li>\uc758\uc874\uc131 \uc8fc\uc785\uc744 \ud1b5\ud574 <code>Car<\/code> \ud074\ub798\uc2a4\ub294 <code>IEngine<\/code> \uc778\ud130\ud398\uc774\uc2a4\uc758 \uad6c\ud604\uccb4\ub97c \uc678\ubd80\uc5d0\uc11c \uc8fc\uc785\ubc1b\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li>\uc774\ub97c \ud1b5\ud574 <code>Car<\/code> \ud074\ub798\uc2a4\ub294 \ud2b9\uc815 \uad6c\ud604\uccb4\uc5d0 \uc885\uc18d\ub418\uc9c0 \uc54a\uace0, \ucf54\ub4dc\uc758 \uc720\uc5f0\uc131\uacfc \ud14c\uc2a4\ud2b8 \uc6a9\uc774\uc131\uc774 \ud5a5\uc0c1\ub429\ub2c8\ub2e4.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-4.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"527\" src=\"https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-4-1024x527.png\" alt=\"\" class=\"wp-image-9383\" srcset=\"https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-4-1024x527.png 1024w, https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-4-300x154.png 300w, https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-4-768x395.png 768w, https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-4.png 1133w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">1. \uc778\ud130\ud398\uc774\uc2a4 \uc815\uc758<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uc6b0\uc120, \ud544\uc694\ud55c \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc815\uc758\ud569\ub2c8\ub2e4. \uc5ec\uae30\uc11c\ub294 \uc5d4\uc9c4(<code>IEngine<\/code>)\uacfc \uc790\ub3d9\ucc28(<code>ICar<\/code>) \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc815\uc758\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:vim decode:true \" >public interface IEngine\n{\n    void Start();\n}\n\npublic interface ICar\n{\n    void Start();\n}\n<\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">2. \uc778\ud130\ud398\uc774\uc2a4 \uad6c\ud604<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uc778\ud130\ud398\uc774\uc2a4\ub97c \uad6c\ud604\ud558\ub294 \ud074\ub798\uc2a4\ub97c \ub9cc\ub4ed\ub2c8\ub2e4. \ub098\uc911\uc5d0 \uc694\uad6c\uc0ac\ud56d\uc774 \ubcc0\uacbd\ub418\uc5b4\ub3c4 \uc27d\uac8c \uad50\uccb4\ud560 \uc218 \uc788\ub3c4\ub85d \uc778\ud130\ud398\uc774\uc2a4\ub97c \ud1b5\ud574 \uc811\uadfc\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:vim decode:true \" >public class GasolineEngine : IEngine\n{\n    public void Start()\n    {\n        Console.WriteLine(\"Gasoline engine started.\");\n    }\n}\n\npublic class ElectricEngine : IEngine\n{\n    public void Start()\n    {\n        Console.WriteLine(\"Electric engine started.\");\n    }\n}\n\npublic class Car : ICar\n{\n    private readonly IEngine _engine;\n\n    public Car(IEngine engine)\n    {\n        _engine = engine;\n    }\n\n    public void Start()\n    {\n        _engine.Start();\n        Console.WriteLine(\"Car started.\");\n    }\n}\n<\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">3. ASP.NET Core \ud504\ub85c\uc81d\ud2b8 \uc124\uc815<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">ASP.NET Core \ud504\ub85c\uc81d\ud2b8\ub97c \uc124\uc815\ud558\uace0 \uc758\uc874\uc131\uc744 \ub4f1\ub85d\ud569\ub2c8\ub2e4. \uc5ec\uae30\uc11c DI \ucee8\ud14c\uc774\ub108\ub97c \ud1b5\ud574 \uc778\ud130\ud398\uc774\uc2a4\uc640 \uad6c\ud604\uccb4\ub97c \ub9e4\ud551\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Startup.cs<\/h4>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:vim decode:true \" >public class Startup\n{\n    public void ConfigureServices(IServiceCollection services)\n    {\n        \/\/ IEngine \uc778\ud130\ud398\uc774\uc2a4\uc640 GasolineEngine \uad6c\ud604\uccb4\ub97c \ub4f1\ub85d\n        services.AddScoped&lt;IEngine, GasolineEngine&gt;();\n        \n        \/\/ ICar \uc778\ud130\ud398\uc774\uc2a4\uc640 Car \uad6c\ud604\uccb4\ub97c \ub4f1\ub85d\n        services.AddScoped&lt;ICar, Car&gt;();\n\n        services.AddControllers();\n    }\n\n    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n    {\n        if (env.IsDevelopment())\n        {\n            app.UseDeveloperExceptionPage();\n        }\n\n        app.UseRouting();\n        app.UseEndpoints(endpoints =&gt;\n        {\n            endpoints.MapControllers();\n        });\n    }\n}\n<\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">4. \uc758\uc874\uc131 \uc8fc\uc785\uc744 \ubc1b\ub294 \ucee8\ud2b8\ub864\ub7ec<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">DI \ucee8\ud14c\uc774\ub108\ub97c \ud1b5\ud574 <code>ICar<\/code> \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc8fc\uc785\ubc1b\ub294 \ucee8\ud2b8\ub864\ub7ec\ub97c \ub9cc\ub4ed\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CarController.cs<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:vim decode:true \" >using Microsoft.AspNetCore.Mvc;\n\n[ApiController]\n[Route(\"[controller]\")]\npublic class CarController : ControllerBase\n{\n    private readonly ICar _car;\n\n    public CarController(ICar car)\n    {\n        _car = car;\n    }\n\n    [HttpGet(\"start\")]\n    public IActionResult StartCar()\n    {\n        _car.Start();\n        return Ok(\"Car started.\");\n    }\n}\n<\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">5. \ud504\ub85c\uadf8\ub7a8 \uc2e4\ud589<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Program.cs<\/h4>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:vim decode:true \" >public class Program\n{\n    public static void Main(string[] args)\n    {\n        CreateHostBuilder(args).Build().Run();\n    }\n\n    public static IHostBuilder CreateHostBuilder(string[] args) =&gt;\n        Host.CreateDefaultBuilder(args)\n            .ConfigureWebHostDefaults(webBuilder =&gt;\n            {\n                webBuilder.UseStartup&lt;Startup&gt;();\n            });\n}\n<\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\uc720\uc9c0\ubcf4\uc218\uc131\uc758 \uc608<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">\uc694\uad6c\uc0ac\ud56d \ubcc0\uacbd: \uc804\uae30 \uc5d4\uc9c4\uc73c\ub85c \ubcc0\uacbd<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\ub098\uc911\uc5d0 \uc694\uad6c\uc0ac\ud56d\uc774 \ubcc0\uacbd\ub418\uc5b4 \uc790\ub3d9\ucc28\uac00 \uc804\uae30 \uc5d4\uc9c4\uc744 \uc0ac\uc6a9\ud574\uc57c \ud55c\ub2e4\uace0 \uac00\uc815\ud569\ub2c8\ub2e4. \uc774 \uacbd\uc6b0 \ucf54\ub4dc\uc758 \uc218\uc815\uc740 \ub9e4\uc6b0 \uac04\ub2e8\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\ubcc0\uacbd\ub41c Startup.cs<\/h4>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:vim decode:true \" >public class Startup\n{\n    public void ConfigureServices(IServiceCollection services)\n    {\n        \/\/ IEngine \uc778\ud130\ud398\uc774\uc2a4\uc640 ElectricEngine \uad6c\ud604\uccb4\ub97c \ub4f1\ub85d\n        services.AddScoped&lt;IEngine, ElectricEngine&gt;();  \/\/ \ubcc0\uacbd \ubd80\ubd84\n        \n        \/\/ ICar \uc778\ud130\ud398\uc774\uc2a4\uc640 Car \uad6c\ud604\uccb4\ub97c \ub4f1\ub85d\n        services.AddScoped&lt;ICar, Car&gt;();\n\n        services.AddControllers();\n    }\n\n    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n    {\n        if (env.IsDevelopment())\n        {\n            app.UseDeveloperExceptionPage();\n        }\n\n        app.UseRouting();\n        app.UseEndpoints(endpoints =&gt;\n        {\n            endpoints.MapControllers();\n        });\n    }\n}\n<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\uc704\uc758 \ucf54\ub4dc\ub294 <code>IEngine<\/code> \uc778\ud130\ud398\uc774\uc2a4\uc758 \uad6c\ud604\uccb4\ub97c <code>GasolineEngine<\/code>\uc5d0\uc11c <code>ElectricEngine<\/code>\uc73c\ub85c \ubc14\uafe8\uc2b5\ub2c8\ub2e4. \uc774\ub807\uac8c \ud558\uba74 \ub098\uba38\uc9c0 \ucf54\ub4dc\ub294 \uc804\ud600 \uc218\uc815\ud560 \ud544\uc694\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p>\uc758\uc874\uc131 \uc8fc\uc785\uc744 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uacbd\uc6b0: \uc758\uc874\uc131 \uc8fc\uc785\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0: 1. \uc778\ud130\ud398\uc774\uc2a4 \uc815\uc758 \uc6b0\uc120, \ud544\uc694\ud55c \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc815\uc758\ud569\ub2c8\ub2e4. \uc5ec\uae30\uc11c\ub294 \uc5d4\uc9c4(IEngine)\uacfc \uc790\ub3d9\ucc28(ICar) \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc815\uc758\ud569\ub2c8\ub2e4. 2. \uc778\ud130\ud398\uc774\uc2a4 \uad6c\ud604 \uc778\ud130\ud398\uc774\uc2a4\ub97c <a class=\"mh-excerpt-more\" href=\"https:\/\/www.auctionpro.co.kr\/?p=9386\" title=\"\uc758\uc874\uc131 \uc8fc\uc785(Dependency Injection, DI) Car\">[&#8230;]<\/a><\/p>\n<\/div>","protected":false},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[252],"tags":[],"class_list":["post-9386","post","type-post","status-publish","format-standard","hentry","category-dev-uml"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.auctionpro.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/9386","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.auctionpro.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.auctionpro.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.auctionpro.co.kr\/index.php?rest_route=\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.auctionpro.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9386"}],"version-history":[{"count":0,"href":"https:\/\/www.auctionpro.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/9386\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.auctionpro.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9386"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.auctionpro.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=9386"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.auctionpro.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=9386"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}