๐Ÿ“š
TIL
  • README
  • Git
    • Basic
    • Remote Repository
    • Log & Diff
    • Rebase&Cherri-Pick
    • git-flow
  • DevOps
    • Monolithic vs MSA
    • Jenkins ์‹œ์ž‘ํ•˜๊ธฐ
    • Airflow ์‹œ์ž‘ํ•˜๊ธฐ
    • Airflow ์‹œ์ž‘ํ•˜๊ธฐ
    • Build Tools
      • maven
  • ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก 
    • TDD
  • Spring
    • IoC
    • Is Spring Bean Thread-Safe?
    • Spring Singleton
    • Component Scan
    • Spring Annotation
    • ์˜์กด ๊ด€๊ณ„ ์ฃผ์ž…(DI)
    • Lombok ํ™œ์šฉํ•˜๊ธฐ
    • Bean ์ƒ๋ช…์ฃผ๊ธฐ์™€ ์ฝœ๋ฐฑ
    • Bean Scope
    • AOP(1) - AOP๋ž€
    • AOP(2) - Aop Proxy
    • AOP(3) - Dynamic Proxy
    • AOP(4) - AspectJ
    • POJO
    • Spring ์„œ๋น„์Šค ๊ตฌ์กฐ
    • Transaction
    • JPA๋ž€?
    • JPA Entity
    • Spring Data JPA
    • Spring Data Specification
    • Model Mapping
    • Cache
    • restTemplate
    • YAML ํŒŒ์ผ ์„ค์ •
    • Spring Boot
      • H2 DB ์„ค์ •
      • ๋‹ค์ค‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •
      • Mybatis ์—ฐ๋™ํ•˜๊ธฐ
    • Spring Batch
      • Batch ์‹œ์ž‘ํ•ด๋ณด๊ธฐ
      • Batch Job Flow
      • Job
      • Step
      • Batch Scope & Job Parameter
      • JobRepository์™€ ๋ฉ”ํƒ€ํ…Œ์ด๋ธ”
      • Chunk ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      • ItemReader
      • ItemProcessor
      • ItemWriter
      • Batch Schedular
      • Job๋ณ„ Bean๋“ฑ๋กํ•˜๊ธฐ
      • Batch ๊ตฌํ˜„์‹œ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜ ์ •๋ฆฌ
      • Spring Batch Scaling
        • Multithread Job๊ตฌํ˜„์‹œ ์ด์Šˆ์‚ฌํ•ญ
    • Spring test
      • Junit5
        • ํ…Œ์ŠคํŠธ ์ด๋ฆ„ ํ‘œ๊ธฐ
        • ํ…Œ์ŠคํŠธ ๊ทธ๋ฃน ์‚ฌ์ด์˜ ๊ด€๊ณ„
        • ํƒœ๊ทธ์™€ ํ•„ํ„ฐ๋ง
        • ๋™์  ํ…Œ์ŠคํŠธ
        • ํ…Œ์ŠคํŠธ LifeCycle
        • ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ
        • ํ…Œ์ŠคํŠธ ์ˆœ์„œ
        • AssertJ
        • ํ…Œ์ŠคํŠธ ๋ณ‘๋ ฌ ์‹คํ–‰
        • AssertJ
        • Mock
      • Spring Boot Test DB ๋ถ„๋ฆฌ
      • Spring Batch Test
  • Web Application
    • Web Server & WAS
    • ๊ด€๋ จ ๊ฐœ๋… - HTTP API, HTML, CSR, SSR
    • Servlet
    • JSP
    • Cookie And Session
    • ์˜ˆ์™ธํŽ˜์ด์ง€
    • Java Bean
    • JDBC
    • Connection Pool
    • ํŒŒ์ผ ์—…๋กœ๋“œ
    • Expression Language
    • JSTL
    • FrontControllerํŒจํ„ด Command ํŒจํ„ด
    • Forwarding
    • MVC
    • ํšŒ์›๊ฐ€์ž…์˜ˆ์ œ
    • ์ฐธ๊ณ 
      • ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ค์ •
  • Java+
    • SOAP/WSDL vs REST
    • WSDL์„ JAVA๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ
    • SOAP ํ†ต์‹  OPEN API๋กœ ๊ฐœ๋ฐœํ•ด๋ณด๊ธฐ
  • Java
    • Basic
      • ๋ณ€์ˆ˜์™€ ํƒ€์ž…
      • ์—ฐ์‚ฐ์ž
      • ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ˜๋ณต๋ฌธ
      • ์ฐธ์กฐ ํƒ€์ž…
      • ํด๋ž˜์Šค
      • ์ƒ์†(Inheritance)
      • ์ธํ„ฐํŽ˜์ด์Šค(Interface)
      • ์ค‘์ฒฉ ํด๋ž˜์Šค์™€ ์ค‘์ฒฉ ์ธํ„ฐํŽ˜์ด์Šค
      • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
      • API - Object, System, Class, Math, Wrapper
      • API - String, StringBuffer, StringBuilder
      • Thread
      • Generic
      • Lambda
      • Collection - List, Set
      • Collection - Map
      • Collection - Tree
      • Collection - Stack, Queue
      • Stream
      • Reflection
      • ์ •๊ทœํ‘œํ˜„์‹
      • GUI
      • UML
      • Serializable
    • Advanced
      • OutOfMemoryError
      • AutoValue
      • meta-annotation
        • @Retention
        • @Target
        • @Repeatable
    • Effective Java 3/E
      • ITEM 1: Static Factory Method(์ •์  ๋ฉ”์†Œ๋“œ)
      • ITEM 2: Builder Pattern
      • ITEM 3: Singleton
      • ITEM 4: Private Constructor
      • ITEM 5: Dependency Injection
      • ITEM 6: Avoid Unnecessary Object
      • ITEM 7: Eliminate Object Reference
      • ITEM 8: Avoid finalizer and cleaner
      • ITEM 9: try-with-resources
      • ITEM 10: The gerneral contract when overriding equlas
      • ITEM 11: Overriding hashCode
      • ITEM 12: overriding toString
      • ITEM 13: overriding clone judiciously
      • ITEM 14: Consider implementing comparable
      • ITEM 15: ํด๋ž˜์Šค์™€ ๋ฉค๋ฒ„์˜ ์ ‘๊ทผ์„ ์ตœ์†Œํ™”ํ•ด๋ผ
      • ITEM 16: Use Accessor methods
      • ITEM 17: ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์„ ์ตœ์†Œํ™”ํ•ด๋ผ(๋ถˆ๋ณ€ ํด๋ž˜์Šค)
      • ITEM 18: ์ƒ์†๋ณด๋‹จ ์ปดํฌ์ง€์…˜์„ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 19: ์ƒ์†์„ ๊ณ ๋ คํ•ด ์„ค๊ณ„ํ•˜๊ณ  ๋ฌธ์„œํ™”ํ•ด๋ผ
      • ITEM 20: ์ถ”์ƒ ํด๋ž˜์Šค๋ณด๋‹ค ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์šฐ์„ ํ•˜๋ผ
      • ITEM 21: ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌํ˜„ํ•˜๋Š” ์ชฝ์„ ์ƒ๊ฐํ•ด ์„ค๊ณ„ํ•ด๋ผ.
      • ITEM 22: ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํƒ€์ž…์„ ์ •์˜ํ•˜๋Š” ์šฉ๋„๋กœ๋งŒ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 23: ํƒœ๊ทธ ๋‹ฌ๋ฆฐ ํด๋ž˜์Šค๋ณด๋‹ค ํด๋ž˜์Šค ๊ณ„์ธต๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•ด๋ผ
      • ITEM 24: ๋ฉค๋ฒ„ ํด๋ž˜์Šค๋Š” ๋˜๋„๋ก static์œผ๋กœ ๊ตฌํ˜„ํ•ด๋ผ
      • ITEM 25: ํ†ฑ๋ ˆ๋ฒจ ํด๋ž˜์Šค๋Š” ํ•œ ํŒŒ์ผ์— ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•ด๋ผ.
      • ITEM 26: Raw type์€ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ๋ผ
      • ITEM 27: ๋น„๊ฒ€์‚ฌ ๊ฒฝ๊ณ ๋ฅผ ์ œ๊ฑฐํ•ด๋ผ
      • ITEM 28: ๋ฐฐ์—ด๋ณด๋‹ค๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 29: ์ด์™•์ด๋ฉด ์ œ๋„ค๋ฆญ ํƒ€์ž…์œผ๋กœ ๋งŒ๋“ค์–ด๋ผ
      • ITEM 30: ์ด์™•์ด๋ฉด ์ œ๋„ค๋ฆญ ๋ฉ”์„œ๋“œ๋กœ ๋งŒ๋“ค์–ด๋ผ
      • ITEM 31 : ํ•œ์ •์  ์™€์ผ๋“œ์นด๋“œ๋ฅผ ์‚ฌ์šฉํ•ด API ์œ ์—ฐ์„ฑ์„ ๋†’์—ฌ๋ผ
      • ITEM 32: ์ œ๋„ค๋ฆญ๊ณผ ๊ฐ€๋ณ€์ธ์ˆ˜๋ฅผ ํ•จ๊ป˜ ์“ธ ๋•Œ๋Š” ์‹ ์ค‘ํ•ด๋ผ
      • ITEM 33: ํƒ€์ž… ์•ˆ์ „ ์ด์ข… ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ณ ๋ คํ•ด๋ผ
      • ITEM 34: int ์ƒ์ˆ˜ ๋Œ€์‹  ์—ด๊ฑฐ ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 35: ordinal ๋ฉ”์„œ๋“œ ๋Œ€์‹  ์ธ์Šคํ„ด์Šค ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 36: ๋น„ํŠธ ํ•„๋“œ ๋Œ€์‹  EnumSet์„ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 37: ordinal ์ธ๋ฑ์‹ฑ ๋Œ€์‹  EnumMap์„ ์‚ฌ์šฉํ•ด๋ผ
      • TEM 38 : ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์—ด๊ฑฐํƒ€์ž…์ด ํ•„์š”ํ•˜๋ฉด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 39: ๋ช…๋ช… ํŒจํ„ด๋ณด๋‹ค ์• ๋„ˆํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 40: @Override ์–ด๋…ธํ…Œ์ด์…˜์„ ์ผ๊ด€๋˜๊ฒŒ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 41: ์ •์˜ํ•˜๋ ค๋Š” ๊ฒƒ์ด ํƒ€์ž…์ด๋ผ๋ฉด ๋งˆ์ปค ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 42: ์ต๋ช… ํด๋ž˜์Šค๋ณด๋‹ค๋Š” ๋žŒ๋‹ค๋ฅผ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 43: ๋žŒ๋‹ค๋ณด๋‹ค๋Š” ๋ฉ”์„œ๋“œ ์ฐธ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 44: ํ‘œ์ค€ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 45: ์ŠคํŠธ๋ฆผ์€ ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 46: ์ŠคํŠธ๋ฆผ์—์„œ ๋ถ€์ž‘์šฉ ์—†๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 47: ๋ฐ˜ํ™˜ ํƒ€์ž…์œผ๋กœ๋Š” ์ŠคํŠธ๋ฆผ๋ณด๋‹ค ์ปฌ๋ ‰์…˜์ด ๋‚ซ๋‹ค.
      • ITEM 48: ์ŠคํŠธ๋ฆผ ๋ณ‘๋ ฌํ™”๋Š” ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 49: ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์œ ํšจํ•œ์ง€ ๊ฒ€์‚ฌํ•ด๋ผ
      • ITEM 50: ์ ์‹œ์— ๋ฐฉ์–ด์  ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค์–ด๋ผ
      • ITEM 51: ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ์‹ ์ค‘ํžˆ ์„ค๊ณ„ํ•ด๋ผ
      • ITEM 52: ๋‹ค์ค‘์ •์˜๋Š” ์‹ ์ค‘ํžˆ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 53: ๊ฐ€๋ณ€์ธ์ˆ˜๋Š” ์‹ ์ค‘ํžˆ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 54: null์ด ์•„๋‹Œ, ๋นˆ ์ปฌ๋ ‰์…˜์ด๋‚˜ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•ด๋ผ
      • ITEM 55: Optional ๋ฐ˜ํ™˜์€ ์‹ ์ค‘ํ•˜๊ฒŒ ํ•ด๋ผ
      • ITEM 56: ๊ณต๊ฐœ๋œ API ์š”์†Œ์—๋Š” ํ•ญ์ƒ ์ฃผ์„์„ ์ž‘์„ฑํ•ด๋ผ
      • ITEM 57: ์ง€์—ญ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ™”ํ•ด๋ผ
      • ITEM 58: ์ „ํ†ต์ ์ธ for ๋ฌธ๋ณด๋‹ค๋Š” for-each๋ฌธ์„ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 59: ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ตํžˆ๊ณ  ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 60: ์ •ํ™•ํ•œ ๋‹ต์ด ํ•„์š”ํ•˜๋‹ค๋ฉด float์™€ double์€ ํ”ผํ•ด๋ผ
      • ITEM 61: ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…๋ณด๋‹ค๋Š” ๊ธฐ๋ณธ ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 62: ๋‹ค๋ฅธ ํƒ€์ž…์ด ์ ์ ˆํ•˜๋‹ค๋ฉด ๋ฌธ์ž์—ด ์‚ฌ์šฉ์„ ํ”ผํ•ด๋ผ
      • ITEM 63: ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ์€ ๋А๋ฆฌ๋‹ˆ ์ฃผ์˜ํ•ด๋ผ
      • ITEM 64: ๊ฐ์ฒด๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด ์ฐธ์กฐํ•ด๋ผ
      • ITEM 65: ๋ฆฌํ”Œ๋ ‰์…˜๋ณด๋‹ค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 66: ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ๋Š” ์‹ ์ค‘ํžˆ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 67: ์ตœ์ ํ™”๋Š” ์‹ ์ค‘ํžˆ ํ•ด๋ผ
      • ITEM 68: ์ผ๋ฐ˜์ ์œผ๋กœ ํ†ต์šฉ๋˜๋Š” ๋ช…๋ช… ๊ทœ์น™์„ ๋”ฐ๋ผ๋ผ
    • ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™(SOLID)
    • ๋””์ž์ธํŒจํ„ด
      • Strategy Pattern
      • Template Method Pattern
      • Factory Method Pattern
      • Singleton
      • Delegation
      • Proxy
      • Adapter Pattern
    • ์‹ค์Šต
      • ์ธํ„ฐํŽ˜์ด์Šค ์‹ค์Šต - Vehicle
      • ์ธํ„ฐํŽ˜์ด์Šค ์‹ค์Šต - Remote
      • GUI ์‹ค์Šต - Calculator
      • GUI ์‹ค์Šต - button
      • GUI ์‹ค์Šต - lotto
      • Thread ์‹ค์Šต - ์ขŒ์„์˜ˆ์•ฝ, ๋ฉ”์„ธ์ง€๋ณด๋‚ด๊ธฐ
    • Jar vs War
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
    • KEY
    • Index
    • Transaction
    • Trigger
    • Procedure / Function
    • Package
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฐ์›€ํ„ฐ
      • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ
      • ๊ด€๊ณ„๋ฐ์ดํ„ฐ ๋ชจ๋ธ
      • ๊ด€๊ณ„๋Œ€์ˆ˜์™€ SQL
    • MySQL
      • Database๋ž€
      • MySQL ์‹œ์ž‘ํ•˜๊ธฐ
      • MySQL Database
      • MySQL Table
      • CRUD
      • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
      • Server์™€ Client
    • PostgreSQL
    • NoSQL
      • Install Cassandra on mac
      • Cassandra๋ž€?
      • NiFi๋ž€
  • Algorithm
    • String
    • Recursion
    • Dynamic Programming
    • Array, Struct, Pointer
    • Math
    • Sort
    • List
    • Stack
    • Queue
    • Graph
    • Tree
    • Maze
    • AVL
    • ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ(Binary Search Tree)
    • DFS์™€ BFS
    • ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Dijkstra's Algorithm)
    • Red-Black ํŠธ๋ฆฌ
    • A* ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • Heap
    • Huffman Coding
    • Priority Queue
    • Bellman-Ford ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • C++
      • Class
      • STL
        • STL pair
        • STL Container - Associate Container
        • STL Container - Sequence Container
        • STL Container - Container Adapter
  • JavaScript
    • JABASCRIPT BASIC
    • Shallow Copy vs Deep Copy
    • OBJECT MODEL
    • NODE
    • ๋™๊ธฐ ์ฒ˜๋ฆฌ vs ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ
    • AJAX
    • CALLBACK
    • PROMISE
    • DEFERRER
    • UNDERSCORE
    • WEBPACK
    • SCOPE
    • EXECUTION CONTEXT
    • Image Object
    • BFCache๋ž€?
    • history.scrollRestoration
    • Intersection Observer
    • JWT - JSON Web Token
    • HTML vs JSON
  • Vue.js
    • ํ™˜๊ฒฝ์„ค์ •
    • Vue.js๋ž€?
    • Vue Instance
    • Vue Component
    • Vue Router
    • HTTP ํ†ต์‹ 
    • Template
    • Single File Component
    • Vue Animation
    • Vuex
    • Djnago์™€ ์—ฐ๋™ํ•˜๊ธฐ
  • Backbone.js
    • Model
    • Collection
    • Sync
    • view
  • Node.js
    • Doit! - ๋…ธ๋“œ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ‘œ์ ์ธ ์„œ๋ฒ„์™€ ์šฉ๋„
    • Doit! - ๋…ธ๋“œ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ  ๊ฐœ๋ฐœ ๋„๊ตฌ ์„ค์น˜ํ•˜๊ธฐ
    • Doit! - ๋…ธ๋“œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ดํŽด๋ณด๊ธฐ
    • Doit! - ๋…ธ๋“œ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ์นœํ•ด์ง€๊ธฐ
    • Doit! - ๋…ธ๋“œ์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ ์•Œ์•„๋ณด๊ธฐ
    • Doit! - ์›น ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ
    • Doit! - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉํ•˜๊ธฐ
    • Doit! - ์ต์Šคํ”„๋ ˆ์Šค ํ”„๋กœ์ ํŠธ๋ฅผ ๋ชจ๋“ˆํ™”ํ•˜๊ธฐ
    • Doit! - ๋ทฐ ํ…œํ”Œ๋ฆฟ ์ ์šฉํ•˜๊ธฐ
    • Doit! - ํŒจ์ŠคํฌํŠธ๋กœ ์‚ฌ์šฉ์ž ์ธ์ฆํ•˜๊ธฐ
    • Doit! - ์ฑ„ํŒ…์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ
    • Doit! - JSON-RPC ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ
  • Python
    • Warning-Could not import the lzma module
    • Pandas
      • Pandas ์ž๋ฃŒ๊ตฌ์กฐ
      • Pandas ๋ฐ์ดํ„ฐ ์ž…์ถœ๋ ฅ
      • DataFrame Data ์‚ดํŽด๋ณด๊ธฐ
      • ์‹œ๊ฐํ™” ๋„๊ตฌ - Matplotlib
  • ML
    • ์ถ”์ฒœ ์‹œ์Šคํ…œ
      • Collaborative Filtering
      • Matrix Factorization
  • Django
    • Basic
      • ํ™˜๊ฒฝ์„ค์ •
      • About Django
      • Start Django Project
      • Secret Key ๊ด€๋ฆฌํ•˜๊ธฐ
      • Settings ๋ถ„๋ฆฌํ•˜๊ธฐ
      • Django App
      • Django View & URL (1)
      • Django Model
        • MySQL ์—ฐ๋™
      • Django Admin
      • Django View & URL (2)
      • Django Template
      • Django Template & View & URL
      • Django Static
      • Django form
    • Advanced
      • Django Generic View
      • Django Automated Testing
      • Django Extenstion Template
      • Django Model Package
      • Django OpenSSL setting
    • REST framework
      • Rest API
      • Serializers
      • ViewSet
    • Error
      • ํ™˜๊ฒฝ์„ค์ • zlib ์˜ค๋ฅ˜๋ฐœ์ƒ
      • ModuleNotFoundError
    • ํŒจํ‚ค์ง€
      • django-debug-toolbar
    • Vue.js ์—ฐ๋™ํ•˜๊ธฐ
  • Ruby
    • variable & input/output
    • ์กฐ๊ฑด๋ฌธ
    • ๋ฐ˜๋ณต๋ฌธ
    • Array & Hash
    • Method
    • Proc&Lamda
    • Class
  • Ruby on Rails
    • Scaffolding
    • Controller
    • Model
    • Model-M:N relation
    • Model Validation
    • ๋ฉ‹์‚ฌ 10์ฃผ์ฐจ ์ˆ˜์—…(Tip)
  • HTML/CSS
    • Udacity - Intro to HTML/CSS
    • Udacity - Responsive Web Design
    • Udacity - Responsive Images
    • HTML Basic
    • CSS Basic
    • HTML5 Sementic Tag
    • HTML ํ…์ŠคํŠธ ๊ด€๋ จ ํƒœ๊ทธ๋“ค
    • HTML5 ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด
    • HTML ํผ ๊ด€๋ จ ํƒœ๊ทธ๋“ค
    • ํ…์ŠคํŠธ ๊ด€๋ จ ์Šคํƒ€์ผ
    • ์ƒ‰์ƒ๊ณผ ๋ฐฐ๊ฒฝ์„ ์œ„ํ•œ ์Šคํƒ€์ผ
    • ๋ ˆ์ด์•„์›ƒ์„ ์œ„ํ•œ ์Šคํƒ€์ผ
    • CSS ํฌ์ง€์…”๋‹
    • ๋‹ค์žฌ๋‹ค๋Šฅํ•œ CSS3 ์„ ํƒ์ž
    • CSS์™€ ์• ๋‹ˆ๋ฉ”์ด์…˜
    • ๋ฐ˜์‘ํ˜• ์›น์ด๋ž€?
  • OS(์šด์˜์ฒด์ œ)
    • Linux
      • Daemon
      • Cron
      • ํ”„๋กœ์„ธ์Šค ๊ด€๋ จ ๋ช…๋ น์–ด
      • ํ…์ŠคํŠธ ํŒŒ์ผ ๋ช…๋ น์–ด
  • Network
    • ๋„คํŠธ์›Œํฌ ๊ธฐ๋ณธ ๊ฐœ๋…
    • ๋„คํŠธ์›Œํฌ ๊ธฐ๋ณธ ๊ทœ์น™
    • ๋ฌผ๋ฆฌ ๊ณ„์ธต
    • ๋ฐ์ดํ„ฐ ๋งํฌ ๊ณ„์ธต
    • ๋„คํŠธ์›Œํฌ ๊ณ„์ธต
    • ์ „์†ก ๊ณ„์ธต
    • ์‘์šฉ ๊ณ„์ธต
    • ๋„คํŠธ์›Œํฌ ์ „์ฒด ํ๋ฆ„
    • ๋ฌด์„  ๋žœ
  • IT ๊ธฐํƒ€์ง€์‹
    • NAS๋ž€
