Java 10

[Java] OOP 4대원칙 및 SOLID원칙

Solid SRP(Single Responsibility Principle) 단일책임원칙 클래스나 모듈은 변경할 이유가 하나만 있어야 한다. 즉, 클래스는 하나의 책임 또는 작업만 가져야 하며, 클래스를 변경할 수 있는 다른 책임이 없어야 한다. 결과적으로 SRP원칙을 잘따른 클래스는 변경사항에 대한 파급 효과가 적으며 , 변화에 잘 대응할수 있다. ❗이때 무조건적으로 하나의 클래스에 하나의 기능만 있으란건아니고 해당클래스에 너무 위배되는 기능 (ex) 옷장이 옷을벗는다) 이 없으면 된다. OCP(Open Closed Principle) 개방 폐쇄 원칙 (추상화, 다형성) 개방 폐쇄 원칙은 높은 응집도와 낮은 결합도 라는 원리로 설명할 수 있다. 즉 확장에 열려있고, 변경에는 닫혀있어야한다. 이말은 새로..

Java 2023.04.09

[Java] equals,hashCode

equals,hashCode hash 값을 사용하는 Collection에서 논리적으로 같은 객체인지 확인하는 과정은 위 그림과 같다. hashCode()에서 두 객체가 같다 판단한후 equals()메서드에서 두객체가 같다 판단한다면Collection은 동등객체라 판단한다. HashSet points = new HashSet(); points.add(Point.of(1, 1)); points.add(Point.of(2, 2)); points.add(Point.of(3, 3)); Point pointToRemove = Point.of(1, 1); points.remove(pointToRemove); 예를들어 위 코드에서 remove()메서드를 사용하더라도 points HashSet에 존재하는 첫번째 Poin..

Java/Java 개념 2023.04.09

[Java] java.lang 패키지

java.lang 패키지 class HelloWorld{ public static void main(String[] args){ System.out.println("Hello, World!"); } } 위와같은 class가 있다 가정해보자. 이때, 우린 아무런 package도 import하지 않았는데 System클래스에 존재하는 println메서드를 사용한다. 이러한 이유는 JAVA에서 필요한 클래스들이 모여있는 패키지인 java.lang package는 import문이 따로 없어도 자동적으로 프로그램에 포함이 되기 때문이다. java.lang에 존재하는 클래스 Object: The root class of the Java class hierarchy. String: A class that represe..

Java/Java 개념 2023.03.12

[Java] Test코드에서 Assertions를 통해 오류 잡기

Assertions를 통해 오류를 던지는지 확인하기 org.junit.Assert 와 org.assertj.Assertions의 차이점 org.junit.Assert: 가장 널리 사용되는 Java 테스트 프레임워크 중 하나인 JUnit 테스트 프레임워크의 일부이다. JUnit은 예상 결과를 실제 결과와 비교하여 확인할 수 있는 어설션 메서드 세트를 제공한다. 예를 들어 assertEquals(expected, actual)를 사용하여 두 개체가 동일한지 확인할 수 있다. org.assertj.Assertions: 반면에 org.assertj.Assertions는 비교적 최신 Java 테스트 프레임워크인 AssertJ 테스트 프레임워크의 일부이다. AssertJ도 어설션 메서드 세트를 제공하지만, 어설션 ..

Java/Java 개념 2023.03.12

[Java] Error And Exception

예외 계층 Error는 일반적으로 프로그램 자체에서 처리할 수 없는 심각한 문제다. Error는 일반적으로 하드웨어 또는 시스템 문제와 같은 외부 요인으로 인해 발생하며, 이로 인해 프로그램이 갑작스럽게 종료될 수 있다. Java에서 발생하는 Error의 예로는 OutOfMemoryError 와 StackOverflowError가 있다. 반면에 Exception은 프로그램 자체에서 처리할 수 있는 덜 심각한 문제다. Exception는 프로그램 로직의 오류 또는 잘못된 사용자 입력이나 네트워크 연결 실패와 같은 실행 중 예기치 않은 조건으로 인해 발생한다. Exception는 try-catch 블록을 사용하여 프로그램에서 포착하고 처리할 수 있으며, Java에서 Exception의 예로는 NullPoin..

Java/Java 개념 2023.03.12

[Java] ArrayList 출력 방법 3가지

ArrayList arrList = new ArrayList(Arrays.asList("aaa","bb","cccc")); //1번째 방법 System.out.println(arrList); //결과: [aaa, bb, cccc] //2번째 방법 for(String str:arrList){ System.out.print(str+" "); //결과: aaa bb cccc } System.out.println(); //3번째 방법 Iterator iter = arrList.iterator(); //Iterator 선언 while(iter.hasNext()){ System.out.print(iter.next()+ " "); //결과: aaa bb cccc } 결론 ArrayList 그대로 출력 for-each..

Java/Java 개념 2023.03.12

[Java] 자바 문자열

String String은 immutable하다. immutable과 mutable 따라서 수정을 필요로 할땐 이미 존재하는 객체이더라도 새로운 객체를 생성하여 재할당 하기 때문에 비효율 적인 부분이 존재한다. 이를 해결하기 위해 mutable한 Stringbuilder & StringBuffer에 대해 알아본다. 참고사항 String a = "123"; String b = a; String c = new String(b); if(a==b){ System.out.println("a, b같은 객체"); } if(a==c){ System.out.println("a, c같은 객체"); } if(b==c){ System.out.println("b,c 같은 객체"); } //result a, b같은 객체 Type..

Java/Java 개념 2023.03.12

[JAVA] CompletableFuture

CompletableFuture CompletableFunture은 Asynchronous programming을 수행할수 있도록 java에서 제공하는 class이며, 기존 Future를 기반으로 외부에서 완료시킬수 있어 CompletableFuture라는 이름을 갖게 되었다. CompletableFuture은 Future에서 할수없었던 여러 Future의 조합, 예외처리, callback 등록 등이 가능하다. 비동기 작업 runAsync 반환값이 없는 경우 supplyAsync 반환값이 있는 경우 runAsync CompletableFuture future = CompletableFuture.runAsync(() -> { System.out.println("runAsync"); }); future.ge..

Java/Java 개념 2023.02.12