Java
-
System.out.println()으로 Java의 많은 것을 설명해보자!Java 2024. 1. 28. 20:44
오늘 글은 '챌린지'에 가깝다 ㅋㅋ!! 지금까지 공부한 Java개념을 최~대한 접목시켜서 API를 열심히 뒤져가며 System.out.println()를 분석해보려고 한다. 매우 구구절절 꼬리에 꼬리를 묻는 글이라 분량 조절은 실패일듯 하지만..재밌는 글이 될 것 같다ㅎ.ㅎ - Naming convention, CamelCase - Dot Operator ( . ) - Has a / Is a - Extends - Access Modifier - Overloading / Overriding - println() 호출, toString() - I/O - Synchronized, write시 동기화 문제 - Exception - 최상위 클래스 Object 1. Naming convention (CamelCas..
-
Java에서 출력할 때 toString()을 생략해도 되는 이유Java 2024. 1. 27. 15:50
많은 사람들이 print(), println() 등 출력메서드를 사용할 때 toString()을 생략해도 된다! 라고 생각만 하거나 혹은 몰랐지만 그냥 그렇게 썼다거나 할 것이다. 도대체 왜 그런지 갑자기 궁금해서 패키지 소스코드를 뒤져봤다. 1. println() //파라미터가 boolean println() public void println(boolean x) { synchronized (this) { print(x); newLine(); } } //그 외 여러 오버로딩 된 println() . . . println()을 살펴보니 print()를 호출하고, 줄바꿈을 한다. 이것이 흔히 알고있는 print와 println(줄바꿈)의 차이이다. 2. print() //파라미터가 char인 print()..
-
Object 클래스의 equals메서드 (feat. Casting Reference Types)Java 2024. 1. 20. 14:52
지난 글에서 모든 Class들의 최상위 클래스가 Object라는 것을 살펴보았고, Object의 toString()메서드를 각 클래스들이 어떻게 오버라이딩해서 쓰고 있는지 확인했다. 이번에는Object의 메서드 중 equals()메서드를 살펴보려고 한다. Object obj를 파라미터로 받는 메서드인 만큼, Reference타입의 Casting에 대해서도 언급하려고 한다! 1. (인스턴스1 == 인스턴스2) 의 결과는?? 아래와 같이 Example 클래스를 인스턴스화 하여 1, "안녕"으로 상태 값을 설정했다고 하자. // Example클래스의 인스턴스 e1, e2생성 Example e1 = new Example(1, "안녕"); Example e2 = new Example(1, "안녕"); 이처럼 두 ..
-
Java 모든 Class는 Object Class를 상속 받는다(feat. 오버라이딩)Java 2024. 1. 19. 21:52
Java를 공부해 본 사람이라면 다들 이런 말은 들어보셨을 것이다. Object는 모든 Class들의 최상위 클래스다. OOP를 공부하면서 Object 클래스를 제대로 살펴보지 않을 수는 없지!!! 우선 위의 말이 진짜인지 내 두 눈으로 직접 봐야겠다. API docs를 살펴보자!!! 1. 진짜 그런가요? 아~~~무 클래스나 눌러봤다. Hierarchy부분을 보면 java.lang.Object를 공유하고 있는 것을 알 수 있다. 다른 클래스도 아~~~무거나 눌러봤다. 얘 또한 마찬가지!!! 뭘 들어가봐도 전부 java.lang.Object가 최상위에 있는 것을 확인할 수 있다. 그럼 이제 Object 클래스도 한 번 살펴보자. java.lang.Object는? Hierarchy부분에 유일하게 상위 클래스..
-
Garbage collection을 고려한 코드 작성Java 2024. 1. 19. 10:28
아주 단순한 예시를 가져와봤다. 기존에는 진짜 단순히, 한 Line이 길어지면 가독성이 떨어지는 것 같아서 Scanner keyboard = new Scanner(System.in); 이런식으로 따로 인스턴스화를 했던 경험이 있다. 그러나 keyboard인스턴스는 입력을 한 번만 받고 이후에는 필요도 없는데, 메모리 공간을 계속 쥐고 있게 되니 Java에서 할당 해제 된 메모리를 청소하는 Garbage collection을 할 수가 없다. 그래서 위와 같이 일시적으로만 할당하도록 코드를 수정하였다.
-
static 메서드 호출 시 주의점Java 2024. 1. 19. 10:22
별찍기 메서드다. 상태를 변화시키지 않는 단순function이므로, static으로 선언하였다. 이 메서드는 편의상 main()과 같은 클래스에 담긴 상태다. 같은 클래스에 있는 static메서드끼리는 호출 시 Class명을 써주지 않아도 바로 접근해 호출이 가능하다. 그런데 현업에서는 main()과 Bean을 철저히 구분한다고 한다. 그래서 이러한 메서드가 main()과 같은 클래스에 담길 가능성이 거의 없다. 그럼 서로 다른 클래스에 담긴 static메서드들이 되므로, 위와 같은 코드는 에러가 발생할 것이다. 그러므로 이렇게 클래스명(static 메서드니까)을 통해 접근해주는 것이 건강에 좋다. + 물론 클래스명.메서드()이렇게 한다고 전부 문제가 없는 것은 아닐 것이다. 나는 ClassPath를 현..
-
Java에는 다차원배열이 없다?!! (배열의 배열, 다중 배열)Java 2024. 1. 12. 21:38
Java처음 공부했을 때 '배열의 배열(다중 배열)'을 들어보긴 했는데, 공부를 제대로 안 했었는지.. '다차원 배열'개념이 Java에는 없다는 의미인 줄 몰랐다. 결론은 타 언어에서의 다차원 배열개념은 자바에서 '배열의 배열'으로 표현하는 것이 맞다고 한다. 지금부터 그게 대체 뭔 소린지 살펴보자 ! ! 1. Java 다중 배열은 어떻게 생겼나? 다차원 배열이라고 하면, 아래와 같은 구조를 떠올릴 것이다. 1단 1단 첫번째 서랍 arr[0][0] 1단 두번째 서랍 arr[0][1] 1단 세번째 서랍 arr[0][2] 2단 2단 첫번째 서랍 arr[1][0] 2단 두번째 서랍 arr[1][1] 2단 세번째 서랍 arr[1][2] 3단 3단 첫번째 서랍 arr[2][0] 3단 두번째 서랍 arr[2][1]..
-
Java 환경 변수 설정(하는 이유, 과정 분석!)Java 2024. 1. 11. 23:33
프로그래밍 언어 사용하려고 할 때(JDK설치 등), 뭔 경로 설정같은 걸 하게 된다. 근데 이게 대체 뭔지, 왜 하는지도 모르고 따라만 하면... 개발자가 아니라 사용자라고...(지난날의 나^_^...) 그래서 이번에는 PATH 설정을 하는 이유, 그 과정을 뜯어서 고민해봤다! (JAVA 기준) 1. 환경 변수 설정. 왜 함? 차근차근 따라가보자. 우선 JDK를 설치했다. JDK는 컴파일을 하는javac.exe(개발환경을 제공)와 프로그램을 실행 하는 java.exe(실행환경 제공)를 포함하고 있다. Q. 그럼 eclipse같은 IDE 없어도 이미 개발과 실행은 가능하겠네?! A. 당근. 콘솔에서 javac로 컴파일 한 후, java로 실행까지 할 수 있음 ㅇㅋ 그럼 컴파일러 불러보자. javac 입력...