본문 바로가기

Java

(19)
인터페이스(Interface) 인터페이스란 자바에서 인터페이스(interface)란 클래스가 구현해야 하는 메소드의 집합을 정의하는 특수한 타입이다.  이러한 인터페이스를 사용하는 이유는 다음과 같다.추상 메소드를 통해 객체들 간의 네이밍을 통일할 수 있고 이로 인해 소스의 가독성과 유지보수가 향상된다. 확장에는 열려 있고 변경에는 닫혀 있는 객체 간 결합도(코드 종속성)를 낮춘 유연한 방식의 개발이 가능하다.  인터페이스는 클래스가 따라야 할 일종의 계약(규약)을 정의한다. 개발자는 인터페이스에 정의된 메소드를 구현한 클래스를 통해 실제 기능을 제공한다. 인터페이스는 메서드 이름, 매개변수 타입, 리턴 타입만 정의하고, 구현은 이를 구현하는 클래스에서 제공한다. 인터페이스를 구현한 클래스는 반드시 인터페이스에서 정의된 모든 메서드를..
상속(Inheritance) 상속이란  자바에서 상속(Inheritance)은 하나의 클래스가 다른 클래스의 속성과 메소드를 물려받아 재사용하는 방식을 의미한다. 상속 방식은 주로 다단계 상속, 계층적 상속 두 가지 방식을 띄게 되는데 부모 클래스를 통해 자식, 손자까지 내려가는 방식을 다단계 상속이라고 하며 하나의 부모가 여러 개의 자식을 가지는 것을 계층적 상속이라고 한다.  자바에서 다중 상속은 불가능 하다.  자바 클래스가 다중 상속이 불가능한 이유는 다음과 같다.1. A라는 class에 test()라는 메소드가 있음2. B라는 class에 test()라는 메소드가 있음3. C라는 class가 A와 B 클래스를 모두 상속받음4. C에서 부모 클래스의 test() 메소드 호출  - 이러면 어느 부모의 test() 메소드를 호출..
동일성(identity)과 동등성(equality) 동일성과 동등성의 원활한 설명을 위해 아래와 같은 클래스가 있다고 가정한다. class User { private int userId; private String email; public User(int userId, String email) { this.userId = userId; this.email = email; }}  동일성(identity) 이란 동일성은 두 객체가 동일한 메모리 주소를 가리키는지를 의미한다. Java에서는 == 연산자를 사용하여 동일성을 비교한다.User user1 = new User(1, “test@test.com”);User user2 = user1;System.out.println(user1 == user2); // out..
깊은 복사(Deep Copy)와 얕은 복사(Shallow Copy) 얕은 복사(Shallow Copy) 란 다음과 같은 Java 코드를 보자int[] arr1 = {1,2,3};int[] arr2 = arr1; arr2[0] = 10;System.out.println(arr1[0]); // output : 10System.out.println(arr2[0]); // output : 10arr1[1] = 9;System.out.println(arr1[1]); // output : 9System.out.println(arr2[1]); // output : 9 위 코드에서는 분명 arr2의 0번째 데이터를 10으로 변경했는데 arr2만 아니라 arr1의 0번째 데이터도 10으로 변경된 것을 볼 수 있다. 또한 arr1의 1번째 데이터를 9로 변경했는데 arr2의 1번..
String / StringBuilder / StringBuffer 이번 포스트를 보기 앞서 이전 포스트를 보고 오시기 바랍니다.https://jaystorage.tistory.com/20 String과 String Constant Pool들어가기 앞서 String을 보다 자세히 이해하기 위해서는 JVM 구조를 알고 있는 것이 좋다. JVM에 대한 자세한 내용을 알고 싶다면 https://jaystorage.tistory.com/8 을 참고하자 String 이란 Java에서 String은 문jaystorage.tistory.com  String 과 StringBuilder, StringBuffer 의 차이점 String과 (StringBuilder, StringBuffer)는 문자열을 다루는 클래스라는 점에서 공통점을 가지고 있지만 String은 불변성(immutable..
BigDecimal BigDecimal 이란 BigDecimal은 Java에서 고정 소수점 연산을 정확하게 수행하기 위해 사용되는 클래스를 의미한다. double이나 float과 같은 부동 소수점 타입은 매우 큰 숫자나 매우 작은 숫자를 처리할 수 있지만 정확도가 떨어질 수 있다. 이러한 이유로 금융 계산과 같이 정확도가 중요한 경우 부동 소수점 타입을 사용해 연산을 처리하는 것은 적합하지 않다. 이때 BigDecimal을 사용하면 소수점 이하의 숫자도 정확하게 표현할 수 있다.   float과 double의 문제점 아래 코드를 보자일반적으로 우리는 연산의 결과가 0.3이 나오길 기대하지만 실제로는 0.30000000000000004 라는 이상한 값이 도출된다.double a = 0.1;double b = 0.2;Syste..
String과 String Constant Pool 들어가기 앞서 String을 보다 자세히 이해하기 위해서는 JVM 구조를 알고 있는 것이 좋다. JVM에 대한 자세한 내용을 알고 싶다면 https://jaystorage.tistory.com/8 을 참고하자 String 이란 Java에서 String은 문자열을 나타내는 객체이다. C/C++에서는 문자열이 단순히 char의 배열인데 반해, Java에서의 문자열은 java.lang안에 있는 String 클래스의 객체를 의미한다. 그렇기 때문에 String 은 int 와 char 와 같은 기본형(primitive type)이 아닌 참조형(reference type) 변수로 분류된다. (String의 첫 글자가 소문자가 아닌 대문자로 시작하는 이유가 이 때문이다.) Java의 String 은 불변(immuta..
상수(Constant)와 리터럴(Literal) 상수(Constant) 란 상수란 한 번 값을 할당하면 프로그램 실행 도중 그 값이 변경되지 않는 변수를 의미한다. Java 에서는 상수를 정의하기 위해서는 final 키워드를 변수 앞에 붙여 사용한다. 정적 상수를 선언할 때는 static final 키워드를 사용하며 대문자로 작성하고 공백은 ‘_’ 로 표시한다. 인스턴스 상수를 선언할 때는 final 키워드를 사용하며 일반 변수 처럼 카멜 케이스로 작성한다. 이러한 상수를 초기화 하는 방법은 다음과 같다. 1. 선언시 초기화 public static final int MAX_COUNT = 100; public static final String DATABASE_URL = "jdbc:mysql://localhost:3306/mydatabase"; 2. ..