Powered by GitBook
On this page
  • java.lang ํŒจํ‚ค์ง€
  • Object ํด๋ž˜์Šค
  • System ํด๋ž˜์Šค
  • Class ํด๋ž˜์Šค
  • Wrapper(ํฌ์žฅ) ํด๋ž˜์Šค
  • java.util ํŒจํ‚ค์ง€
  • Objects ํด๋ž˜์Šค
  • StringTokenizer ํด๋ž˜์Šค
  • Arrays ํด๋ž˜์Šค

Was this helpful?

  1. Java
  2. Basic

API - Object, System, Class, Math, Wrapper

Previous์˜ˆ์™ธ ์ฒ˜๋ฆฌNextAPI - String, StringBuffer, StringBuilder

Last updated 5 years ago

Was this helpful?

์ž๋ฐ”์—์„œ ์ œ๊ณตํ•˜๋Š” API(Application Programming Interface)์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.

API๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(library)๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•˜๋Š”๋ฐ, ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ์— ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค ๋ฐ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ์Œ์„ ๋งํ•œ๋‹ค. ์ด API๋Š” <JDK์„ค์น˜๊ฒฝ๋กœ>/jre/lib/rt.jar ์— ์ €์žฅ๋˜์–ด์žˆ๋‹ค.

๋Š” ์‰ฝ๊ฒŒ API๋ฅผ ์ฐพ์•„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฌธ์„œํ™”ํ•œ ๊ฒƒ์„ ๋งํ•œ๋‹ค.

java.lang ํŒจํ‚ค์ง€

