{"id":1605,"date":"2024-09-23T14:02:25","date_gmt":"2024-09-23T05:02:25","guid":{"rendered":"https:\/\/skanto.co.kr\/?p=1605"},"modified":"2024-09-23T14:04:12","modified_gmt":"2024-09-23T05:04:12","slug":"understanding-immutable-state-in-java-when-why-how-to-use-it","status":"publish","type":"post","link":"https:\/\/skanto.co.kr\/?p=1605","title":{"rendered":"Understanding Immutable State in Java: When Why &amp; How to Use It"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:720\/format:webp\/1*riTfJKR4qO-pYd-pjgraCA.png\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n<p>\ub300\ubd80\ubd84\uc758 \ud504\ub85c\uadf8\ub798\ubc0d \uc5b8\uc5b4\uc5d0\ub294 \uc2dc\uac04\uc774 \ud750\ub974\ub354\ub77c\ub3c4 \ubcc0\ud558\uc9c0 \uc54a\ub294 \uac1c\ub150 \uc989, \uc2e0\ub8b0\uc131(Reliability)\uacfc \ud6a8\uc728\uc131(Efficiency)\uc744 \ub4e4 \uc218 \uc788\ub2e4. \uc774\ub294  Immutability\uacfc \uad00\ub828\ub41c \uac1c\ub150\uc774\ub2e4. Immutability \uc0c1\ud0dc\ub77c \ud568\uc740 Object\uc5d0 \uc18d\ud574\uc788\ub294 \uc18d\uc131\ub4e4\uc774 Object \uc0dd\uc131 \uc774\ud6c4\ubd80\ud130\ub294 \ubcc0\uacbd\ub418\uc9c0 \uc54a\ub294 \uc0c1\ud669(\ubd88\ubcc0)\uc744 \ub9d0\ud55c\ub2e4.  \uc774\uc640 \ubc18\ub300\ub85c Mutable \uc0c1\ud0dc\ub294 Object\uac00 \uc0dd\uc131\ub41c \uc774\ud6c4 \uc18d\uc131\ub4e4\uc774 \ubcc0\uacbd\ub418\ub294 \uc0c1\ud669\uc744 \ub9d0\ud55c\ub2e4. \uc774 \ub450 \uc0c1\ud0dc\ub294 \uac1c\ubc1c\ud558\ub2e4 \ubcf4\uba74 \uadf8\uc5d0 \uc0c1\uc751\ud558\ub294 \ubaa9\uc801\uacfc \uc5ed\ud560\uc774 \uc874\uc7ac\ud568\uc744 \uc54c \uc218 \uc788\ub294\ub370 \uc774 \uae00\uc5d0\uc11c\ub294 Immutable \uc0c1\ud0dc\uc5d0 \ucd08\uc810\uc744 \ub9de\ucd94\ub294 \uac83\uc73c\ub85c \ud558\uba70 \ub2e4\uc74c\uacfc \uac19\uc740 \ub0b4\uc6a9\ub4e4\uc744 \uc598\uae30\ud574 \ubcf4\uace0\uc790 \ud55c\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Java\uc5d0\uc11c immutable \uc0c1\ud0dc\uac00 \uc65c \uc911\uc694\ud55c\uac00?<\/li>\n\n\n\n<li>Java\uc5d0\uc11c immutable \uc0c1\ud0dc\ub97c \uc5b4\ub5bb\uac8c \uad6c\ud604\ud558\ub294\uac00?<\/li>\n\n\n\n<li>Java\uc5d0\uc11c mutable\uc0c1\ud0dc \ub300\uc2e0 \uc5b8\uc81c immutable \uc0c1\ud0dc\ub97c \ucc44\ud0dd\ud558\ub294\uac00?<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Java\uc5d0\uc11c immutable\uc0c1\ud0dc\uac00 \uc65c \uc911\uc694\ud55c\uac00?<\/h2>\n\n\n\n<p>Immutability \uc0c1\ud0dc\ub294 Java \uac1c\ubc1c \uad00\uc810\uc5d0\uc11c \ubcf4\uba74 \ub9e4\uc6b0 \uc911\uc694\ud55c \ubd80\ubd84\uc774\uba70 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc2dc\uc2a4\ud15c\uc758 \ud6a8\uc728\uc131\uacfc \uc720\uc9c0\ubcf4\uc218\uc131, \uc2e0\ub8b0\uc131\uc744 \uac00\ub984\ud558\ub294 \uae30\ucd08\uc801\uc778 \uc6d0\uce59\uc73c\ub85c \uc778\uc2dd\ub41c\ub2e4. \uc774\ub294 \ub9ce\uc740 \ud68c\uc0ac\ub4e4\uc774 Java \uac1c\ubc1c\uc790\ub97c \ubf51\uc744 \ub54c \uc804\ubb38\uc131 \uccb4\ud06c\ub97c \ubaa9\uc801\uc73c\ub85c immutable state\ub97c \ub2e4\ub8f0 \uc904 \uc544\ub294\uc9c0\ub97c \uccb4\ud06c\ud558\ub294 \uc774\uc720\uc774\uae30\ub3c4 \ud558\ub2e4. Java\uc5b8\uc5b4 \uac1c\ubc1c \uc601\uc5ed\uc5d0\uc11c immutability\uac00 \uac00\uc838\ub2e4 \uc8fc\ub294 \uc5ec\ub7ec \uc7a5\uc810\uc744 \ub4e4\uc790\uba74 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Thread Safety<\/h2>\n\n\n\n<p>Immutability\ub294 \ubcf5\uc7a1\ud55c synchronization \ucc98\ub9ac \ud544\uc694\uc131\uc744 \uc81c\uac70\ud568\uc73c\ub85c\uc368 thread safety\ub97c \ubcf4\uc7a5\ud574 \uc900\ub2e4. \uc0c1\ud0dc\uac00 immutable\uc774 \ub418\uba74 \uc5ec\ub7ec thread\uac00 \ub370\uc774\ud130\uc5d0 \uc811\uadfc\ud558\ub354\ub77c\ub3c4 \ub370\uc774\ud130\uc758 integrity\ub97c \ud574\uce58\uc9c0 \uc54a\uace0 \uc548\uc804\ud558\uac8c \uc811\uadfc\ud558\uac70\ub098 \uacf5\uc720\ud560 \uc218 \uc788\ub3c4\ub85d \ud55c\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Predictability<\/h2>\n\n\n\n<p>Immutability\ub294 \ucf54\ub4dc\uc758 \uc608\uce21 \uac00\ub2a5\uc131(predictability)\uc131\uc744 \ub192\uc5ec\uc8fc\uba70 \uc774\ud574\ud558\uae30 \uc27d\ub3c4\ub85d \ud55c\ub2e4. \uac1d\uccb4\uac00 \uc0dd\uc131\ub420 \ub54c \uc774 \uac1d\uccb4\uc758 \ubaa8\ub4e0 \uc18d\uc131\ub4e4\uc774 immutable\ub85c \uc120\uc5b8\ub418\uba74 \uc774 \uc18d\uc131\ub4e4\uc758 \uac12\ub4e4\uc740 \ubcc0\uacbd\ub418\uc9c0 \uc54a\ub294 \uc0c1\ud0dc\ub85c \uc720\uc9c0\ub418\uba70 \ub530\ub77c\uc11c \uc774\ub4e4\uc758 \ub3d9\uc791\ub3c4 \uc608\uce21\ud558\uae30 \uc26c\uc6cc\uc9c4\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Concurrency<\/h2>\n\n\n\n<p>Java\uc5d0\uc11c Immutability\ub294 \uacf5\uc720\uc0c1\ud0dc(shared state)\uad00\ub9ac\ub97c \uc704\ud574 \ud544\uc694\ud55c \ubcf5\uc7a1\uc131\uc744 \uc904\uc5ec\uc90c\uc73c\ub85c concurrent \ud504\ub85c\uadf8\ub798\ubc0d\uc744 \uc218\uc6d4\ud558\uac8c \ud55c\ub2e4. Immutable\uc740 \ucd08\uae30 \uc0dd\uc131\ub41c \uc774\ud6c4\ub85c \uadf8 \uc0c1\ud0dc\uac00 \ubcc0\uacbd\ub418\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 \uac1c\ubc1c\uc790\ub4e4\uc774 concurrent \ud658\uacbd\uc5d0\uc11c mutable\uc0c1\ud0dc\ub97c \uad00\ub9ac\ud558\ub2e4 \ubc94\ud558\uac8c \ub418\ub294 \uc77c\ubc18\uc801\uc778 \uac1c\ubc1c \uc2e4\uc218\ub97c \ud558\uc9c0 \uc54a\ub3c4\ub85d \ud574\uc900\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Performance Tuning<\/h2>\n\n\n\n<p>Immutable \uc0c1\ud0dc\uc5d0\uc11c\ub294 \uc0c8\ub85c\uc6b4 \uac1d\uccb4\ub97c \uc0dd\uc131\ud568\uc73c\ub85c \uc778\ud574 \uba54\ubaa8\ub9ac \uc0ac\uc6a9\uc728\uc744 \ub192\uac8c \ub9cc\ub4e4\uae30\ub294 \ud558\uc9c0\ub9cc \ub2e4\ub978 \ubc29\uc2dd\uc73c\ub85c \uc811\uadfc\ud574\ubcf4\uc790\uba74 \uc131\ub2a5 \ucd5c\uc801\ud654\uc5d0 \uae30\uc5ec\ud560 \uc218\ub3c4 \uc788\ub2e4. Java\uc5d0\uc11c immutable \uac1d\uccb4\ub294 \uc548\uc804\ud558\uac8c \uacf5\uc720\ud558\uac70\ub098 \uce90\uc2f1(Caching)\ud560 \uc218 \uc788\uc5b4 \ubc29\uc5b4\uc801\uc778 \ubcf5\uc0ac\uc640 Synchronization \ucc98\ub9ac\uc5d0 \ub300\ud55c \ubd80\ub2f4\uc744 \uc904\uc5ec\uc900\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Debugging and Maintenance<\/h2>\n\n\n\n<p>Immutable \uc0c1\ud0dc\uc5d0\uc11c\ub294 \uc608\uce21\uc774 \uc218\uc6d4\ud558\uace0 \uac1d\uccb4\uc758 \uc18d\uc131\ub4e4\uc774 \ubcc0\ud558\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 \ub514\ubc84\uae45\uc744 \uc704\ud55c \uc0c1\ud0dc\ub97c \ubcc0\uacbd\ud558\ub354\ub77c\ub3c4 \ubcf4\ub2e4 \uc548\uc804\ud558\ub2e4. \uac1c\ubc1c\uc790\ub4e4\uc740 \ub3c5\ub9bd\uc801\uc73c\ub85c \ubb38\uc81c\uc5d0 \uc811\uadfc\ud558\uace0 \ud655\uc778\ud560 \uc218 \uc788\uc73c\uba70 \uc774\uc288\ub97c immutable \uac1d\uccb4\ub85c \ud55c\uc815\uc2dc\ud0ac \uc218 \uc788\ub2e4. \uc774\ub807\uac8c \ud558\uba74 \ub514\ubc84\uae45\uc744 \ube60\ub974\uac8c \ud560 \uc218 \uc788\uc73c\uba70 \uc804\uccb4 \ucf54\ub4dc\ubca0\uc774\uc2a4\uc5d0 \ub300\ud55c \uc720\uc9c0\ubcf4\uc218\ub97c \ub354\uc6b1 \uc6a9\uc774\ud558\uac8c \ud574 \uc900\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Java\uc5d0\uc11c immutable \uc0c1\ud0dc\ub97c \uc5b4\ub5bb\uac8c \uad6c\ud604\ud558\ub294\uac00?<\/h2>\n\n\n\n<p>Java \uac1c\ubc1c\uc5d0\uc11c Immutability\ub97c \uc704\ud574 \uac1d\uccb4\uc758 Lifecycle \ub3d9\uc548 \uc0c1\ud0dc\uac00 \uace0\uc815\ub420 \uc218 \uc788\ub3c4\ub85d \ud558\ub294 \uc8fc\uc694 \uc6d0\uce59(Key Principle)\uacfc Best Practice\ub97c \ub530\ub974\ub3c4\ub85d \uad8c\uace0\ud55c\ub2e4. Java \ucf54\ub4dc\uc5d0\uc11c immutability\ub97c \uc801\uc6a9\ud560 \uc218 \uc788\ub294 \ub2e8\uacc4\ubcc4 \uac00\uc774\ub4dc\ub294 \uc544\ub798\uc640 \uac19\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Declare Classes as Final<\/h3>\n\n\n\n<p>\ud074\ub798\uc2a4\ub97c \uc0c1\uc18d\ud558\uc9c0 \ubabb\ud558\ub3c4\ub85d final\ub85c \uc120\uc5b8\ud55c\ub2e4. \uc774\ub807\uac8c \ud558\uba74 \ud074\ub798\uc2a4\uc758 \ub3d9\uc791\uacfc \uc0c1\ud0dc\ub294 \ubcc0\ud558\uc9c0 \uc54a\ub294 \uc0c1\ud0dc\ub85c \ub0a8\uac8c\ub41c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public final class Point {\n\/\/ Class definition\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2. Make Fields Private<\/h3>\n\n\n\n<p>Field\ub97c private\uc73c\ub85c \uc120\uc5b8\ud558\uba74 \ud074\ub798\uc2a4 \ubc16\uc5d0\uc11c\uc758 \uc811\uadfc\uc744 \ucc28\ub2e8\uc2dc\ud0ac \uc218 \uc788\ub2e4. \uc774\ub807\uac8c \ud558\uba74 \ub370\uc774\ud130\uc758 \ucea1\uc290\ud654(encapsulation)\uc744 \ud5a5\uc0c1\uc2dc\ud0ac \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public final class Point {\n    private final int x;\n    private final int y;\n    \/\/ Class definition\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3. Avoid providing Setter Methods<\/h3>\n\n\n\n<p>\uc0c1\ud0dc\uc5d0 \ub530\ub77c \ud574\ub2f9 \uac12\uc774 \ubc14\ub00c\ub294 \uac83\uc744 \ubc14\ub77c\uc9c0 \uc54a\uc744 \uc218 \uc788\ub2e4. \ub530\ub77c\uc11c setter\uba54\uc18c\ub4dc\ub97c \ucd94\uac00\ud558\uc9c0 \uc54a\ub294\ub2e4\uba74 \uac1d\uccb4\uac00 \uc0dd\uc131\ub41c \uc774\ud6c4 \uac12\uc744 \ubcc0\uacbd\ud558\uc9c0 \ubabb\ud560 \uac83\uc774\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public final class Point {\n    private final int x;\n    private final int y;\n   \n    public Point(int x, int y) {\n        this.x = x;\n        this.y = y;\n    }\n    Use getter methods mentioned in step 6\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4. Make Mutable Fields Final (if needed)<\/h3>\n\n\n\n<p>Point\ub77c\ub294 \ud074\ub798\uc2a4\uac00 \uc788\ub2e4\uace0 \ud560 \uacbd\uc6b0 \uc774 \ud074\ub798\uc2a4\uac00 mutable\uc778 Address \ud074\ub798\uc2a4\uc758 \uac1d\uccb4\ub97c reference\ub85c \uac00\uc9c0\ub294 \uc0c1\ud669\uc774 \ubc1c\uc0dd\ud560 \uc218 \uc788\ub2e4. \uc774 \uacbd\uc6b0 immutability\ub97c \ubcf4\uc7a5\ud558\uae30 \uc704\ud574 \uc544\ub798\uc640 \uac19\uc774 \ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public final class Point {\n    private final int x;\n    private final int y;\n    private final Address address; \/\/assuming address class is mutable\n\n    public Point(int x, int y, Address address) {\n        this.x = x;\n        this.y = y;\n        \/\/Defensive copy prevents modification of original address object\n        this.address = new Address{address.getStreet() , address.getCity() );\n    }\n    \/\/\/ Class Definition<\/code><\/pre>\n\n\n\n<p>\uc5ec\uae30\uc11c address \ud544\ub4dc\ub294 final\ub85c \uc120\uc5b8\ub418\uc5c8\uc9c0\ub9cc \uc6d0\ubcf8 Address\uac1d\uccb4\uc758 \uc0c1\ud0dc\ub97c \ubcc0\uacbd\ud558\uc9c0 \uc54a\ub3c4\ub85d \ud558\uae30 \uc704\ud574 \uc0dd\uc131\uc790\uc5d0\uc11c deep copy\ub97c \uc218\ud589\ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5. Initialize Fields using a Constructor with Deep Copy (if required)<\/h3>\n\n\n\n<p>\uc774 \ub2e8\uacc4\ub294 \ud074\ub798\uc2a4\uac00 \ub2e4\ub978 \uac1d\uccb4\uc758 reference\ub97c \uac00\uc9c8 \uacbd\uc6b0\uc5d0 \ud574\ub2f9\ud55c\ub2e4.  \uc55e\uc758 4\ubc88 \uc0d8\ud50c\uc5d0\uc11c \ubcf4\uba74 \uc0dd\uc131\uc790\uc5d0\uc11c Address\uac1d\uccb4\uc758 \ubcf5\uc0ac\ubcf8\uc744 \uc0dd\uc131\ud558\ub294 \uac83\uc744 \ubcf4\uc5ec\uc8fc\uc5c8\ub2e4. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">6. Provide Getter Methods that return out Objects<\/h3>\n\n\n\n<p>\uac12 &#8216;y&#8217;\ub97c \uc9c1\uc811\uc801\uc73c\ub85c \ubc18\ud658\ud558\ub294 \ub300\uc2e0 getter \uba54\uc18c\ub4dc\ub97c \ub9cc\ub4e4\uace0 \uc5ec\uae30\uc5d0\uc11c \ubcf5\uc0ac\ubcf8\uc744 \ubc18\ud658\ud558\ub3c4\ub85d \ud55c\ub2e4 \uc774\ub807\uac8c \ud558\uba74 \ubd80\uc8fc\uc758\ud558\uac8c \ub0b4\ubd80 \uc0c1\ud0dc\ub97c \ubcc0\uacbd\ud558\ub294 \uac83\uc744 \ubc29\uc9c0\ud560 \uc218 \uc788\ub2e4. (primitive  \ud0c0\uc785\uc740 call by value\uac00 \uac12\uc774 \ubcf5\uc0ac\ub41c \ud6c4 \ub9ac\ud134\ub41c\ub2e4)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public final class Point {\n    private final int x;\n    private final int y;\n \n    publicPoint(int x, int y) {\n        this.x = x;\n        this.y.= y;\n    }\n    public int getX() {\n        return  x;\n    }\n    public int getY() {\n        Returning a copy to avoid medication of original value\n        return y;\n    }\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Java\uc5d0\uc11c mutable\uc0c1\ud0dc \ub300\uc2e0 \uc5b8\uc81c immutable \uc0c1\ud0dc\ub97c \ucc44\ud0dd\ud558\ub294\uac00?<\/h2>\n\n\n\n<p>\uc9c0\uae08\uae4c\uc9c0 immutability \uc0c1\ud0dc\uac00 \uc65c \uc911\uc694\ud55c\uc9c0 \uadf8\ub9ac\uace0, \uc5b4\ub5bb\uac8c \uad6c\ud604\ud558\ub294\uc9c0 \uc54c\uc558\ubcf4\uc558\ub2e4. \ud558\uc9c0\ub9cc Java\uc5d0\uc11c \uc5b8\uc81c mutable \uc0c1\ud0dc \ub300\uc2e0 immutable \uc0c1\ud0dc\ub97c \uc120\ud0dd\ud574\uc57c \ud560\uae4c? \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \uc544\ub798\uc640 \uac19\uc774 Immutable \uc0c1\ud0dc\uac00 \ub3c4\uc6c0\uc774 \ub418\ub294 \uc774\uc0c1\uc801\uc778 \uc2dc\ub098\ub9ac\uc624\uac00 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Thread Safety<\/h3>\n\n\n\n<p>\uae30\ubcf8\uc801\uc73c\ub85c Immutable \uac1d\uccb4\ub294 thread-safe\ud558\ub2e4. \uc774\ub4e4\uc758 \uc0c1\ud0dc\ub294 \ubcc0\ud558\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 synchronization\uc774\uc288\uc5d0 \uace0\ubbfc\uc774 \ud544\uc694 \uc5c6\uc73c\uba70 \ub2e4\uc218\uc758 thread\uac00 \ub3d9\uc77c\ud55c immutable\uac1d\uccb4\uc5d0 \uc811\uadfc\ud560 \uc218 \uc788\ub2e4. \uc774\ub807\uac8c \ud558\uba74 concurrent \ud504\ub85c\uadf8\ub798\ubc0d\uc744 \ub2e8\uc21c\ud558\uac8c \ud574 \uc8fc\uba70 race condition\uc758 \ubc1c\uc0dd \uc704\ud5d8\uc744 \uc904\uc5ec\uc900\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Referential Transparency<\/h3>\n\n\n\n<p>Immutable\uac1d\uccb4\ub294 referential transparency\ub97c \ud5a5\uc0c1\uc2dc\ucf1c \uc900\ub2e4. \ub530\ub77c\uc11c, \ub9cc\uc57d \ub450 \uac1d\uccb4\uac00 \ub3d9\uc77c\ud55c \uc0c1\ud0dc\ub97c \uac00\uc9c0\uace0 \uc788\ub2e4\uba74 \uc774 \ub450 \uac1d\uccb4\ub294 \ub3d9\uc77c\ud558\ub2e4\uace0 \uac04\uc8fc\ud560 \uc218 \uc788\ub2e4. \uc774\ub807\uac8c \ud558\uba74 \uc774\ub4e4 \uac1d\uccb4\uc5d0 \ub300\ud55c \uc5f0\uc0b0\uc774 \uc5b4\ub5bb\uac8c \uc218\ud589\ub418\ub294\uc9c0 \uc720\ucd94\ud558\uae30\uac00 \uc26c\uc6cc\uc9c4\ub2e4.  \uc774\ub294 \ub3d9\uc791 \uacfc\uc815\uc5d0\uc11c \uac1d\uccb4\uc758 \uc0c1\ud0dc\uac00 \ubcc0\uacbd\ub418\uc9c0 \uc54a\uc74c\uc744 \ubcf4\uc7a5\ud574 \uc8fc\uae30 \ub54c\ubb38\uc774\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Predictability and Debugging<\/h3>\n\n\n\n<p>Immutable\uac1d\uccb4\uc758 \ud56d\uc2dc\uc131(constant state)\uc740 \uc774\ub4e4 \ub3d9\uc791\uc5d0 \ub300\ud55c \uc608\uce21\uc744 \ub354\uc6b1 \uc6a9\uc774\ud558\ub3c4\ub85d \ub9cc\ub4e0\ub2e4. \uac1d\uccb4\uac00 \ud55c\ubc88 \uc0dd\uc131\ub418\uba74 immutable \uac1d\uccb4\ub294 \ub0b4\ubd80\uc758 \uac12\uc744 \ubcc0\uacbd\ub418\uac70\ub098 \uc218\uc815\ub418\uc9c0 \uc54a\uc544 \ucf54\ub4dc\uc758 \ub3d9\uc791\uc744 \uc27d\uac8c \uc720\ucd94\ud560 \uc218 \uc788\uac8c \ud55c\ub2e4. \uc774\ub294 \ub514\ubc84\uae45\uc744 \uc27d\uac8c \ud574 \uc8fc\uace0 reference\ub97c \ub530\ub77c\uac00\uba70 \uac1d\uccb4\uc758 \uc0c1\ud0dc\ub97c \uc27d\uac8c \ucd94\uc801\ud560 \uc218 \uc788\ub3c4\ub85d \ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Caching<\/h3>\n\n\n\n<p>Immutable \uac1d\uccb4\ub294 \uc608\uc0c1\uce58 \ubabb\ud55c \uc774\uc720\ub85c \uc0c1\ud0dc\uac00 \ubcc0\uacbd\ub418\ub294 \uac83\uc744 \ubc29\uc9c0\ud558\uae30 \ub54c\ubb38\uc5d0 Caching\uc758 \uc694\uad6c\uc0ac\ud56d\uc73c\ub85c \uc774\uc0c1\uc801\uc774\ub77c \ud560 \uc218 \uc788\ub2e4. \uc5b4\ub5a4 \uae30\ub2a5\uc774 Immutable \uac1d\uccb4\uc758 \ud2b9\uc815 \uac12\uc744 \uc790\uc8fc \uc0ac\uc6a9\ud55c\ub2e4\uba74 Outdate\ub418\ub294 \uac71\uc815 \uc5c6\uc774 \uadf8 \uac12\ub97c \uce90\uc2f1\uc2dc\ud0ac \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Functional Programming<\/h3>\n\n\n\n<p>Immutability\ub294 functional programming\uc5d0\uc11c\uc758 \ud575\uc2ec Principle \uc911 \ud558\ub098\uc774\ub2e4. \uc774\ub294 immutability\uc640 \uc21c\uc218 function\uc758 \uac1c\ub150\uc744 \uac15\uc870\ud55c\ub2e4. \uac1d\uccb4\ub97c immutable\ub85c \ub9cc\ub4e6\uc73c\ub85c\uc368 \ub354\uc6b1 functional\ud55c \ucf54\ub4dc\ub97c \uc791\uc131\ud560 \uc218 \uc788\uac8c\ud558\uba70 \ud14c\uc2a4\ud2b8\uc640 \uc6d0\uc778\ubd84\uc11d\uc744 \ub354\uc6b1 \uc27d\ub3c4\ub85d \ud55c\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ub9c8\uce58\uba70&#8230;<\/h2>\n\n\n\n<p>Java\uc5d0\uc11c \uc0c1\ud0dc\uc758 immutability\ub294 \ub450 \uac00\uc9c0 \uc5ed\ud560 \uc989, \ub370\uc774\ud130 \ubb34\uacb0\uc131 \ubcf4\ud638\uc640 thread safety\ub97c \ubcf4\uc7a5 \uce21\uba74\uc5d0\uc11c \ub9e4\uc6b0 \uc911\uc694\ud55c \uac1c\ub150\uc774\ub2e4. \uac1d\uccb4\uc758 \uc0c1\ud0dc\uac00 \uc0dd\uc131 \uc774\ud6c4 \ubcc0\uacbd\ub418\uc9c0 \uc54a\ub294\ub2e4\ub294 \uac83\uc744 \ubcf4\uc7a5\ud55c\ub2e4\uba74 \uac1c\ubc1c\uc790\ub4e4\uc740 \uac1d\uccb4\uac00 Lifecycle \ub3d9\uc548 \ubcc0\ud558\uc9c0 \uc54a\ub294 \uc0c1\ud0dc\ub85c \uc720\uc9c0\ub428\uc744 \ud655\uc2e0\ud560 \uc218 \uc788\ub2e4. \uc774\ub294 \ubc84\uadf8\uc758 \ubc1c\uc0dd \uc704\ud5d8\uc744 \uc904\uc5ec\uc8fc\uace0 thread safety\ub97c \uac1c\uc120\ud558\uba70 concurrent \ud504\ub85c\uadf8\ub798\ubc0d\uc744 \ub2e8\uc21c\ud558\uac8c \ud574 \uc900\ub2e4. \ub354\uc6b1\uc774, immutability\ub97c \uc801\uc6a9\ud558\uba74 functional \ud504\ub85c\uadf8\ub798\ubc0d\uc744 \uac00\ub2a5\ud558\uac8c \ud558\uace0 \ub354\uc6b1 \ubaa8\ub4c8\ud654 \ub418\uace0 \ud655\uc7a5 \uac00\ub2a5\ud55c \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc544\ud0a4\ud14d\ucc98\ub85c \uc774\uc5b4\uac08 \uc218 \uc788\ub3c4\ub85d \ud55c\ub2e4. \uba74\ubc00\ud55c \uc124\uacc4\uc640 immutability \uc6d0\uce59\uc5d0 \ub300\ud55c \ud1b5\ucc30\ub825\uc744 \ubc14\ud0d5\uc73c\ub85c \ud558\uba74 \uc219\ub828\ub41c Java \uac1c\ubc1c\uc790\ub4e4\uc740 \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158 \uac1c\ubc1c \uacfc\uc815\uc5d0\uc11c \ucda9\ubd84\ud55c \uc7a0\uc7ac\ub825\uc744 \ubc1c\ud718\ud560 \uc218 \uc788\uc744 \uac83\uc774\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ub300\ubd80\ubd84\uc758 \ud504\ub85c\uadf8\ub798\ubc0d \uc5b8\uc5b4\uc5d0\ub294 \uc2dc\uac04\uc774 \ud750\ub974\ub354\ub77c\ub3c4 \ubcc0\ud558\uc9c0 \uc54a\ub294 \uac1c\ub150 \uc989, \uc2e0\ub8b0\uc131(Reliability)\uacfc \ud6a8\uc728\uc131(Efficiency)\uc744 \ub4e4 \uc218 \uc788\ub2e4. \uc774\ub294 Immutability\uacfc \uad00\ub828\ub41c \uac1c\ub150\uc774\ub2e4. Immutability \uc0c1\ud0dc\ub77c \ud568\uc740 Object\uc5d0 \uc18d\ud574\uc788\ub294 \uc18d\uc131\ub4e4\uc774 Object \uc0dd\uc131 \uc774\ud6c4\ubd80\ud130\ub294 \ubcc0\uacbd\ub418\uc9c0 \uc54a\ub294 \uc0c1\ud669(\ubd88\ubcc0)\uc744 \ub9d0\ud55c\ub2e4. \uc774\uc640 \ubc18\ub300\ub85c Mutable \uc0c1\ud0dc\ub294 Object\uac00 \uc0dd\uc131\ub41c \uc774\ud6c4 \uc18d\uc131\ub4e4\uc774 \ubcc0\uacbd\ub418\ub294 \uc0c1\ud669\uc744 \ub9d0\ud55c\ub2e4. \uc774 \ub450 \uc0c1\ud0dc\ub294 \uac1c\ubc1c\ud558\ub2e4 \ubcf4\uba74 \uadf8\uc5d0 \uc0c1\uc751\ud558\ub294 \ubaa9\uc801\uacfc \uc5ed\ud560\uc774 \uc874\uc7ac\ud568\uc744 \uc54c \uc218 \uc788\ub294\ub370 \uc774 \uae00\uc5d0\uc11c\ub294 Immutable \uc0c1\ud0dc\uc5d0 \ucd08\uc810\uc744 \ub9de\ucd94\ub294 \uac83\uc73c\ub85c \ud558\uba70 \ub2e4\uc74c\uacfc \uac19\uc740 \ub0b4\uc6a9\ub4e4\uc744 \uc598\uae30\ud574 \ubcf4\uace0\uc790 \ud55c\ub2e4. Java\uc5d0\uc11c immutable\uc0c1\ud0dc\uac00 \uc65c \uc911\uc694\ud55c\uac00? Immutability \uc0c1\ud0dc\ub294 Java \uac1c\ubc1c \uad00\uc810\uc5d0\uc11c \ubcf4\uba74 \ub9e4\uc6b0&#8230;<\/p>\n<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/skanto.co.kr\/?p=1605\"> Read More<span class=\"screen-reader-text\">  Read More<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[14,7],"tags":[164],"class_list":["post-1605","post","type-post","status-publish","format-standard","hentry","category-sw-development","category-7","tag-immutability"],"_links":{"self":[{"href":"https:\/\/skanto.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/1605","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/skanto.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/skanto.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/skanto.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/skanto.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1605"}],"version-history":[{"count":8,"href":"https:\/\/skanto.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/1605\/revisions"}],"predecessor-version":[{"id":1613,"href":"https:\/\/skanto.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/1605\/revisions\/1613"}],"wp:attachment":[{"href":"https:\/\/skanto.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1605"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/skanto.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1605"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/skanto.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1605"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}