๐ค Chapter 6. ๋จ์ ํ ์คํธ ์คํ์ผ
๐ฅ ๋จ์ ํ ์คํธ์ ์ธ ๊ฐ์ง ์คํ์ผโ
๋จ์ ํ ์คํธ๋ ์ธ ๊ฐ์ง ์คํ์ผ์ด ์๋ค.
- ์ถ๋ ฅ ๊ธฐ๋ฐ ํ ์คํธ
- ์ํ ๊ธฐ๋ฐ ํ ์คํธ
- ํต์ ๊ธฐ๋ฐ ํ ์คํธ
ํ๋์ ํ ์คํธ์์ ํ๋ ๋๋ ๋, ์ฌ์ง์ด ์ธ ๊ฐ์ง ์คํ์ผ ๋ชจ๋๋ฅผ ํจ๊ป ์ฌ์ฉํ ์ ์๋ค.
๐ ์ถ๋ ฅ ๊ธฐ๋ฐ ํ ์คํธ ์ ์โ
ํ ์คํธ ๋์ ์์คํ (SUT)์ ์ ๋ ฅ์ ๋ฃ๊ณ ์์ฑ๋๋ ์ถ๋ ฅ์ ์ ๊ฒํ๋ ๋ฐฉ์์ด๋ค. ์ด๋ฌํ ๋จ์ ํ ์คํธ ์คํ์ผ์ ์ ์ญ ์ํ๋ ๋ด๋ถ ์ํ๋ฅผ ๋ณ๊ฒฝํ์ง ์๋ ์ฝ๋์๋ง ์ ์ฉ๋๋ฏ๋ก ๋ฐํ ๊ฐ๋ง ๊ฒ์ฆํ๋ฉด ๋๋ค.
public class PriceEngine {
public decimal CalculateDiscount(params Product[] products) {
decimal discount = products.Length * 0.01m;
return Math.Min(discount, 0.2m);
}
}
[Fact]
public void Discount_of_two_products() {
var product1 = new Product("Hand wash");
var product2 = new Product("Shampoo");
var sut = new PriceEngine();
decimal discount = sut.CalculateDiscount(product1, product2);
Assert.Equal(0.02m, discount);
}
CalculateDiscount()
๋ฉ์๋์ ๊ฒฐ๊ณผ๋ ๋ฐํ๋ ํ ์ธ, ์ฆ ์ถ๋ ฅ ๊ฐ๋ฟ์ด๋ค.
์ถ๋ ฅ ๊ธฐ๋ฐ ๋จ์ ํ ์คํธ ์คํ์ผ์ ํจ์ํ์ด๋ผ๊ณ ๋ ํ๋ค. ์ด ์ด๋ฆ์ ๋ถ์์ฉ ์๋ ์ฝ๋ ์ ํธ๋ฅผ ๊ฐ์กฐํ๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ธ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๋ฟ๋ฆฌ๋ฅผ ๋๊ณ ์๋ค.
๐ ์ํ ๊ธฐ๋ฐ ์คํ์ผ ์ ์โ
์ํ ๊ธฐ๋ฐ ์คํ์ผ์ ์์ ์ด ์๋ฃ๋ ํ ์์คํ ์ํ๋ฅผ ํ์ธํ๋ ๊ฒ์ด๋ค. ์ด ํ ์คํธ ์คํ์ผ์์ ์ํ๋ผ๋ ์ฉ์ด๋ SUT๋ ํ๋ ฅ์ ์ค ํ๋, ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ์ผ ์์คํ ๋ฑ๊ณผ ๊ฐ์ ํ๋ก์ธ์ค ์ธ๋ถ ์์กด์ฑ์ ์ํ ๋ฑ์ ์๋ฏธํ ์ ์๋ค.
public class Order {
private readonly List<Product> _products = new List<product>();
public IReadOnlyList<Product> Products => _products.ToList();
public void AddProduct(Product product) {
_products.Add(product);
}
}
[Fact]
public void Adding_a_product_to_an_order() {
var product = new Product("Hand wash");
var sut = new Order();
sut.AddProduct(product);
Assert.Equal(1, sut.Products.Count);
Assert.Equal(product, sut.Products[0]);
}
ํ
์คํธ๋ ์ํ์ ์ถ๊ฐํ ํ Products
์ปฌ๋ ์
์ ๊ฒ์ฆํ๋ค. ์ถ๋ ฅ ๊ธฐ๋ฐ ํ
์คํธ์ ์์ ์ ๋ฌ๋ฆฌ, AddProduct()
์ ๊ฒฐ๊ณผ๋ ์ฃผ๋ฌธ ์ํ์ ๋ณ๊ฒฝ์ด๋ค.
๐ ํต์ ๊ธฐ๋ฐ ์คํ์ผ ์ ์โ
ํต์ ๊ธฐ๋ฐ ์คํ์ผ์ ๋ชฉ์ ์ฌ์ฉํด ํ ์คํธ ๋์ ์์คํ ๊ณผ ํ๋ ฅ์ ๊ฐ์ ํต์ ์ ๊ฒ์ฆํ๋ค.
[Fact]
public void Sending_a_greetings_email() {
var emailGatewayMock = new Mock<IEmailGateway>();
var sut = new Controller(emailGatewayMock.Object);
sut.GreetUser("user@email.com");
emailGatewayMock.Verify(
x => x.SendGreetingsEmail("user@email.com"),
Times.Once
);
}
๐ฅ ๋จ์ ํ ์คํธ ์คํ์ผ ๋น๊ตโ
๐ ํ๊ท ๋ฐฉ์ง์ ํผ๋๋ฐฑ ์๋ ์งํ๋ก ์คํ์ผ ๋น๊ตํ๊ธฐโ
ํ๊ท ๋ฐฉ์ง ์งํ๋ ํน์ ์คํ์ผ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง์ง ์๋๋ค. ํ๊ท ๋ฐฉ์ง ์งํ๋ ๋ค์ ์ธ ๊ฐ์ง ํน์ฑ์ผ๋ก ๊ฒฐ์ ๋๋ค.
- ํ ์คํธ ์ค์ ์คํ๋๋ ์ฝ๋์ ์
- ์ฝ๋ ๋ณต์ก๋
- ๋๋ฉ์ธ ์ ์์ฑ
๋ณดํต ์คํํ๋ ์ฝ๋๊ฐ ๋ง๋ ์ ๋ ์ํ๋ ๋๋ก ํ ์คํธ๋ฅผ ์์ฑํ ์ ์๋ค. ์ด๋ค ์คํ์ผ๋ ์ด ๋ถ๋ถ์์ ๋์์ด ๋์ง ์๋๋ค. ์ฝ๋ ๋ณต์ก๋์ ๋๋ฉ์ธ ์ ์์ฑ ์ญ์ ๋ง์ฐฌ๊ฐ์ง๋ค. ํต์ ๊ธฐ๋ฐ ์คํ์ผ์๋ ์์ธ๊ฐ ํ๋ ์๋ค. ๋จ์ฉํ๋ฉด ์์ ์ฝ๋ ์กฐ๊ฐ์ ๊ฒ์ฆํ๊ณ ๋ค๋ฅธ ๊ฒ์ ๋ชจ๋ ๋ชฉ์ ์ฌ์ฉํ๋ ๋ฑ ํผ์์ ์ธ ํ ์คํธ๊ฐ ๋ ์ ์๋ค. ํ์ง๋ง ์ด๋ ํต์ ๊ธฐ๋ฐ ํ ์คํธ์ ๊ฒฐ์ ์ ์ธ ํน์ง์ด ์๋๋ผ ๊ธฐ์ ์ ๋จ์ํ๋ ๊ทน๋จ์ ์ธ ์ฌ๋ก๋ค.
ํ ์คํธ ์คํ์ผ๊ณผ ํ ์คํธ ํผ๋๋ฐฑ ์๋ ์ฌ์ด์๋ ์๊ด๊ด๊ณ๊ฐ ๊ฑฐ์ ์๋ค. ํ ์คํธ๊ฐ ํ๋ก์ธ์ค ์ธ๋ถ ์์กด์ฑ๊ณผ ๋จ์ด์ ธ ๋จ์ ํ ์คํธ ์์ญ์ ์๋ ํ, ๋ชจ๋ ์คํ์ผ์ ํ ์คํธ ์คํ ์๋๊ฐ ๊ฑฐ์ ๋์ผํ๋ค. ๋ชฉ์ ๋ฐํ์์ ์ง์ฐ ์๊ฐ์ด ์๊ธฐ๋ ํธ์ด๋ฏ๋ก ํต์ ๊ธฐ๋ฐ ํ ์คํธ๊ฐ ์ฝ๊ฐ ๋์ ์ ์๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ํ ์คํธ๊ฐ ์๋ง ๊ฐ ์์ค์ด ์๋๋ผ๋ฉด ๋ณ๋ก ์ฐจ์ด๋ ์๋ค.
๐ ๋ฆฌํฉํฐ๋ง ๋ด์ฑ ์งํ๋ก ์คํ์ผ ๋น๊ตํ๊ธฐโ
๋ฆฌํฉํฐ๋ง ๋ด์ฑ์ ๋ฆฌํฉํฐ๋ง ์ค์ ๋ฐ์ํ๋ ๊ฑฐ์ง ์์ฑ ์์ ๋ํ ์ฒ๋๋ค. ๊ฒฐ๊ตญ ๊ฑฐ์ง ์์ฑ์ ์๋ณํ ์ ์๋ ๋์์ด ์๋๋ผ ์ฝ๋์ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ๊ฒฐํฉ๋ ํ ์คํธ์ ๊ฒฐ๊ณผ๋ค.
์ถ๋ ฅ ๊ธฐ๋ฐ ํ ์คํธ๋ ํ ์คํธ๊ฐ ํ ์คํธ ๋์ ๋ฉ์๋์๋ง ๊ฒฐํฉ๋๋ฏ๋ก ๊ฑฐ์ง ์์ฑ ๋ฐฉ์ง๊ฐ ๊ฐ์ฅ ์ฐ์ํ๋ค. ์ด;๋ฌํ ํ ์คํธ๊ฐ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ๊ฒฐํฉ๋๋ ๊ฒฝ์ฐ๋ ํ ์คํธ ๋์ ๋ฉ์๋๊ฐ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ผ ๋๋ฟ์ด๋ค.
์ํ ๊ธฐ๋ฐ ํ ์คํธ๋ ์ผ๋ฐ์ ์ผ๋ก ๊ฑฐ์ง ์์ฑ์ด ๋๊ธฐ ์ฝ๋ค. ์ด๋ฌํ ํ ์คํธ๋ ํ ์คํธ ๋์ ๋ฉ์๋ ์ธ์๋ ํด๋์ค ์ํ์ ํจ๊ป ์๋ํ๋ค. ์ํ ๊ธฐ๋ฐ ํ ์คํธ๋ ํฐ API ๋ ธ์ถ ์์ญ์ ์์กดํ๋ฏ๋ก, ๊ตฌํ ์ธ๋ถ ์ฌํญ๊ณผ ๊ฒฐํฉํ ๊ฐ๋ฅ์ฑ๋ ๋ ๋๋ค.
ํต์ ๊ธฐ๋ฐ ํ ์คํธ๊ฐ ํ์ ์ ๋ณด์ ๊ฐ์ฅ ์ทจ์ฝํ๋ค. ํ ์คํธ ๋์ญ์ผ๋ก ์ํธ ์์ฉ์ ํ์ธํ๋ ํ ์คํธ๋ ๋๋ถ๋ถ ๊นจ์ง๊ธฐ ์ฝ๋ค. ์ ํ๋ฆฌ์ผ์ด์ ๊ฒฝ๊ณ๋ฅผ ๋๋ ์ํธ ์์ฉ์ ํ์ธํ๊ณ ํด๋น ์ํธ ์์ฉ์ ๋ถ์์ฉ์ด ์ธ๋ถ ํ๊ฒฝ์ ๋ณด์ด๋ ๊ฒฝ์ฐ์๋ง ๋ชฉ์ด ๊ด์ฐฎ๋ค.
๐ ์ ์ง ๋ณด์์ฑ ์งํ๋ก ์คํ์ผ ๋น๊ตํ๊ธฐโ
์ ์ง ๋ณด์์ฑ์ ๋จ์ ํ ์คํธ์ ์ ์ง๋น๋ฅผ ์ธก์ ํ๋ฉฐ, ๋ค์ ๋ ๊ฐ์ง ํน์ฑ์ผ๋ก ์ ์ํ๋ค.
- ํ ์คํธ๋ฅผ ์ดํดํ๊ธฐ ์ผ๋ง๋ ์ด๋ ค์ด๊ฐ?
- ํ ์คํธ๋ฅผ ์คํํ๊ธฐ ์ผ๋ง๋ ์ด๋ ค์ด๊ฐ?
ํ ์คํธ๊ฐ ํฌ๋ฉด, ํ์ํ ๋ ํ์ ํ๊ธฐ๋ ๋ณ๊ฒฝํ๊ธฐ๋ ์ด๋ ค์ฐ๋ฏ๋ก ์ ์ง ๋ณด์๊ฐ ์ฝ์ง ์๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋ ์ด์์ ํ๋ก์ธ์ค ์ธ๋ถ ์์กด์ฑ๊ณผ ์ง์ ์๋ํ๋ ํ ์คํธ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ ์ฌ๋ถํ , ๋คํธ์ํฌ ์ฐ๊ฒฐ ๋ฌธ์ ํด๊ฒฐ ๋ฑ๊ณผ ๊ฐ์ด ์ด์ํ๋ ๋ฐ ์๊ฐ์ด ํ์ํ๋ฏ๋ก ์ ์ง ๋ณด์๊ฐ ์ด๋ ต๋ค.
๋ค๋ฅธ ๋ ๊ฐ์ง ์คํ์ผ๊ณผ ๋น๊ตํ๋ฉด, ์ถ๋ ฅ ๊ธฐ๋ฐ ํ ์คํธ๊ฐ ๊ฐ์ฅ ์ ์ง ๋ณด์ํ๊ธฐ ์ฉ์ดํ๋ค. ์ถ๋ ฅ ๊ธฐ๋ฐ ํ ์คํธ๋ ๊ฑฐ์ ํญ์ ์งง๊ณ ๊ฐ๊ฒฐํ๋ฏ๋ก ์ ์ง ๋ณด์๊ฐ ์ฝ๋ค. ์ถ๋ ฅ ๊ธฐ๋ฐ ํ ์คํธ์ ๊ธฐ๋ฐ ์ฝ๋๋ ์ ์ญ ์ํ๋ ๋ด๋ถ ์ํ๋ฅผ ๋ณ๊ฒฝํ ๋ฆฌ ์์ผ๋ฏ๋ก, ํ๋ก์ธ์ค ์ธ๋ถ ์์กด์ฑ์ ๋ค๋ฃจ์ง ์๋๋ค. ๋ฐ๋ผ์ ๋ ๊ฐ์ง ์ ์ง ๋ณด์์ฑ ๋ชจ๋์ ์ธก๋ฉด์์ ์ถ๋ ฅ ๊ธฐ๋ฐ ํ ์คํธ๊ฐ ๊ฐ์ฅ ์ข๋ค.
์ํ ๊ธฐ๋ฐ ํ ์คํธ๋ ์ผ๋ฐ์ ์ผ๋ก ์ถ๋ ฅ ๊ธฐ๋ฐ ํ ์คํธ๋ณด๋ค ์ ์ฆค ๋ณด์๊ฐ ์ฝ์ง ์๋ค. ์ํ ๊ฒ์ฆ์ ์ข ์ข ์ถ๋ ฅ ๊ฒ์ฆ๋ณด๋ค ๋ ๋ง์ ๊ณต๊ฐ์ ์ฐจ์งํ๊ธฐ ๋๋ฌธ์ด๋ค.
[Fact]
public void Adding_a_comment_to_an_article() {
var sut = new Article();
var text = "Comment text";
var author = "John Doe";
var now = new DateTime(2019, 4, 1);
sut.AddComment(text, author, now);
Assert.Equal(1, sut.Comments.Count);
Assert.Equal(text, sut.Comments[0].Text);
Assert.Equal(author, sut.Comments[0].Author);
Assert.Equal(now, sut.Comments[0].DateCreated);
}
์ด ํ ์คํธ๋ ๋จ์ํ๊ณ ๋๊ธ์ด ํ๋๋ง ์์ง๋ง, ๊ฒ์ฆ๋ถ๋ ๋ค ์ค์ ๊ฑธ์ณ ์๋ค. ์ํ ๊ธฐ๋ฐ ํ ์คํธ๋ ์ข ์ข ํจ์ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ํ์ธํด์ผ ํ๋ฏ๋ก ํฌ๊ธฐ๊ฐ ๋ํญ ์ปค์ง ์ ์๋ค.
ํต์ ๊ธฐ๋ฐ ํ ์คํธ๋ ์ ์ง ๋ณด์์ฑ ์งํ์์ ์ถ๋ ฅ ๊ธฐ๋ฐ ํ ์คํธ์ ์ํ ๊ธฐ๋ฐ ํ ์คํธ๋ณด๋ค ์ ์๊ฐ ๋ฎ๋ค. ํต์ ๊ธฐ๋ฐ ํ ์คํธ์๋ ํ ์คํธ ๋์ญ๊ณผ ์ํธ ์์ฉ ๊ฒ์ฆ์ ์ค์ ํด์ผ ํ๋ฉฐ, ์ด๋ ๊ณต๊ฐ์ ๋ง์ด ์ฐจ์งํ๋ค. ๋ชฉ์ด ์ฌ์ฌ ํํ๋ก ์์ ๋ ํ ์คํธ๋ ๋ ์ปค์ง๊ณ ์ ์ง ๋ณด์ํ๊ธฐ๊ฐ ์ด๋ ค์์ง๋ค.
๐ ์คํ์ผ ๋น๊ตํ๊ธฐ: ๊ฒฐ๋ก โ
์ธ ๊ฐ์ง ์คํ์ผ ๋ชจ๋ ํ๊ท ๋ฐฉ์ง๊ณผ ํผ๋๋ฐฑ ์๋ ์งํ์์๋ ์ ์๊ฐ ๊ฐ๋ค.
์ถ๋ ฅ ๊ธฐ๋ฐ ํ ์คํธ๊ฐ ๊ฐ์ฅ ๊ฒฐ๊ณผ๊ฐ ์ข๋ค. ์ด ์คํ์ผ์ ๊ตฌํ ์ธ๋ถ ์ฌํญ๊ณผ ๊ฑฐ์ ๊ฒฐํฉ๋์ง ์์ผ๋ฏ๋ก ๋ฆฌํฉํฐ๋ง ๋ด์ฑ์ ์ ์ ํ ์ ์งํ๊ณ ์ ์ฃผ์๋ฅผ ๋ง์ด ๊ธฐ์ธ์ผ ํ์๊ฐ ์๋ค. ์ด๋ฌํ ํ ์คํธ๋ ๊ฐ๊ฒฐํ๊ณ ํ๋ก์ธ์ค ์ธ๋ถ ์์กด์ฑ์ด ์๊ธฐ ๋๋ฌธ์ ์ ์ง ๋ณด์๋ ์ฝ๋ค.
์ถ๋ ฅ ๊ธฐ๋ฐ | ์ํ ๊ธฐ๋ฐ | ํต์ ๊ธฐ๋ฐ | |
---|---|---|---|
๋ฆฌํฉํฐ๋ง ๋ด์ฑ์ ์งํค๊ธฐ ์ํด ํ์ํ ๋ ธ๋ ฅ | ๋ฎ์ | ์ค๊ฐ | ์ค๊ฐ |
์ ์ง๋น | ๋ฎ์ | ์ค๊ฐ | ๋์ |
์ํ ๊ธฐ๋ฐ ํ
์คํธ์ ํต์ ๊ธฐ๋ฐ ํ
์คํธ๋ ๋ ์งํ ๋ชจ๋ ์ข์ง ์๋ค. ์ ์ถ๋ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ๊ฒฐํฉํ ๊ฐ๋ฅ์ฑ์ด ๋๊ณ , ํฌ๊ธฐ๋ ์ปค์ ์ ์ง๋น๊ฐ ๋ง์ด ๋ ๋ค.
๊ทธ๋ฌ๋ฏ๋ก ํญ์ ๋ค๋ฅธ ๊ฒ๋ณด๋ค ์ถ๋ ฅ ๊ธฐ๋ฐ ํ
์คํธ๋ฅผ ์ ํธํ๋ผ. ํ์ง๋ง ์ํ๊น๊ฒ๋ ๋งํ๊ธฐ๋ ์ฌ์๋ ํํ๊ธฐ๋ ์ด๋ ต๋ค. ์ถ๋ ฅ ๊ธฐ๋ฐ ์คํ์ผ์ ํจ์ํ์ผ๋ก ์์ฑ๋ ์ฝ๋์๋ง ์ ์ฉํ ์ ์๊ณ , ๋๋ถ๋ถ์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์๋ ํด๋นํ์ง ์๋๋ค.
๐ฅ ํจ์ํ ์ํคํ ์ฒ ์ดํดโ
๐ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด๋?โ
์ถ๋ ฅ ๊ธฐ๋ฐ ๋จ์ ํ ์คํธ ์คํ์ผ์ ํจ์ํ์ด๋ผ๊ณ ๋ ํ๋ค. ๊ธฐ๋ฐ ์ ํ ์ฝ๋๋ฅผ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ด์ฉํด ์์ ํจ์ ๋ฐฉ์์ผ๋ก ์์ฑํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ํ์ ํจ์(์์ ํจ์๋ผ๊ณ ๋ ํจ)๋ฅผ ์ฌ์ฉํ ํ๋ก๊ทธ๋๋ฐ์ด๋ค. ์ํ์ ํจ์๋ ์จ์ ์ ์ถ๋ ฅ์ด ์๋ ํจ์(๋๋ ๋ฉ์๋)๋ค. ์ํ์ ํจ์์ ๋ชจ๋ ์ ์ถ๋ ฅ์ ๋ฉ์๋ ์ด๋ฆ, ์ธ์, ๋ฐํ ํ์ ์ผ๋ก ๊ตฌ์ฑ๋ ๋ฉ์๋ ์๊ทธ๋์ฒ์ ๋ช ์ํด์ผ ํ๋ค. ์ํ์ ํจ์๋ ํธ์ถ ํ์์ ์๊ด์์ด ์ฃผ์ด์ง ์ ๋ ฅ์ ๋ํด ๋์ผํ ์ถ๋ ฅ์ ์์ฑํ๋ค.
public decimal CalculateDiscount(Product[] products) {
decimal discount = products.Length + 0.01m;
return Math.Min(discount, 0.2m);
}
์ด ๋ฉ์๋๋ ํ๋์ ์
๋ ฅ๊ณผ ํ๋์ ์ถ๋ ฅ์ด ์์ผ๋ฉฐ, ๋ ๋ค ๋ฉ์๋ ์๊ทธ๋์ฒ์ ๋ช
์๋ผ ์๋ค. ์ด๋ก์จ CalculateDiscount()
๋ ์ํ์ ํจ์๊ฐ ๋๋ค.
// ์ถ๋ ฅ ์ด๋ฆ ์
๋ ฅ
public decimal CalculateDiscount(Product[] products)
์จ์ ์
์ถ๋ ฅ์ด ์๋ ๋ฉ์๋๋ ์ํ์์ ๋งํ๋ ํจ์์ ์ ์๋ฅผ ์ค์ํ๊ธฐ ๋๋ฌธ์ ์ํ์ ํจ์๋ผ๊ณ ํ๋ค.
์
์ถ๋ ฅ์ ๋ช
์ํ ์ํ์ ํจ์๋ ์ด์ ๋ฐ๋ฅด๋ ํ
์คํธ๊ฐ ์งง๊ณ ๊ฐ๊ฒฐํ๋ฉฐ ์ดํดํ๊ณ ์ ์ง ๋ณด์ํ๊ธฐ ์ฌ์ฐ๋ฏ๋ก ํ
์คํธํ๊ธฐ๊ฐ ๋งค์ฐ ์ฝ๋ค. ์ถ๋ ฅ ๊ธฐ๋ฐ ํ
์คํธ๋ฅผ ์ ์ฉํ ์ ์๋ ๋ฉ์๋ ์ ํ์ ์ํ์ ํจ์๋ฟ์ด๋ค. ์ด๋ ์ ์ง ๋ณด์์ฑ์ด ๋ฐ์ด๋๊ณ ๊ฑฐ์ง ์์ฑ ๋น๋๊ฐ ๋ฎ๋ค.
๋ฐ๋ฉด์ ์จ์ ์ ์ถ๋ ฅ์ ์ฝ๋๋ฅผ ํ ์คํธํ๊ธฐ ํ๋ค๊ฒ ํ๋ค. ์จ์ ์ ์ถ๋ ฅ์ ์ ํ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ถ์์ฉ: ๋ถ์์ฉ์ ๋ฉ์๋ ์๊ทธ๋์ฒ์ ํฌ์๋์ง ์๋ ์ถ๋ ฅ์ด๋ฉฐ, ๋ฐ๋ผ์ ์จ์ด์๋ค.
- ์์ธ: ๋ฉ์๋๊ฐ ์์ธ๋ฅผ ๋์ง๋ฉด, ํ๋ก๊ทธ๋จ ํ๋ฆ์ ๋ฉ์๋ ์๊ทธ๋์ฒ์ ์ค์ ๋ ๊ณ์ฝ์ ์ฐํํ๋ ๊ฒฝ๋ก๋ฅผ ๋ง๋ ๋ค.
- ๋ด์ธ๋ถ ์ํ์ ๋ ํ ์ฐธ์กฐ:
DateTime.Now
์ ๊ฐ์ด ์ ์ ์์ฑ์ ์ฌ์ฉํด ํ์ฌ ๋ ์ง์ ์๊ฐ์ ๊ฐ์ ธ์ค๋ ๋ฉ์๋๊ฐ ์์ ์ ์๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ง์ํ ์ ์๊ณ , ๋น๊ณต๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ ํ๋๋ฅผ ์ฐธ์กฐํ ์๋ ์๋ค. ์ด ๋ชจ๋ ๋ฉ์๋ ์๊ทธ๋์ฒ์ ์๋ ์คํ ํ๋ฆ์ ๋ํ ์ ๋ ฅ์ด๋ฉฐ, ๋ฐ๋ผ์ ์จ์ด์๋ค.
๋ฉ์๋๊ฐ ์ํ์ ํจ์์ธ์ง ํ๋ณํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ํ๋ก๊ทธ๋จ์ ๋์์ ๋ณ๊ฒฝํ์ง ์๊ณ ํด๋น ๋ฉ์๋์ ๋ํ ํธ์ถ์ ๋ฐํ ๊ฐ์ผ๋ก ๋์ฒดํ ์ ์๋์ง ํ์ธํ๋ ๊ฒ์ด๋ค. ๋ฉ์๋ ํธ์ถ์ ํด๋น ๊ฐ์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ์ ์ฐธ์กฐ ํฌ๋ช ์ฑ์ด๋ผ๊ณ ํ๋ค.
public int Increment(int x) {
return x + 1;
}
์ด ๋ฉ์๋๋ ์ํ์ ํจ์๋ค. ๋ค์ ๋ ๊ตฌ๋ฌธ์ ์๋ก ๋์ผํ๋ค.
int y = Increment(4);
int y = 5;
๋ฐ๋ฉด์ ๋ค์ ๋ฉ์๋๋ ์ํ์ ํจ์๊ฐ ์๋๋ค. ๋ฐํ ๊ฐ์ด ๋ฉ์๋์ ์ถ๋ ฅ์ ๋ชจ๋ ๋ํ๋ด์ง ์์ผ๋ฏ๋ก ๋ฐํ ๊ฐ์ผ๋ก ๋์ฒดํ ์ ์๋ค.
int x = 0;
public int Increment() {
x++;
return x;
}
๐ ํจ์ํ ์ํคํ ์ฒ๋?โ
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๋ชฉํ๋ ๋ถ์์ฉ์ ์์ ํ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ ๋๋ผ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ ์ฝ๋์ ๋ถ์์ฉ์ ์ผ์ผํค๋ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฒ์ด๋ค. ์ด ๋ ๊ฐ์ง ์ฑ ์์ ๊ฐ๊ฐ๋ง ๋ณด๋๋ผ๋ ์ถฉ๋ถํ ๋ณต์กํ๋ค. ๋ชจ๋ ๊ณ ๋ คํ๋ฉด ๋ณต์ก๋๊ฐ ๋ฐฐ๊ฐ๋๊ณ ์ฅ๊ธฐ์ ์ผ๋ก ์ฝ๋์ ์ ์ง ๋ณด์์ฑ์ ๋ฐฉํดํ๋ค. ๋ถ์์ฉ์ ๋น์ฆ๋์ค ์ฐ์ฐ ๋์ผ๋ก ๋ชฐ์์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ถ์์ฉ๊ณผ ๋ถ๋ฆฌํ๋ค.
๋ค์ ๋ ๊ฐ์ง ์ฝ๋ ์ ํ์ ๊ตฌ๋ถํด์ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ถ์์ฉ์ ๋ถ๋ฆฌํ ์ ์๋ค.
- ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ์ฝ๋: ์ด ์ฝ๋๋ ๋ถ์์ฉ์ด ํ์ ์๊ธฐ ๋๋ฌธ์ ์ํ์ ํจ์๋ฅผ ์ฌ์ฉํด ์์ฑํ ์ ์๋ค.
- ํด๋น ๊ฒฐ์ ์ ๋ฐ๋ผ ์์ฉํ๋ ์ฝ๋: ์ด ์ฝ๋๋ ์ํ์ ํจ์์ ์ํด ์ด๋ค์ง ๋ชจ๋ ๊ฒฐ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณ๊ฒฝ์ด๋ ๋ฉ์์ง ๋ฒ์ค๋ก ์ ์ก๋ ๋ฉ์์ง์ ๊ฐ์ด ๊ฐ์์ ์ธ ๋ถ๋ถ์ผ๋ก ๋ณํํ๋ค.
๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ์ฝ๋๋ ์ข ์ข ํจ์ํ ์ฝ์ด๋ผ๊ณ ๋ ํ๋ค. ํด๋น ๊ฒฐ์ ์ ๋ฐ๋ผ ์์ฉํ๋ ์ฝ๋๋ ๊ฐ๋ณ ์ ์ด๋ค.
- ๊ฐ๋ณ ์ ธ์ ๋ชจ๋ ์ ๋ ฅ์ ์์งํ๋ค.
- ํจ์ํ ์ฝ์ด๋ ๊ฒฐ์ ์ ์์ฑํ๋ค.
- ์ ธ์ ๊ฒฐ์ ์ ๋ถ์์ฉ์ผ๋ก ๋ณํํ๋ค.
์ด ๋ ๊ณ์ธต์ ๊ณ์ ์ ๋ถ๋ฆฌํ๋ ค๋ฉด, ๊ฐ๋ณ ์ ธ์ ์์ฌ ๊ฒฐ์ ์ ์ถ๊ฐํ์ง ์๊ฒ๋ ๊ฒฐ์ ์ ๋ํ๋ด๋ ํด๋์ค์ ์ ๋ณด๊ฐ ์ถฉ๋ถํ ์๋์ง ํ์ธํด์ผ ํ๋ค. ๋ค์ ๋งํด, ๊ฐ๋ณ ์ ธ์ ๊ฐ๋ฅํ ํ ์๋ฌด๋ง๋ ํ์ง ์์์ผ ํ๋ค. ๋ชฉํ๋ ์ถ๋ ฅ ๊ธฐ๋ฐ ํ ์คํธ๋ก ํจ์ํ ์ฝ์ด๋ฅผ ๋๋ฃจ ๋๋ฃจ๊ณ ๊ฐ๋ณ ์ ธ์ ํจ์ฌ ๋ ์ ์ ์์ ํตํฉ ํ ์คํธ์ ๋งก๊ธฐ๋ ๊ฒ์ด๋ค.