์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ ๊ณตํ†ต์ ์œผ๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ํŒจํ‚ค์ง€ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. java.lang์€ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์˜ ๊ธฐ๋ณธ์ ์ธ ํด๋ž˜์Šค๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ํŒจํ‚ค์ง€์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— import๋ฅผ ํ•˜์ง€ ์•Š๊ณ  java.lang ์†ํ•œ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. (ex) System๊ณผ String

ํด๋ž˜์Šค

์šฉ๋„

Object

์ž๋ฐ” ํด๋ž˜์Šค์˜ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ์‚ฌ์šฉ

System

- ํ‘œ์ค€ ์ž…๋ ฅ ์žฅ์น˜(ํ‚ค๋ณด๋“œ)๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉ - ํ‘œ์ค€ ์ถœ๋ ฅ ์žฅ์น˜(๋ชจ๋‹ˆํ„ฐ)๋กœ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ - ์ž๋ฐ” ๊ฐ€์ƒ ๊ธฐ๊ณ„๋ฅผ ์ข…๋ฃŒ์‹œํ‚ฌ ๋•Œ ์‚ฌ์šฉ - ์“ฐ๋ ˆ๊ธฐ ์ˆ˜์ง‘๊ธฐ๋ฅผ ์‹คํ–‰ ์š”์ฒญํ•  ๋•Œ ์‚ฌ์šฉ

Class

ํด๋ž˜์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๋กœ๋”ฉํ•  ๋•Œ ์‚ฌ์šฉ

Math

์ˆ˜ํ•™ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•  ๋•Œ ์‚ฌ์šฉ

Wrapper (Byte, Short, Character, Integer, Float, Double, Boolean, Long)

- ๊ธฐ๋ณธ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ - ๋ฌธ์ž์—ด์„ ๊ธฐ๋ณธ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ์‚ฌ์šฉ - ์ž…๋ ฅ๊ฐ’ ๊ฒ€์‚ฌ์— ์‚ฌ์šฉ

Object ํด๋ž˜์Šค

ํด๋ž˜์Šค ์„ ์–ธ์‹œ extendsํ‚ค์›Œ๋“œ๋กœ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜์ง€ ์•Š์œผ๋ฉด ์•”์‹œ์ ์œผ๋กœ java.lang.Object ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ์ž๋ฐ”์˜ ๋ชจ๋“  ํด๋ž˜์Šค๋Š” Object ํด๋ž˜์Šค์˜ ์ž์‹์ด๊ฑฐ๋‚˜ ์ž์† ํด๋ž˜์Šค์ด๋‹ค. Object๋Š” ์ž๋ฐ”์˜ ์ตœ์ƒ์œ„ ๋ถ€๋ชจ ํด๋ž˜์Šค์— ํ•ด๋‹น๋œ๋‹ค.

๊ฐ์ฒด ๋น„๊ต(equals())

public boolean equals(Object obj){...}

๋งค๊ฐœ ํƒ€์ž…์ด Object์ด๋ฏ€๋กœ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ๋Œ€์ž…๋  ์ˆ˜ ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.(์ž๋™ ํƒ€์ž… ๋ณ€ํ™˜) ๋‘ ๊ฐ์ฒด๊ฐ€ ๋™์ผํ•œ ๊ฐ์ฒด๋ผ๋ฉด true, ์•„๋‹ˆ๋ผ๋ฉด false๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ equals๋Š” ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋™๋“ฑํ•˜๋ฉด true๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋™๋“ฑํ•˜๋‹ค๋Š” ๊ฒƒ์€ ๊ฐ™์€ ๊ฐ์ฒด์ด๊ฑด ๋‹ค๋ฅธ ๊ฐ์ฒด์ด๊ฑด ์ƒ๊ด€์—†์ด ๊ฐ์ฒด๊ฐ€ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋™์ผํ•จ์„ ๋œปํ•œ๋‹ค. ์ด ๋ฉ”์†Œ๋“œ๋Š” ์ง์ ‘ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ณ  ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ํ•˜์—ฌ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋™๋“ฑ ๋น„๊ตํ•  ๋•Œ ์ด์šฉ๋œ๋‹ค.

equals() ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•  ๋•Œ๋Š” ๋งค๊ฐœ๊ฐ’(๋น„๊ต ๊ฐ์ฒด)์ด ๊ธฐ์ค€ ๊ฐ์ฒด์™€ ๋™์ผํ•œ ํƒ€์ž…์˜ ๊ฐ์ฒด์ธ์ง€ ๋จผ์ € ํ™•์ธํ•ด์•ผํ•œ๋‹ค.(instanceof) ๋น„๊ต ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ํƒ€์ž…์ด๋ผ๋ฉด false๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

public class Member{
    public String id;
    public Member(String id){
        this.id = id;
    }

    @Override
    public boolean equals(Object obj){
        if(obj instanceof Member){
            Member member = (Member)obj;
            if(id.equals(memeber.id)){
                return true;
            }
        }
        return false;
    }
}

๊ฐ์ฒด ํ•ด์‹œ์ฝ”๋“œ(hashCode())

๊ฐ์ฒด ํ•ด์‹œ์ฝ”๋“œ๋ž€ ๊ฐ์ฒด๋ฅผ ์‹๋ณ„ํ•  ํ•˜๋‚˜์˜ ์ •์ˆ˜๊ฐ’์„ ๋งํ•œ๋‹ค. ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ฒˆ์ง€๋ฅผ ์ด์šฉํ•ด์„œ ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด ๋ฆฌํ„ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋…ผ๋ฆฌ์  ๋™๋“ฑ ๋น„๊ต์‹œ hashCode()๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•  ํ•„์š”์„ฑ์ด ์žˆ๋‹ค.

  • hashCod() ๋ฆฌํ„ด๊ฐ’ ๋น„๊ต

    • ๊ฐ™์Œ : equals() ๋ฆฌํ„ด๊ฐ’ ๋น„๊ต

      • ๊ฐ™์Œ : ๋™๋“ฑ ๊ฐ์ฒด

      • ๋‹ค๋ฆ„ : ๋‹ค๋ฅธ ๊ฐ์ฒด

    • ๋‹ค๋ฆ„ : ๋‹ค๋ฅธ ๊ฐ์ฒด

๊ฐ์ฒด ๋ฌธ์ž ์ •๋ณด(toString())

๊ฐ์ฒด์˜ ๋ฌธ์ž ์ •๋ณด๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. ๊ฐ์ฒด์˜ ๋ฌธ์ž ์ •๋ณด๋ž€ ๊ฐ์ฒด๋ฅผ ๋ฌธ์ž์—ด๋กœ ํ‘œํ˜„ํ•œ ๊ฐ’์„ ๋งํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Object ํด๋ž˜์Šค์˜ toString()์€ "ํด๋ž˜์Šค๋ช…@16์ง„์ˆ˜ํ•ด์‹œ์ฝ”๋“œ"๋กœ ๊ตฌ์„ฑ๋œ ๋ฌธ์ž์ •๋ณด๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

Object obj = new Object();
System.out.println(obj.toString());

//java.lang.Object@de6ced

์ด ๋ฆฌํ„ด๊ฐ’์€ ๋ณ„ ๊ฐ’์–ด์น˜๊ฐ€ ์—†๋Š” ์ •๋ณด์ด๋ฏ€๋กœ Object ํ•˜์œ„ ํด๋ž˜์Šค๋Š” toString() ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜(์˜ค๋ฒ„๋ผ์ด๋”ฉ) ํ•˜์—ฌ ๊ฐ„๊ฒฐํ•˜๊ณ  ์œ ์ตํ•œ ์ •๋ณด๋ฅผ ๋ฆฌํ„ดํ•˜๋„๋ก ๋˜์–ด์žˆ๋‹ค.

  • java.util.Date : ํ˜„์žฌ ์‹œ์Šคํ…œ์˜ ๋‚ ์งœ์™€ ์‹œ๊ฐ„ ์ •๋ณด๋ฅผ ๋ฆฌํ„ด

  • String : ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ๋ฌธ์ž์—ด ๋ฆฌํ„ด

๊ฐ์ฒด ๋ณต์ œ(clone())

๊ฐ์ฒด ๋ณต์ œ๋Š” ์›๋ณธ ๊ฐ์ฒด์˜ ํ•„๋“œ๊ฐ’๊ณผ ๋™์ผํ•œ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ๊ฐ์ฒด๋ฅผ ๋ณต์ œํ•˜๋Š” ์ด์œ ๋Š” ์›๋ณธ ๊ฐ์ฒด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค. ์‹ ๋ขฐํ•˜์ง€ ์•Š๋Š” ์˜์—ญ์œผ๋กœ ์›๋ณธ ๊ฐ์ฒด๋ฅผ ๋„˜๊ฒจ ์ž‘์—…ํ•  ๊ฒฝ์šฐ ์›๋ณธ ๊ฐ์ฒด์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํ›ผ์†๋  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ณต์ œ๋œ ๊ฐ์ฒด์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํ›ผ์†๋˜๋”๋ผ๋„ ์›๋ณธ ๊ฐ์ฒด๋Š” ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

  • ์–•์€ ๋ณต์ œ(this clone) : ๋‹จ์ˆœํžˆ ํ•„๋“œ๊ฐ’์„ ๋ณต์‚ฌํ•ด์„œ ๊ฐ์ฒด๋ฅผ ๋ณต์ œํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

    • ๊ธฐ๋ณธ ํƒ€์ž… : ๊ฐ’ ๋ณต์‚ฌ

    • ์ฐธ์กฐ ํƒ€์ž… : ๊ฐ์ฒด์˜ ๋ฒˆ์ง€ ๋ณต์‚ฌ

    Object์˜ clone()๋ฉ”์†Œ๋“œ๋Š” ์ž์‹ ๊ณผ ๋™์ผํ•œ ํ•„๋“œ๊ฐ’์„ ๊ฐ€์ง„ ์–•์€ ๋ณต์ œ๋œ ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. ์ด ๋ฉ”์†Œ๋“œ๋กœ ๋ณต์ œ๋ฅผ ํ•˜๋ ค๋ฉด ์›๋ณธ ๊ฐ์ฒด๋Š” ๋ฐ˜๋“œ์‹œ java.lang.Cloneable์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผํ•œ๋‹ค. ๋ฉ”์†Œ๋“œ ์„ ์–ธ์ด ์—†์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  Cloneable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ์ด์œ ๋Š” ํด๋ž˜์Šค ์„ค๊ณ„์ž๊ฐ€ ๋ณต์ œ๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค๋Š” ์˜๋„์ ์ธ ํ‘œ์‹œ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.

    Cloneable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์œผ๋ฉด CloneNotSupportedException ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋ณต์ œ๊ฐ€ ์‹คํŒจ๋œ๋‹ค. clone()์€ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๋ฉ”์†Œ๋“œ ์ด๋ฏ€๋กœ try-catch๊ตฌ๋ฌธ์ด ํ•„์š”ํ•˜๋‹ค.

    try{
        Object obj = clone();
    }catch(CloneNotSupportedException e){}
    public class Member implements Cloneable{
        public String id;
        public String name;
        public String passwd;
        public int age;
        public boolean adult;
    
        public Member(String id, String name, String passwd, int age, boolean adult){
            this.id = id;
            this.name = name;
            this.passwd = passwd;
            this.age = age;
            this.adult = adult;
        }
    
        public Member getMember(){
            Member cloned = null;
            try{
                cloned = (Member)clone();
                //clone()๋ฉ”์†Œ๋“œ์˜ ๋ฆฌํ„ดํƒ€์ž…์€ Object์ด๋ฏ€๋กœ Memberํƒ€์ž…์œผ๋กœ casting
            }catch(CloneNotSupportedException e){}
            return cloned;
        }
    }

    โ€‹

  • ๊นŠ์€ ๋ณต์ œ(deep clone) : ์–•์€ ๋ณต์ œ์˜ ์ฐธ์กฐ ํƒ€์ž… ํ•„๋“œ๋Š” ๋ฒˆ์ง€๋งŒ ๋ณต์ œ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์›๋ณธ ๊ฐ์ฒด์˜ ํ•„๋“œ์™€ ๋ณต์ œ ๊ฐ์ฒด์˜ ํ•„๋“œ๋Š” ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ฒŒ ๋œ๋‹ค. ๋งŒ์•ฝ ๋ณต์ œ ๊ฐ์ฒด์—์„œ ์ฐธ์กฐ ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์›๋ณธ ๊ฐ์ฒด๋„ ๋ณ€๊ฒฝ๋œ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. ๊นŠ์€ ๋ณต์ œ๋ž€ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋„ ๋ณต์ œํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

    ๊นŠ์€ ๋ณต์ œ๋ฅผ ํ•˜๋ ค๋ฉด Object clone()๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•ด์„œ ์ฐธ์กฐ ๊ฐ์ฒด๋ฅผ ๋ณต์ œํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•ด์•ผํ•œ๋‹ค.

    public class Member implements Cloneable{
        public String name;
        public int age;
        // ์•„๋ž˜ ๋‘๊ฐœ ์ฐธ์กฐ ํƒ€์ž… ํ•„๋“œ
        public int[] scores;
        public Car car;
    
        public Member(String name, int age,int[] scores, Car car){
            this.name = name;
            this.age = age;
            this.scores = scores;
            this.car = car;
        }
    
        @Override
        protected Object clone() throws CloneNotSupportedException{
            Member cloned = (Member)super.clone();
            cloned.scores = Arrays.copyOf(this.scores, this.scores.length);
            cloned.car = new Car(this.car.model);
            return cloned;
        }
    
        public Member getMember(){
            Member cloned = null;
            try{
                cloned = (Member)clone();
                //clone()๋ฉ”์†Œ๋“œ์˜ ๋ฆฌํ„ดํƒ€์ž…์€ Object์ด๋ฏ€๋กœ Memberํƒ€์ž…์œผ๋กœ casting
            }catch(CloneNotSupportedException e){
                e.printStackTrace();
            }
            return cloned;
        }
    }

๊ฐ์ฒด ์†Œ๋ฉธ์ž(finalize())

์ฐธ์กฐํ•˜์ง€ ์•Š๋Š” ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด๋Š” Garbage Collector๊ฐ€ ํž™ ์˜์—ญ์—์„œ ์ž๋™์œผ๋กœ ์†Œ๋ฉธ์‹œํ‚จ๋‹ค. Garbage Collector๋Š” ๊ฐ์ฒด๋ฅผ ์†Œ๋ฉธํ•˜๊ธฐ ์ง์ „์— ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฐ์ฒด์˜ ์†Œ๋ฉธ์ž(finalize())๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค. finalize()๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹คํ–‰ ๋‚ด์šฉ์ด ์—†๋‹ค. ๋งŒ์•ฝ ๊ฐ์ฒด๊ฐ€ ์†Œ๋ฉธ๋˜๊ธฐ ์ „์— ๋งˆ์ง€๋ง‰์œผ๋กœ ์‚ฌ์šฉํ–ˆ๋˜ ์ž์›(๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ, ํŒŒ์ผ ๋“ฑ)์„ ๋‹ซ๊ณ  ์‹ถ๊ฑฐ๋‚˜, ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์žฌ์ •์˜๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

public class Counter{
    private int no;
    public Counter(int no){
        this.no = no;
    }

    @Override
    protected void finalize() throws Throwable{
        System.out.println(no + "๋ฒˆ ๊ฐ์ฒด์˜ finalize()๊ฐ€ ์‹คํ–‰๋จ")
    }
}
public class FinalizeEx{
    public static void main(String[] args){
        Counter counter = null;
        for(int i=1;i<=50;i++){
            counter = new Counter(i);

            counter = null; //์“ฐ๋ ˆ๊ธฐ๋กœ ๋งŒ๋“ฌ
            System.gc();    //Garbage Collector ์‹คํ–‰ ์š”์ฒญ
        }
    }
}

์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ๋ฌด์ž‘์œ„๋กœ ์†Œ๋ฉธ์‹œํ‚ค๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ „๋ถ€ ์†Œ๋ฉธ์‹œํ‚ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ๋ฅผ ๋ณด๊ณ  ์ผ๋ถ€๋งŒ ์†Œ๋ฉธ์‹œํ‚จ๋‹ค.( ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•  ๋•Œ, CPU๊ฐ€ ํ•œ๊ฐ€ํ•  ๋•Œ JVM์— ์˜ํ•ด์„œ ์ž๋™ ์‹คํ–‰)

finalize()๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์‹œ์ ์€ ๋ช…ํ™•ํ•˜์ง€ ์•Š๋‹ค. ๋งŒ์•ฝ ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ์‹œ ์ฆ‰์‹œ ์ž์›์„ ํ•ด์ œํ•˜๊ฑฐ๋‚˜ ์ฆ‰์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ตœ์ข… ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ์ผ๋ฐ˜ ๋ฉ”์†Œ๋“œ์—์„œ ์ž‘์„ฑํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋  ๋•Œ ๋ช…์‹œ์ ์œผ๋กœ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

System ํด๋ž˜์Šค

์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์€ ์šด์˜์ฒด์ œ์ƒ์—์„œ ๋ฐ”๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ JVM์œ„์—์„œ ์‹คํ–‰๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์šด์˜์ฒด์ œ์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์ง์ ‘ ์ ‘๊ทผํ•˜๊ธฐ ์–ด๋ ต๋‹ค. ํ•˜์ง€๋งŒ java.lang.System ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜๋ฉด ์šด์˜์ฒด์ œ์˜ ์ผ๋ถ€ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ, ํ‚ค๋ณด๋“œ๋กœ ์ž…๋ ฅ, ๋ชจ๋‹ˆํ„ฐ๋กœ ์ถœ๋ ฅ, ๋ฉ”๋ชจ๋ฆฌ ์ •๋ฆฌ, ํ˜„์žฌ์‹œ๊ฐ„ ์ฝ๊ธฐ, ์‹œ์Šคํ…œ ํ”„๋กœํผํ‹ฐ ์ฝ๊ธฐ, ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ฝ๊ธฐ ๋“ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. System ํด๋ž˜์Šค์˜ ๋ชจ๋“  ํ•„๋“œ์™€ ๋ฉ”์†Œ๋“œ๋Š” ์ •์ (static)์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ(exit())

๊ฒฝ์šฐ์— ๋”ฐ๋ผ์„œ ๊ฐ•์ œ์ ์œผ๋กœ JVM์„ ์ข…๋ฃŒ์‹œํ‚ฌ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์ฆ‰, ํ˜„์žฌ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ•์ œ ์ข…๋ฃŒ์‹œํ‚ค๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

exit()๋ฉ”์†Œ๋“œ๋Š” int ๋งค๊ฐœ๊ฐ’์„ ์ง€์ •ํ•˜๋„๋ก ๋˜์–ด์žˆ๋Š”๋ฐ, ์ด ๊ฐ’์„ ์ข…๋ฃŒ ์ƒํƒœ๊ฐ’์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ •์ƒ ์ข…๋ฃŒ์ผ ๊ฒฝ์šฐ 0, ๋น„์ •์ƒ ์ข…๋ฃŒ์ผ ๊ฒฝ์šฐ 0์ด์™ธ์˜ ์ˆ˜๋ฅผ ์ค€๋‹ค.

System.exit(0);

์–ด๋–ค ๊ฐ’์„ ์ฃผ๋”๋ผ๋„ ์ข…๋ฃŒ๊ฐ€ ๋˜๋Š”๋ฐ, ๋งŒ์•ฝ ํŠน์ • ๊ฐ’์ด ์ž…๋ ฅ๋˜์—ˆ์„ ๊ฒฝ์šฐ์—๋งŒ ์ข…๋ฃŒํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ž๋ฐ”์˜ ๋ณด์•ˆ ๊ด€๋ฆฌ์ž๋ฅผ ์ง์ ‘ ์„ค์ •ํ•ด์„œ ์ข…๋ฃŒ ์ƒํƒœ๊ฐ’์„ ํ™•์ธํ•˜๋ฉด๋œ๋‹ค.

System.exit()๊ฐ€ ์‹คํ–‰๋˜๋ฉด ๋ณด์•ˆ ๊ด€๋ฆฌ์ž์˜ checkExit() ๋ฉ”์†Œ๋“œ๊ฐ€ ์ž๋™ ํ˜ธ์ถœ๋˜๋Š”๋ฐ, ์ด ๋ฉ”์†Œ๋“œ์—์„œ ์ข…๋ฃŒ ์ƒํƒœ๊ฐ’์„ ์กฐ์‚ฌํ•ด์„œ ํŠน์ • ๊ฐ’์ด ์ž…๋ ฅ๋˜์ง€ ์•Š์œผ๋ฉด SecurityException์„ ๋ฐœ์ƒ์‹œ์ผœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. checkExit()๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉด JVM์€ ์ข…๋ฃŒ๋œ๋‹ค.

//์˜ˆ์ œ
System.setSecurityManager(new SecurityManager(){
    @Override
    public void checkExit(int status){
        if(status != 5){
            throw new SecurityException();
        }
    }
});

์“ฐ๋ ˆ๊ธฐ ์ˆ˜์ง‘๊ธฐ ์‹คํ–‰(gc())

์ž๋ฐ”๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง์ ‘ ์ฝ”๋“œ๋กœ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ณ  JVM์ด ์•Œ์•„์„œ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. JVM์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•  ๋•Œ์™€ CPU๊ฐ€ ํ•œ๊ฐ€ํ•  ๋•Œ์— Garbage Collector๋ฅผ ์‹คํ–‰์‹œ์ผœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ์ž๋™ ์ œ๊ฑฐํ•œ๋‹ค.

GC๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ฝ”๋“œ๋กœ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์—†๊ณ , JVM์—๊ฒŒ ๊ฐ€๋Šฅํ•œํ•œ ๋นจ๋ฆฌ ์‹คํ–‰ํ•ด๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒƒ์ด System.gc()๋ฉ”์†Œ๋“œ์ด๋‹ค.

์ฆ‰, System.gc() ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด GC๊ฐ€ ๋ฐ”๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ณ , JVM์€ ๋น ๋ฅธ ์‹œ๊ฐ„ ๋‚ด์— ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•œ๋‹ค.

System.gc();

์“ฐ๋ ˆ๊ธฐ๊ฐ€ ์ƒ๊ธธ ๋•Œ๋งˆ๋‹ค GC๊ฐ€ ๋™์ž‘ํ•œ๋‹ค๋ฉด ์ •์ž‘ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•  ํ”„๋กœ๊ทธ๋žจ์˜ ์†๋„๊ฐ€ ๋–จ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ ์ข‹์ง€์•Š๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ถฉ๋ถ„ํ•˜๋‹ค๋ฉด ๊ตณ์ด GC๋ฅผ ์‹คํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

//์˜ˆ์ œ
public class GcEx{
    public static void main(String[] args){
        Employee emp;

        emp = new Employee(1);
        emp = null; //์“ฐ๋ ˆ๊ธฐ๊ฐ€๋จ
        emp = new Employee(2);
        emp = new Employee(3); // Employee(2)์“ฐ๋ ˆ๊ธฐ

        System.out.println("emp๊ฐ€ ์ตœ์ข…์ ์œผ๋กœ ์ฐธ์กฐํ•˜๋Š” ์‚ฌ์›๋ฒˆํ˜ธ : ");
        System.out.println(emp.eno);
        System.gc();
    }
}
class Employee{
    public int eno;
    public Employee(int eno){
        this.eno = eno;
        system.out.prinlnt("Employee"+eno+" ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑ๋จ");
    }
    // ์†Œ๋ฉธ์ž
    public void finalize(){
        System.out.println("Employee"+eno+์ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐ๋จ);
    }
}

ํ˜„์žฌ ์‹œ๊ฐ ์ฝ๊ธฐ(currentTimeMillis(), nanoTime())

์ปดํ“จํ„ฐ์˜ ์‹œ๊ณ„๋กœ๋ถ€ํ„ฐ ํ˜„์žฌ ์‹œ๊ฐ„์„ ์ฝ์–ด์„œ ๋ฐ€๋ฆฌ์„ธ์ปจ๋“œ(1/1000์ดˆ)๋‹จ์œ„์™€ ๋‚˜๋…ธ์„ธ์ปจ๋“œ(1/10^9์ดˆ)๋‹จ์œ„์˜ long๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค.

long time = System.currentTimeMillis();
long time = System.nanoTime();

๋ฆฌํ„ด ๊ฐ’์€ ์ฃผ๋กœ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์†Œ์š” ์‹œ๊ฐ„ ์ธก์ •์— ์‚ฌ์šฉ๋œ๋‹ค. ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘ ์‹œ ์‹œ๊ฐ„์„ ์ฝ๊ณ , ํ”„๋กœ๊ทธ๋žจ์ด ๋๋‚  ๋•Œ ์‹œ๊ฐ์„ ์ฝ์–ด์„œ ์ฐจ์ด๋ฅผ ๊ตฌํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์†Œ์š” ์‹œ๊ฐ„์ด ๋‚˜์˜จ๋‹ค.

์‹œ์Šคํ…œ ํ”„๋กœํผํ‹ฐ ์ฝ๊ธฐ(getProperty())

์‹œ์Šคํ…œ ํ”„๋กœํผํ‹ฐ๋Š” JVM์ด ์‹œ์ž‘๋  ๋•Œ ์ž๋™ ์„ค์ •๋˜๋Š” ์‹œ์Šคํ…œ์˜ ์†์„ฑ๊ฐ’์„ ๋งํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์šด์˜์ฒด์ œ์˜ ์ข…๋ฅ˜, ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚จ ์‚ฌ์šฉ์ž ์•„์ด๋””, JVM ๋ฒ„์ „ ๋“ฑ๋“ฑ์ด ์—ฌ๊ธฐ์— ์†ํ•œ๋‹ค. ์‹œ์Šคํ…œ ํ”„๋กœํผํ‹ฐ๋Š” ํ‚ค(key)์™€ ๊ฐ’(value)๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค.

key

์„ค๋ช…

value

java.version

์ž๋ฐ” ๋ฒ„์ „

1.8.0_20

java.home

์‚ฌ์šฉํ•˜๋Š” JRE ํŒŒ์ผ ๊ฒฝ๋กœ

<jdk ์„ค์น˜๊ฒฝ๋กœ>/jre

os.name

์šด์˜์ฒด์ œ ์ด๋ฆ„

Mac OS X

file.separator

File separaotr("/" on UNIX)

null

user.name

์‚ฌ์šฉ์ž ์ด๋ฆ„

์‚ฌ์šฉ์ž ๊ณ„์ •

user.home

์‚ฌ์šฉ์ž ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ

/Users/์‚ฌ์šฉ์ž๊ณ„์ •

user.dir

์‚ฌ์šฉ์ž๊ฐ€ ํ˜„์žฌ ์ž‘์—…์ค‘์ธ ๊ฒฝ๋กœ

์ž‘์—…์ค‘์ธ ๊ฒฝ๋กœ

์‹œ์Šคํ…œ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฝ์–ด์˜ค๊ธฐ ์œ„ํ•ด์„œ System.getProperty()๋ฅผ ์ด์šฉํ•˜๋ฉด๋œ๋‹ค. ์ด ๋ฉ”์†Œ๋“œ๋Š” ํ‚ค์ด๋ฆ„์„ ๋งค๊ฐœ๊ฐ’์œผ๋กœ ๋ฐ›๊ณ , ํ•ด๋‹น ํ‚ค์— ๋Œ€ํ•œ ๊ฐ’์„ ๋ฌธ์ž์—ด๋กœ ๋ฆฌํ„ดํ•œ๋‹ค.

String value = System.getProperty(String key);

System.getProperties()๋Š” ๋ชจ๋“  (ํ‚ค, ๊ฐ’)์Œ์„ ์ €์žฅํ•˜๊ณ  Properties ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. ์ด ๊ฐ์ฒด์˜ keySet() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํ‚ค๋งŒ์œผ๋กœ ๊ตฌ์„ฑ๋œ set๊ฐ์ฒด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

Properties props = System.getProperties();
Set keys = props.keySet();

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ฝ๊ธฐ(getenv())

๋Œ€๋ถ€๋ถ„ ์šด์˜์ฒด์ œ๋Š” ์‹คํ–‰๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ๋“ค์—๊ฒŒ ์œ ์šฉํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•  ๋ชฉ์ ์œผ๋กœ ํ™˜๊ฒฝ ๋ณ€์ˆ˜(Environment Variable)๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ƒ์˜ ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ์šด์˜์ฒด์ œ์—์„œ ์ด๋ฆ„๊ณผ ๊ฐ’์œผ๋กœ ๊ด€๋ฆฌ๋˜๋Š” ๋ฌธ์ž์—ด ์ •๋ณด๋‹ค. ํ™˜๊ฒฝ๋ณ€์ˆ˜๋Š” ์šด์˜์ฒด์ œ๊ฐ€ ์„ค์น˜๋  ๋•Œ ๊ธฐ๋ณธ์ ์ธ ๋‚ด์šฉ์ด ์„ค์ •๋˜๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์„ค์น˜๋  ๋•Œ ์ž๋™์ ์œผ๋กœ ์ถ”๊ฐ€ ์„ค์ • ๋˜๊ธฐ๋„ ํ•œ๋‹ค.

String value = System.getenv(String name);
//์˜ˆ์ œ
public class SystemEnvEx{
    public static void main(String[] args){
        String javaHome = System.getenv("JAVA_HOME");
        System.out.println(javaHome);
    }
}

Class ํด๋ž˜์Šค

ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ(ํด๋ž˜์Šค ์ด๋ฆ„, ์ƒ์„ฑ์ž ์ •๋ณด, ํ•„๋“œ ์ •๋ณด, ๋ฉ”์†Œ๋“œ ์ •๋ณด)๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค์ด๋‹ค.

Class ๊ฐ์ฒด ์–ป๊ธฐ(getClass(), forName())

Object๋Š” ๋ชจ๋“  ํด๋ž˜์Šค์˜ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค์ด๋ฏ€๋กœ ๋ชจ๋“  ํด๋ž˜์Šค์—์„œ getClass() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

Class c = obj.getClass();

getClass() ๋ฉ”์†Œ๋“œ๋Š” ํ•ด๋‹น ํด๋ž˜์Šค๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ–ˆ์„ ๋•Œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์ „์— ์ง์ ‘ Class ๊ฐ์ฒด๋ฅผ ์–ป์„ ์ˆ˜๋„ ์žˆ๋‹ค. Class๋Š” ์ƒ์„ฑ์ž๋ฅผ ๊ฐ์ถ”๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— new์—ฐ์‚ฐ์ž๋กœ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†์œผ๋ฉฐ, ์ •์ (static) ๋ฉ”์†Œ๋“œ์ธ forName()์„ ์ด์šฉํ•ด์•ผํ•œ๋‹ค.

try{
    Class c = Class.forName(String className);
}catch(ClassNotFoundException e){
}

forName() ๋ฉ”์†Œ๋“œ๋Š” ํด๋ž˜์Šค ์ „์ฒด ์ด๋ฆ„(ํŒจํ‚ค์ง€๊ฐ€ ํฌํ•จ๋œ ์ด๋ฆ„)์„ ๋งค๊ฐœ๊ฐ’์œผ๋กœ ๋ฐ›๊ณ  Class ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

//์˜ˆ์ œ
public class ClassEx{
    public static void main(String[] args){
        Car car = new Car();
        Class c = car.getClass();
        System.out.println(c.getName());
        System.out.println(c.getSimpleName());
        System.out.println(c.getPackage().getName();
        try{
            Class c2 = Class.forName("sec06.exam_class.Car");
            System.out.println(c2.getName());
            System.out.println(c2.getSimpleName());
            System.out.println(c.getPackage().getName());
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }
    }
}

Reflection(getDeclaredConstructors(), getDeclaredFields(), getDeclaredMethods())

Reflection์€ Class ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž, ํ•„๋“œ, ๋ฉ”์†Œ๋“œ ์ •๋ณด๋ฅผ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

Constructor[] constructors = c.getDeclaredConstructors();
Field fields = c.getDeclaredFields();
Method[] methods = c.getDeclaredMethods();

๊ฐ๊ฐ Constructor ๋ฐฐ์—ด, Field ๋ฐฐ์—ด, Method ๋ฐฐ์—ด์„ ๋ฆฌํ„ดํ•œ๋‹ค. Constructor, Field, Method ํด๋ž˜์Šค๋Š” ๋ชจ๋‘ java.lang.reflect ํŒจํ‚ค์ง€์— ์†Œ์†๋˜์–ด ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ getDeclaredFields()์™€ getDeclaredMethods()๋Š” ํด๋ž˜์Šค์— ์„ ์–ธ๋œ ๋ฉค๋ฒ„๋งŒ ๊ฐ€์ ธ์˜ค๊ณ  ์ƒ์†๋œ ๋ฉค๋ฒ„๋Š” ๊ฐ€์ ธ์˜ค์ง€ ์•Š๋Š”๋‹ค. ์ƒ์†๋œ ๋ฉค๋ฒ„๋„ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด getFields(), getMethods()๋ฅผ ์ด์šฉํ•ด์•ผํ•œ๋‹ค. ๋‹จ, public ๋ฉค๋ฒ„๋งŒ ๊ฐ€์ ธ์˜จ๋‹ค.

//์˜ˆ์ œ
public class ReflectEx{
    public static void main(String[] args){
        Class c = Class.forName("sec06.exam_reflect.Car");

        System.out.println("ํด๋ž˜์Šค์ด๋ฆ„"+c.getName());
        System.out.println("์ƒ์„ฑ์ž ์ •๋ณด");
        Constructor constructors = c.getDeclaredConstructors();
        for(Constructor constructor : constructors){
            System.out.println(constructor.getName()+"(");
            Class[] params = constructors.getParameterTypes();
            printParameters(params);
            System.out.println(")");
        }
        System.out.println("ํ•„๋“œ ์ •๋ณด");
        Field[] fields = c.getDeclaredFields();
        for(Field f: fields){
            System.out.println(f.getType().getSimpleNmae()+" "+ f.getName());
        }
        System.out.println("๋ฉ”์†Œ๋“œ ์ •๋ณด");
        Method[] methods = c.getDeclaredMethods();
        for(Method m : methods){
            System.out.println(m.getName()+"(");
            Class[] params = m.getParameterTypes();
            printParameters(params);
            System.out.println(")");
        }
        private static void printParameters(Class[] params){
            for(int i=0;i<params.length;i++){
                System.out.print(params[i].getName());
                if(i<params.length-1){
                    System.out.print(", ");
                }
            }
        }
    }
}

์‹คํ–‰ ๊ฒฐ๊ณผ๋Š” Car ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ „์ฒด ๋ฉค๋ฒ„๋“ค์ด ๋ชจ๋‘ ์ถœ๋ ฅ๋œ๋‹ค.

๋™์  ๊ฐ์ฒด ์ƒ์„ฑ(newInstance())

Class ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜๋ฉด new ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋™์ ์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ๋Ÿฐํƒ€์ž„ ์‹œ์— ํด๋ž˜์Šค ์ด๋ฆ„์ด ๊ฒฐ์ •๋˜๋Š” ๊ฒฝ์šฐ์— ๋งค์šฐ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค.

try{
    Class c = Class.forName("๋Ÿฐํƒ€์ž„ ์‹œ ๊ฒฐ์ •๋˜๋Š” ํด๋ž˜์Šค ์ด๋ฆ„");
    Object obj = c.newInstance();
}catch(ClassNotFoundException e){
}catch(InstantiationException e){
}catch(IllegalAccessException e){
}

newInstance() ๋ฉ”์†Œ๋“œ๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ํด๋ž˜์Šค์— ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ์กด์žฌํ•ด์•ผํ•œ๋‹ค. ๋งŒ์•ฝ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์‹ถ์œผ๋ฉด Constructor ๊ฐ์ฒด๋ฅผ์–ป์–ด newInstance()๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด๋œ๋‹ค.

InstantiationException์€ ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์ถ”์ƒ ํด๋ž˜์Šค์ด๊ฑฐ๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค์ผ ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•˜๊ณ , IllegalAccessException์€ ํด๋ž˜์Šค๋‚˜ ์ƒ์„ฑ์ž๊ฐ€ ์ ‘๊ทผ ์ œํ•œ์ž๋กœ ์ธํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•œ๋‹ค.

newInstance() ๋ฉ”์†Œ๋“œ์˜ ๋ฆฌํ„ด ํƒ€์ž…์€ Object์ด๋ฏ€๋กœ ์›๋ž˜ ํด๋ž˜์Šค ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ๋งŒ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํด๋ž˜์Šค ํƒ€์ž…์„ ๋ชจ๋ฅด๋Š” ์ƒํƒœ์ด๋ฏ€๋กœ ๊ฐ•์ œ ํƒ€์ž… ๋ณ€ํ™˜์„ ํ•  ์ˆ˜ ์—†๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

public interface Action {
    public void execute();
}
public class ReceiveAction implements Action {
    @Override
    public void execute() {
        System.out.println("๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค..");

    }
}
public class SendAction implements Action {
    @Override
    public void execute() {
        System.out.println("๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.");
    }
}
public class Main {
    public static void main(String[] args) {
        try {
//            Class c = Class.forName("SendAction");
            Class c = Class.forName("ReceiveAction");
            Action action = (Action)c.newInstance();
            action.execute();
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }catch(InstantiationException e){
            e.printStackTrace();
        }catch(IllegalAccessException e){
            e.printStackTrace();
        }
    }
}

forName()๋ฉ”์†Œ๋“œ ๋งค๊ฐœ๊ฐ’์œผ๋กœ ์ฃผ์–ด์ง„ ํด๋ž˜์Šค์˜ execute()๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

Wrapper(ํฌ์žฅ) ํด๋ž˜์Šค

์ž๋ฐ”๋Š” ๊ธฐ๋ณธ ํƒ€์ž…(byte, char, short, int ,long, float, double, boolean)์˜ ๊ฐ’์„ ๊ฐ–๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ๊ฐ์ฒด๋ฅผ Wrapper ๊ฐ์ฒด๋ผ ํ•œ๋‹ค. ๊ทธ ์ด์œ ๋Š” ๊ธฐ๋ณธ ํƒ€์ž…์˜ ๊ฐ’์„ ๋‚ด๋ถ€์— ๋‘๊ณ  ํฌ์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํฌ์žฅ ๊ฐ์ฒด์˜ ํŠน์ง•์€ ํฌ์žฅํ•˜๊ณ  ์žˆ๋Š” ๊ธฐ๋ณธ ํƒ€์ž… ๊ฐ’์€ ์™ธ๋ถ€์—์„œ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค. ๋งŒ์•ฝ ๋‚ด๋ถ€ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ํฌ์žฅ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค.

๊ธฐ๋ณธํƒ€์ž…

ํฌ์žฅํด๋ž˜์Šค

byte

Byte

char

Character

short

Short

int

Integer

float

Float

double

Double

boolean

Boolean

Boxing๊ณผ Unboxing

๊ธฐ๋ณธ ํƒ€์ž…์˜ ๊ฐ’์„ ํฌ์žฅ ๊ฐ์ฒด๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ Boxing์ด๋ผ๊ณ  ํ•˜๊ณ , ๋ฐ˜๋Œ€๋กœ ํฌ์žฅ ๊ฐ์ฒด์—์„œ ๊ธฐ๋ณธ ํƒ€์ž…์˜ ๊ฐ’์„ ์–ป์–ด๋‚ด๋Š” ๊ณผ์ •์„ Unboxing์ด๋ผ๊ณ  ํ•œ๋‹ค.

๊ธฐ๋ณธ ํƒ€์ž…์˜ ๊ฐ’์„ ์ค„ ๊ฒฝ์šฐ

๋ฌธ์ž์—ด์„ ์ค„ ๊ฒฝ์šฐ

Byte obj = new Byte(10);

Byte obj = new Byte("10");

Character obj = new Character('๊ฐ€');

์—†์Œ

Short obj = new Short(100);

Short obj = new Short("100");

Integer obj = new Integer(1000);

Integer obj = new Integer("1000");

Long obj = new Long(10000);

Long obj = new Long("10000");

Float obj = new Float(2.5F);

Float obj = new Float("2.5F");

Double obj = new Double(3.5);

Double obj = new Double("3.5");

Boolean obj = new Boolean(true);

Boolean obj = new Boolean("true");

์œ„์˜ ํ‘œ๋Š” boxingํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค€๋‹ค. ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š์•„๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด valueOf()๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

Integer obj = Integer.valueOf(1000);
Integer obj = Integer.valueOf("1000");

์ด๋ ‡๊ฒŒ boxing๋œ ํฌ์žฅ ๊ฐ์ฒด์—์„œ ๋‹ค์‹œ ๊ธฐ๋ณธ ํƒ€์ž…์˜ ๊ฐ’์„ ์–ป์–ด ๋‚ด๊ธฐ ์œ„ํ•ด์„œ๋Š” "๊ธฐ๋ณธํƒ€์ž…๋ช… + Value()"๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด๋œ๋‹ค.

byte num=obj.byteValue();
char ch=obj.charValue();
...
//์˜ˆ์ œ
//boxing
Integer obj1 = new Integer(100);
Integer obj2 = new Integer(200);
Integer obj3 = Integer.valueOf("300");

//unboxing
int value1 = obj1.intValue();
int value2 = obj2.intValue();
int value3 = obj3.intValue();

์ž๋™ boxing & unboxing

๊ธฐ๋ณธ ํƒ€์ž… ๊ฐ’์„ ์ง์ ‘ boxing, unboxingํ•˜์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ boxing๊ณผ unboxing์ด ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

์ž๋™ boxing์€ ํฌ์žฅ ํด๋ž˜์Šค ํƒ€์ž…์— ๊ธฐ๋ณธ๊ฐ’์ด ๋Œ€์ž…๋  ๊ฒฝ์šฐ์ด๋‹ค.

Integer obj = 100;

์ž๋™ unboxing์€ ๊ธฐ๋ณธ ํƒ€์ž…์— ํฌ์žฅ ๊ฐ์ฒด๊ฐ€ ๋Œ€์ž…๋  ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•œ๋‹ค.

Integer obj = new Integer(200);
int value = obj;

๋ฌธ์ž์—ด์„ ๊ธฐ๋ณธ ํƒ€์ž… ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜

ํฌ์žฅ ํด๋ž˜์Šค์˜ ์ฃผ์š” ์šฉ๋„๋Š” ๊ธฐ๋ณธ ํƒ€์ž…์˜ ๊ฐ’์„ ๋ฐ•์‹ฑํ•ด์„œ ํฌ์žฅ ๊ฐ์ฒด๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด์ง€๋งŒ, ๋ฌธ์ž์—ด์„ ๊ธฐ๋ณธ ํƒ€์ž… ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ๋„ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ํฌ์žฅ ํด๋ž˜์Šค์—๋Š” "parse+๊ธฐ๋ณธํƒ€์ž…" ๋ช…์œผ๋กœ ๋˜์–ด์žˆ๋Š” ์ •์ (static) ๋ฉ”์†Œ๋“œ๊ฐ€ ์ž‡๋‹ค. ์ด ๋ฉ”์†Œ๋“œ๋Š” ๋ฌธ์ž์—ด์„ ๋งค๊ฐœ๊ฐ’์œผ๋กœ ๋ฐ›์•„ ๊ธฐ๋ณธ ํƒ€์ž… ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

byte num = Byte.parseByte("10");
short num = Short.parseShort("10");
// int, long, float, double, boolean

ํฌ์žฅ ๊ฐ’ ๋น„๊ต

ํฌ์žฅ ๊ฐ์ฒด๋Š” ๋‚ด๋ถ€์˜ ๊ฐ’์„ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด ==์™€ != ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ์ด ์—ฐ์‚ฐ์ž๋Š” ๋‚ด๋ถ€์˜ ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํฌ์žฅ ๊ฐ์ฒด์˜ ์ฐธ์กฐ๋ฅผ ๋น„๊ตํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

Integer obj1 = 300;
Integer obj2 = 300;
System.out.println(obj1==obj2);
//=>false

๋‚ด๋ถ€์˜ ๊ฐ’๋งŒ ๋น„๊ตํ•˜๋ ค๋ฉด Unboxingํ•œ ๊ฐ’์„ ์–ป์–ด ๋น„๊ตํ•ด์•ผํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ boxing๋œ ๊ฐ’์ด ๋‹ค์Œ ํ‘œ์— ๋‚˜์™€ ์žˆ๋Š” ๊ฐ’์ด๋ผ๋ฉด ==์™€ != ์—ฐ์‚ฐ์ž๋กœ ๋‚ด๋ถ€์˜ ๊ฐ’์„ ๋ฐ”๋กœ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ์ด์™ธ์—๋Š” unboxingํ•œ ํ›„์— ๋น„๊ตํ•ด์•ผํ•œ๋‹ค.

ํƒ€์ž…

๊ฐ’์˜ ๋ฒ”์œ„

boolean

true,false

char

\u0000~\u007f

byte, short, int

-128~127

ํฌ์žฅ ๊ฐ์ฒด์— ์ •ํ™•ํžˆ ์–ด๋–ค ๊ฐ’์ด ์ €์žฅ๋ ์ง€ ๋ชจ๋ฅด๋Š” ์ƒํ™ฉ์ด๋ฉด ๋น„๊ต ์—ฐ์‚ฐ์ž(==,!=)๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์ง์ ‘ ๋‚ด๋ถ€ ๊ฐ’์„ unboxingํ•ด์„œ ๋น„๊ตํ•˜๊ฑฐ๋‚˜ equals() ๋ฉ”์†Œ๋“œ๋กœ ๋‚ด๋ถ€ ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

java.util ํŒจํ‚ค์ง€

์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ ๊ณตํ†ต์ ์œผ๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ํŒจํ‚ค์ง€ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. java.util ํŒจํ‚ค์ง€๋Š” ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ์— ์กฐ๋ฏธ๋ฃŒ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์„ ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค๋“ค์ด ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋‹ค.

ํด๋ž˜์Šค

์šฉ๋„

Arrays

๋ฐฐ์—ด์„ ์กฐ์ž‘(๋น„๊ต, ๋ณต์‚ฌ, ์ •๋ ฌ, ์ฐพ๊ธฐ)ํ•  ๋•Œ ์‚ฌ์šฉ

Calendar

์šด์˜์ฒด์ œ์˜ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ์–ป์„ ๋•Œ ์‚ฌ์šฉ

Date

๋‚ ์งœ์™€ ์‹œ๊ฐ„ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ํด๋ž˜์Šค

Objects

๊ฐ์ฒด ๋น„๊ต, null ์—ฌ๋ถ€ ๋“ฑ์„ ์กฐ์‚ฌํ•  ๋•Œ ์‚ฌ์šฉ

StringTokenizer

ํŠน์ • ๋ฌธ์ž๋กœ ๊ตฌ๋ถ„๋œ ๋ฌธ์ž์—ด์„ ๋ฝ‘์•„๋‚ผ ๋•Œ ์‚ฌ์šฉ

Random

๋‚œ์ˆ˜๋ฅผ ์–ป์„ ๋•Œ ์‚ฌ์šฉ

Objects ํด๋ž˜์Šค

Object์™€ ์œ ์‚ฌํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง„ Objects ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด ๋น„๊ต, ํ•ด์‹œ์ฝ”๋“œ ์ƒ์„ฑ, null ์—ฌ๋ถ€, ๊ฐ์ฒด ๋ฌธ์ž์—ด ๋ฆฌํ„ด ๋“ฑ์˜ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ •์  ๋ฉ”์†Œ๋“œ๋กœ ๊ตฌ์„ฑ๋œ Object์˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค์ด๋‹ค.

๋ฆฌํ„ดํƒ€์ž…

๋ฉ”์†Œ๋“œ(๋งค๊ฐœ๋ณ€์ˆ˜)

์„ค๋ช…

int

compare(T a, T b, Comparator<T> c)

๋‘ ๊ฐ์ฒด a์™€ b๋ฅผ Comparator๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋น„๊ต

boolean

deepEquals(Object a, Object b)

๋‘ ๊ฐ์ฒด์˜ ๊นŠ์€ ๋น„๊ต(๋ฐฐ์—ด์˜ ํ•ญ๋ชฉ๊นŒ์ง€ ๋น„๊ต)

boolean

equals(Object a,Object b)

๋‘ ๊ฐ์ฒด์˜ ์–•์€ ๋น„๊ต(๋ฒˆ์ง€๋งŒ ๋น„๊ต)

int

hash(Objectโ€ฆ values)

๋งค๊ฐœ๊ฐ’์ด ์ €์žฅ๋œ ๋ฐฐ์—ด์˜ ํ•ด์‹œ์ฝ”๋“œ ์ƒ์„ฑ

int

hashCode(Object c)

๊ฐ์ฒด์˜ ํ•ด์‹œ์ฝ”๋“œ ์ƒ์„ฑ

boolean

isNull(Objec obj)

๊ฐ์ฒด๊ฐ€ null์ธ์ง€ ์กฐ์‚ฌ

boolean

nonNull(Objec obj)

๊ฐ์ฒด๊ฐ€ null์ด ์•„๋‹Œ์ง€ ์กฐ์‚ฌ

T

requireNonNull(T obj)

๊ฐ์ฒด๊ฐ€ null์ธ ๊ฒฝ์šฐ ์˜ˆ์™ธ ๋ฐœ์ƒ

T

requireNonNull(T obj, String message)

๊ฐ์ฒด๊ฐ€ null์ธ ๊ฒฝ์šฐ ์˜ˆ์™ธ ๋ฐœ์ƒ(์ฃผ์–ด์ง„ ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€ ํฌํ•จ)

T

requireNonNull(T obj, Supplier<String> messageSupplier)

๊ฐ์ฒด๊ฐ€ null์ธ ๊ฒฝ์šฐ ์˜ˆ์™ธ ๋ฐœ์ƒ(๋žŒ๋‹ค์‹์ด ๋งŒ๋“  ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€ ํฌํ•จ)

String

toString(Object o)

๊ฐ์ฒด์˜ toString() ๋ฆฌํ„ด๊ฐ’ ๋ฆฌํ„ด

String

toString(Object o, String nullDefault)

๊ฐ์ฒด์˜ toString() ๋ฆฌํ„ด๊ฐ’ ๋ฆฌํ„ด, ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๊ฐ’์ด null์ผ ๊ฒฝ์šฐ ๋‘๋ฒˆ์งธ ๋งค๊ฐœ๊ฐ’ ๋ฆฌํ„ด

๊ฐ์ฒด ๋น„๊ต(compare(T a, T b, Comparator<T> c))

a๊ฐ€ b๋ณด๋‹ค ์ž‘์œผ๋ฉด ์Œ์ˆ˜, ๊ฐ™์œผ๋ฉด 0, ํฌ๋ฉด ์–‘์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•˜๋„๋ก ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค.

public interface Comparator<T>{
    int compare(T a, T b);
}
// ์˜ˆ์ œ
class StudentComparator implements Comparator<Student>{
    @Override
    public int compare(Student a, Student b){
        if(a.sno<b.sno)return -1;
        else if(a.sno==b.sno)return 0;
        else return 1;
        // return Integer.compare(a.sno,b.sno)๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.
    }
}

๋™๋“ฑ ๋น„๊ต(equals()์™€ deepEquals())

a

b

Objects.equlas(a,b)

not null

not null

a.eqauls(b)์˜ ๋ฆฌํ„ด๊ฐ’

null

not null

false

not null

null

false

null

null

true

ํŠน์ดํ•œ ์ ์€ a์™€ b๊ฐ€ ๋‘˜๋‹ค null์ผ ๊ฒฝ์šฐ true๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.

a

b

Objects.deepEqulas(a,b)

not null(not array)

not null(not array)

a.eqauls(b)์˜ ๋ฆฌํ„ด๊ฐ’

not null(array)

not null(array)

Arrays.deepEqauls(b)์˜ ๋ฆฌํ„ด๊ฐ’

null

not null

false

not null

null

false

null

null

true

ํ•ด์‹œ์ฝ”๋“œ ์ƒ์„ฑ(hash(), hashCode())

๋งค๊ฐœ๊ฐ’์œผ๋กœ ์ฃผ์–ด์ง„ ๊ฐ’๋“ค์„ ์ด์šฉํ•ด์„œ ํ•ด์‹œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ฃผ์–ด์ง„ ๋งค๊ฐœ๊ฐ’๋“ค๋กœ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜๊ณ  Arrays.hashCode(Object[])๋ฅผ ํ˜ธ์ถœํ•ด ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ์–ป๊ณ  ์ด ๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค. ์ด ๋ฉ”์†Œ๋“œ๋Š” ํด๋ž˜์Šค๊ฐ€ hashCode()๋ฅผ ์žฌ์ •์˜ํ•  ๋•Œ ๋ฆฌํ„ด๊ฐ’์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค.

ํด๋ž˜์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํ•„๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๋•Œ ์ด ํ•„๋“œ๋“ค๋กœ ๋ถ€ํ„ฐ ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ๋™์ผํ•œ ํ•„๋“œ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๊ฐ์ฒด๋Š” ๋™์ผํ•œ ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

@Override
public int hashCode(){
    return Objects.hash(field1,field2,field3);
}

Objects.hashCode(Object o)๋Š” ๋งค๊ฐœ๊ฐ’์œผ๋กœ ์ฃผ์–ด์ง„ ๊ฐ์ฒด์˜ ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ๋ฆฌํ„ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— o.hashCode()์˜ ๋ฆฌํ„ด๊ฐ’๊ณผ ๋™์ผํ•˜๋‹ค. ์ฐจ์ด์ ์€ null์ด๋ฉด 0์„ ๋ฆฌํ„ดํ•œ๋‹ค.

//์˜ˆ์‹œ
public class HashCodeEx{
    public static void main(String[] args){
        Student s1 = new Student(1,"ํ™๊ธธ๋™");
        Student s2 = new Student(1,"ํ™๊ธธ๋™");
        System.out.println(s1.hashCode());
        System.out.println(Objects.hashCode(s2));
        //=> 54151054
        //=> 54151054
    }
    static class Student{
        int sno;
        String name;
        Student(int sno, String name){
            this.sno = sno;
            this.name = name;
        }
        @Override
        public int hashCode(){
            return Objects.hahs(sno,name);
        }
    }
}

๋„ ์—ฌ๋ถ€ ์กฐ์‚ฌ(isNull(), nonNull(), requireNonNull())

isNull()์€ ๋งค๊ฐœ๊ฐ’์ด null์ธ ๊ฒฝ์šฐ true๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. ๋ฐ˜๋Œ€๋กœ nonNull()์€ ๋งค๊ฐœ๊ฐ’์ด not null์ธ ๊ฒฝ์šฐ true๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. requireNonNull์€ ๋‹ค์Œ ์„ธ๊ฐ€์ง€๋กœ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋˜์–ด์žˆ๋‹ค.

๋ฆฌํ„ดํƒ€์ž…

๋ฉ”์†Œ๋“œ(๋งค๊ฐœ๋ณ€์ˆ˜)

์„ค๋ช…

T

requireNonNull(T obj)

not nullโ†’obj nullโ†’NullPointerException

T

requireNonNull(T obj, String message)

not nullโ†’obj nullโ†’NullPointerException(message)

T

requireNonNull(T obj, Supplier<String> messageSupplier)

not nullโ†’obj nullโ†’NullPointerException(msgSupplier.get())

//์˜ˆ์ œ
public class NullEx{
    public static void main(String[] args){
        String str1 = "ํ™๊ธธ๋™";
        String str2 = null;

        System.out.println(Objects.requireNonNull(str1));
        //=>ํ™๊ธธ๋™

        try{
            String name = Objects.requireNonNull(str2);
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
        //=> null
        try{
            String name = Objects.requireNonNull(str2,"์ด๋ฆ„์ด ์—†์Šต๋‹ˆ๋‹ค.");
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
        //=>์ด๋ฆ„์ด ์—†์Šต๋‹ˆ๋‹ค.
        try{
            String name = Objects.requireNonNull(str2,()->"์ด๋ฆ„์ด ์—†์Šต๋‹ˆ๋‹ค.");
            //๋žŒ๋‹ค์‹
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
        //=>์ด๋ฆ„์ด ์—†์Šต๋‹ˆ๋‹ค.
    }
}

๊ฐ์ฒด ๋ฌธ์ž ์ •๋ณด(toString())

๊ฐ์ฒด์˜ ๋ฌธ์ž ์ •๋ณด๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. ๋‘ ๊ฐ€์ง€๋กœ ์˜ค๋ฒ„๋กœ๋”ฉ ๋˜์–ด์žˆ๋‹ค.

๋ฆฌํ„ด ํƒ€์ž…

๋ฉ”์†Œ๋“œ(๋งค๊ฐœ ๋ณ€์ˆ˜)

์„ค๋ช…

String

toString(Object o)

not nullโ†’o.toString() nullโ†’"null"

String

toString(Object o, String nullDefault)

not nullโ†’o.toString() nullโ†’nullDefault

//์˜ˆ์ œ
public class ToStringEx{
    public static void main(String[] args){
        String str1 = "ํ™๊ธธ๋™";
        String str2 = null;

        System.out.println(Objects.toString(str1));
        System.out.println(Objects.toString(str2));
        System.out.println(Objects.toString(str2,"์ด๋ฆ„์ด ์—†์Šต๋‹ˆ๋‹ค."));
        //=>ํ™๊ธธ๋™
        //=>null
        //=>์ด๋ฆ„์ด ์—†์Šต๋‹ˆ๋‹ค.
    }
}

StringTokenizer ํด๋ž˜์Šค

๋ฌธ์ž์—ด์ด ํŠน์ • ๊ตฌ๋ถ„์ž(delimiter)๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ, ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” String ์˜ split()๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜๊ฑฐ๋‚˜, StringTokenizer ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฐจ์ด์ ์€ split์€ ์ •๊ทœํ‘œํ˜„์‹์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๊ณ , StringTokenizer๋Š” ๋ฌธ์ž๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.

split() ๋ฉ”์†Œ๋“œ

String[] res = "๋ฌธ์ž์—ด".split("์ •๊ทœํ‘œํ˜„์‹");

์œ„์™€ ๊ฐ™์ด ์ •๊ทœํ‘œํ˜„์‹์„ ๊ตฌ๋ถ„์ž๋กœ ํ•ด์„œ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•œ ํ›„, ๋ฐฐ์—ด์— ์ €์žฅํ•˜๊ณ  ๋ฆฌํ„ดํ•œ๋‹ค.

์ž๋ฐ”&java,๋ฃจ๋น„-ruby

๋‹ค์Œ ๋ฌธ์ž์—ด์„ &, ,, - ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋”ฐ๋กœ ๋ฝ‘์•„๋‚ด๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

String PL = "์ž๋ฐ”&java,๋ฃจ๋น„-ruby".split("&|,|-");
//=> ["์ž๋ฐ”","java","๋ฃจ๋น„","ruby"]

StringTokenzier ํด๋ž˜์Šค

๋ฌธ์ž์—ด์ด ํ•œ ์ข…๋ฅ˜์˜ ๊ตฌ๋ถ„์ž๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•˜๋ฉด ์†์‰ฝ๊ฒŒ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•ด ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

StringTokenzier str = new StringTokenzier("๋ฌธ์ž์—ด","๊ตฌ๋ถ„์ž");

์ „์ฒด ํ† ํฐ์ˆ˜, ๋‚จ์•„ ์žˆ๋Š” ํ† ํฐ ์—ฌ๋ถ€๋ฅผ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฉ”์†Œ๋“œ

์„ค๋ช…

int

countTokens()

๊บผ๋‚ด์ง€ ์•Š๊ณ  ๋‚จ์•„ ์žˆ๋Š” ํ† ํฐ์˜ ์ˆ˜

boolean

hasMoreTokens()

๋‚จ์•„ ์žˆ๋Š” ํ† ํฐ์ด ์žˆ๋Š”์ง€ ํ™•์ธ

String

nextToken()

ํ† ํฐ์„ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์˜ด

StringTokenzier ๊ฐ์ฒด์—์„œ ๋”์ด์ƒ ๊ฐ€์ ธ์˜ฌ ํ† ํฐ์ด ์—†๋‹ค๋ฉด nextToken()์€ NoSuchElementException ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

String text = "์ž๋ฐ”,java,๋ฃจ๋น„,ruby";

//๋ฐฉ๋ฒ•1 : ์ „์ฒด ํ† ํฐ ์ˆ˜๋ฅผ ์–ป์–ด for๋ฌธ ์‹คํ–‰
StringTokenzier str = new StringTokenzier(text,",");
int count = str.countTokens();
for(int i=0;i<count;i++){
    String token = str.nextToken();
       System.out.println(token);
}

//๋ฐฉ๋ฒ•2 : ๋‚จ์•„ ์žˆ๋Š” ํ† ํฐ์„ ํ™•์ธํ•˜๊ณ , while๋ฌธ ๋ฃจํ•‘
str = new StringTokenzier(text,",");
while(str.hasMoreTokens()){
    String token = str.nextToken();
       System.out.println(token);
}

Arrays ํด๋ž˜์Šค

๋ฐฐ์—ด์˜ ๋ณต์‚ฌ, ํ•ญ๋ชฉ ์ •๋ ฌ, ํ•ญ๋ชฉ ๊ฒ€์ƒ‰๊ณผ ๊ฐ™์€ ๋ฐฐ์—ด ์กฐ์ž‘์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹จ์ˆœํ•œ ๋ฐฐ์—ด ๋ณต์‚ฌ๋Š” System.arraycopy() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ Arraysํด๋ž˜์Šค๋Š” ์ถ”๊ฐ€์ ์ธ ๊ธด์‘์„ ์ œ๊ณตํ•ด์ค€๋‹ค.

๋ฆฌํ„ดํƒ€์ž…

๋ฉ”์†Œ๋“œ ์ด๋ฆ„

์„ค๋ช…

int

binarySearch(๋ฐฐ์—ด, ์ฐพ๋Š”๊ฐ’)

์ „์ฒด ๋ฐฐ์—ด ํ•ญ๋ชฉ์—์„œ ์ฐพ๋Š” ๊ฐ’์ด ์žˆ๋Š” ์ธ๋ฑ์Šค ๋ฆฌํ„ด

ํƒ€๊ฒŸ ๋ฐฐ์—ด

copyOf(์›๋ณธ๋ฐฐ์—ด, ๋ณต์‚ฌํ• ๊ธธ์ด)

์›๋ณธ ๋ฐฐ์—ด์˜ 0๋ฒˆ ์ธ๋ฑ์Šค์—์„œ ๋ณต์‚ฌํ•  ๊ธธ์ด๋งŒํผ ๋ณต์‚ฌํ•œ ๋ฐฐ์—ด ๋ฆฌํ„ด, ๋ณต์‚ฌํ•  ๊ธธ์ด๋Š” ์›๋ณธ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ณด๋‹ค ์ปค๋„ ๋˜๋ฉฐ, ํƒ€๊ฒŸ ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€๋œ๋‹ค.

ํƒ€๊ฒŸ ๋ฐฐ์—ด

copyOfRange(์›๋ณธ๋ฐฐ์—ด, ์‹œ์ž‘์ธ๋ฑ์Šค, ๋์ธ๋ฑ์Šค)

์›๋ณธ ๋ฐฐ์—ด์˜ ์‹œ์ž‘ ์ธ๋ฑ์Šค์—์„œ ๋ ์ธ๋ฑ์Šค๊นŒ์ง€ ๋ณต์‚ฌํ•œ ๋ฐฐ์—ด ๋ฆฌํ„ด

boolean

deepEquals(๋ฐฐ์—ด,๋ฐฐ์—ด)

๋‘ ๋ฐฐ์—ด์˜ ๊นŠ์€ ๋น„๊ต(์ค‘์ฒฉ ๋ฐฐ์—ด์˜ ํ•ญ๋ชฉ๊นŒ์ง€ ๋น„๊ต)

boolean

equals(๋ฐฐ์—ด,๋ฐฐ์—ด)

๋‘ ๋ฐฐ์—ด์˜ ์–•์€ ๋น„๊ต(์ค‘์ฒฉ ๋ฐฐ์—ด์˜ ํ•ญ๋ชฉ์€ ๋น„๊ตํ•˜์ง€ ์•Š์Œ)

void

fill(๋ฐฐ์—ด, ๊ฐ’)

์ „์ฒด ๋ฐฐ์—ด ํ•ญ๋ชฉ์— ๋™์ผํ•œ ๊ฐ’์„ ์ €์žฅ

void

fill(๋ฐฐ์—ด, ์‹œ์ž‘์ธ๋ฑ์Šค,๋์ธ๋ฑ์Šค, ๊ฐ’)

์‹œ์ž‘ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ๋ ์ธ๋ฑ์Šค๊นŒ์ง€์˜ ํ•ญ๋ชฉ์—๋งŒ ๋™์ผํ•œ ๊ฐ’์„ ์ €์žฅ

void

sort(๋ฐฐ์—ด)

๋ฐฐ์—ด์˜ ์ „์ฒด ํ•ญ๋ชฉ์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ

String

toString(๋ฐฐ์—ด)

"[๊ฐ’1,๊ฐ’2,โ€ฆ]" ์™€ ๊ฐ™์€ ๋ฌธ์ž์—ด ๋ฆฌํ„ด

๋ฐฐ์—ด ๋ณต์‚ฌ

  • ๋ฐฉ๋ฒ•1,2

char[] arr1 = {'J','A','V','A'};
char[] arr2 = Arrays.copyOf(arr1, arr1.length);
//=> ["J","A","V","A"]
char[] arr3 = Arrays.copyOfRange(arr1,1,3);
//์—ฌ๊ธฐ์„œ ์‹œ์ž‘์ธ๋ฑ์Šค๋Š” ํฌํ•จ๋˜์ง€๋งŒ ๋ ์ธ๋ฑ์Šค๋Š” ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.
//=> [A","V"]
  • ๋ฐฉ๋ฒ•3

๋‹จ์ˆœํžˆ ๋ฐฐ์—ด์„ ๋ณต์‚ฌํ•  ๋ชฉ์ ์ด๋ผ๋ฉด System.arraycopy() ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
// ์ฐจ๋ก€๋Œ€๋กœ ์›๋ณธ๋ฐฐ์—ด, ์›๋ณธ์‹œ์ž‘์ธ๋ฑ์Šค, ํƒ€๊ฒŸ๋ฐฐ์—ด, ํƒ€๊ฒŸ์‹œ์ž‘์ธ๋ฑ์Šค, ๋ณต์‚ฌ๊ฐœ์ˆ˜์ด๋‹ค.
//์˜ˆ์ œ
char[] arr1 = {'J','A','V','A'};

//๋ฐฉ๋ฒ•1
char[] arr2 = Arrays.copyOf(arr1, arr1.length);
//๋ฐฉ๋ฒ•2
char[] arr3 = Arrays.copyOfRange(arr1,0,arr1.length);
//๋ฐฉ๋ฒ•3
char arr4 = new char[arr1.length]
System.arraycopy(arr1,0,arr4,0,arr1.length);

๋ฐฐ์—ด ํ•ญ๋ชฉ ๋น„๊ต

equals()๋Š” 1์ฐจ ํ•ญ๋ชฉ์˜ ๊ฐ’๋งŒ ๋น„๊ตํ•˜๊ณ , deepEquals()๋Š” 1์ฐจ ํ•ญ๋ชฉ์ด ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐฐ์—ด์„ ์ฐธ์กฐํ•  ๊ฒฝ์šฐ ์ค‘์ฒฉ๋œ ๋ฐฐ์—ด์˜ ํ•ญ๋ชฉ๊นŒ์ง€ ๋น„๊ตํ•œ๋‹ค.

int[][] origin = {{1,2},{3,4}};

//์–•์€ ๋ณต์ œ
int[][] clone1 = Arrays.copyOf(origin,origin.length);
System.out.println("๋ฐฐ์—ด ๋ฒˆ์ง€ ๋น„๊ต"+origin.equals(clone1));
//=>false
System.out.println("1์ฐจ ๋ฐฐ์—ด ํ•ญ๋ชฉ๊ฐ’ ๋น„๊ต"+Arrays.deepEquals(clone1));
//=>true
System.out.println("์ค‘์ฒฉ ๋ฐฐ์—ด ํ•ญ๋ชฉ๊ฐ’ ๋น„๊ต"+Arrays.deepEquals(clone1));
//=>true

//๊นŠ์€ ๋ณต์ œ
int[][] clone2 = Arrays.copyOf(origin, origin.length);
clone2[0]=Arrays.copyOf(origin[0],origin[0].length);
clone2[1]=Arrays.copyOf(origin[1],origin[1].length);
System.out.println("๋ฐฐ์—ด ๋ฒˆ์ง€ ๋น„๊ต"+origin.equals(clone2));
//=>false
System.out.println("1์ฐจ ๋ฐฐ์—ด ํ•ญ๋ชฉ๊ฐ’ ๋น„๊ต"+Arrays.deepEquals(clone2));
//=>false
System.out.println("์ค‘์ฒฉ ๋ฐฐ์—ด ํ•ญ๋ชฉ๊ฐ’ ๋น„๊ต"+Arrays.deepEquals(clone2));
//=>true

๋ฐฐ์—ด ํ•ญ๋ชฉ ์ •๋ ฌ

๊ธฐ๋ณธ ํƒ€์ž… ๋˜๋Š” String ๋ฐฐ์—ด์€ Arrays.sort()๋ฉ”์†Œ๋“œ์˜ ๋งค๊ฐœ๊ฐ’์œผ๋กœ ์ง€์ •ํ•ด์ฃผ๋ฉด ์ž๋™์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ์ด ๋œ๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ ํด๋ž˜์Šค ํƒ€์ž…์ผ ๊ฒฝ์šฐ์—๋Š” ํด๋ž˜์Šค๊ฐ€ Comparable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์–ด์•ผ ์ •๋ ฌ์ด๋œ๋‹ค.

public class Member implements Comparable<Memeber>{
    String name;
    Memeber(String name){
        this.name = name;
    }
    @Override
    public int compareTo(Member o){
        return name.comapareTo(o.name);
    }
}

Comparable<Member> ๋Š” Member ํƒ€์ž…๋งŒ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด ์ œ๋„ค๋ฆญ<>์„ ์‚ฌ์šฉํ–ˆ๋‹ค. compareTo() ๋ฉ”์†Œ๋“œ๋Š” ๋น„๊ต๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋„๋ก ์˜ค๋ฒ„๋ผ์ด๋”ฉํ–ˆ๋‹ค. compareTo()๋ฉ”์†Œ๋“œ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์ธ ๊ฒฝ์šฐ ์ž์‹ ์ด ๋งค๊ฐœ๊ฐ’๋ณด๋‹ค ๋‚ฎ์„ ๊ฒฝ์šฐ ์Œ์ˆ˜, ๊ฐ™์€ ๊ฒฝ์šฐ 0 , ๋†’์„ ๊ฒฝ์šฐ ์–‘์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•˜๋ฉด๋œ๋‹ค. ๋ฐ˜๋Œ€๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ์ผ ๋•Œ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์˜ ๋ฐ˜๋Œ€๋กœ ๋ฆฌํ„ดํ•˜๋ฉด๋œ๋‹ค.

int[] scores={99,97,98};

Arrays.sort(scores);

Member m1 = new Member("์œ ์žฌ์„");
Member m2 = new Member("๊ฐ•ํ˜ธ๋™");
Member m3 = new Member("์ „ํ˜„๋ฌด");
Member[] members = {m1,m2,m3};
Arrays.sort(members);

๋ฐฐ์—ด ํ•ญ๋ชฉ ๊ฒ€์ƒ‰

๋ฐฐ์—ด ํ•ญ๋ชฉ์—์„œ ํŠน์ • ๊ฐ’์ด ์œ„์น˜ํ•œ ์ธ๋ฑ์Šค๋ฅผ ์–ป๋Š” ๊ฒƒ์„ ๋ฐฐ์—ด ๊ฒ€์ƒ‰์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋ฐฐ์—ด ํ•ญ๋ชฉ์„ ๊ฒ€์ƒ‰ํ•˜๋ ค๋ฉด ๋จผ์ € Arrays.sort()๋ฉ”์†Œ๋“œ๋กœ ํ•ญ๋ชฉ๋“ค์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ํ›„, Arrays.binarySearch()๋ฉ”์†Œ๋“œ๋กœ ํ•ญ๋ชฉ์„ ์ฐพ์•„์•ผํ•œ๋‹ค.

int[] scores={99,97,98};

Arrays.sort(scores);
int index = Arrays.binarySearch(scores,99);
//=>2
Member m1 = new Member("์œ ์žฌ์„");
Member m2 = new Member("๊ฐ•ํ˜ธ๋™");
Member m3 = new Member("์ „ํ˜„๋ฌด");
Member[] members = {m1,m2,m3};
Arrays.sort(members);
index = Arrays.binarySearch(members,m1);
//=>1

๋‘ ๊ฐ์ฒด๋ฅผ ๋น„๊ต์ž(Comparator)๋กœ ๋น„๊ตํ•ด์„œ int๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค. java.util.Comparator<T>๋Š” ์ œ๋„ค๋ฆญ ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…์œผ๋กœ ๋‘ ๊ฐ์ฒด๋ฅผ ๋น„๊ตํ•˜๋Š” compare(T a, T b) ๋ฉ”์†Œ๋“œ๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๋‹ค. ์ œ๋„ค๋ฆญ์€ ์ดํ›„ ์—์„œ ํ•™์Šตํ•œ๋‹ค. T๋Š” ๋น„๊ตํ•  ๊ฐ์ฒด ํƒ€์ž…์ด๋‹ค.

13. ์ œ๋„ค๋ฆญ
API ๋„ํ๋จผํŠธ