Generic(제네릭)
2021. 7. 15. 10:04
JAVA
Generic(제네릭)을 사용해야 하는 이유 제네릭 타입을 사용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 미리 제거할 수 있기 때문이다. 자바 컴파일러는 코드에서 잘못 사용된 타입 때문에 발생하는 문제점을 제거하기 위해 제네릭 코드에 대해 강한 타입 체크를 한다. 실행 시 타입 에러가 나는 것보다는 컴파일 시에 미리 타입을 강하게 체크해서 에러를 사전에 방지하는 것이 좋다. 또 부가적인 효과로 제네릭 코드를 사용하면 타입을 국한하기 때문에 요소를 찾아올 때 타입 변환을 할 필요가 없어 프로그램 성능이 향상되는 효과를 얻을 수 있다. Box클래스 public class Box { private Object obj; public void setObj(Object obj){ this.obj..
StringBuffer(스트링버퍼)
2021. 7. 13. 13:01
JAVA
String 클래스의 인스턴스는 한 번 생성되면 그 값을 읽기만 할 수 있고, 변경할 수는 없다. 하지만 StringBuffer 클래스의 인스턴스는 그 값을 변경할 수도 있고, 추가할 수도 있다. String클래스는 불변 클래스이다. String str1 = "hello world"; String str2 = str1.substring(5); System.out.println(str1); System.out.println(str2); 실행결과 hello world world 기존의 str1은 전혀 변화 없다. substring메소드는 5번째 부터 문자열을 잘라서 새로운 문자열을 반환하는 메소드 str1자체는 전혀 변화가 없다. String클래스를 사용할 때 가장 문제가 발생하는 경우는 다음과 같은 코드를..
Object와 오버라이딩
2021. 7. 12. 23:36
JAVA
Object클래스는 모든 클래스의 최상위 클래스 아무것도 상속받지 않으면 자동으로 Object를 상속 Object가 가지고 있는 메소드는 모든 클래스에서 다 사용할 수 있다는 것을 의미 Object클래스에서 가장 많이 사용되는 메소드는 다음과 같다. equals : 객체가 가진 값을 비교할 때 사용 toString : 객체가 가진 값을 문자열로 반환 hashCode : 객체의 해시코드 값 반환 그런데 이 세가지 메소드는 사용할 때 반드시 오버라이딩해서 사용해야 한다. 예를 들어 보자 같은 클래스를 통해 만들어준 s1과 s2라는 인스턴스에 모두 같은 값을 집어넣고 equals를 이용해 비교하면 어떻게 될까? import java.util.Objects; public class Student { String..
Finally와 Try with Resource
2021. 7. 11. 17:39
JAVA
FileWriter 객체의 경우 파일 작업이 다 끝나고 나면 close를 이용해서 파일을 닫아주는 작업을 했다. 하지만 만약 try 문에서 FileWriter 객체를 만들고, 닫는 작업까지 다 넣었을 때, 그 중간의 파일 작업에서 예외가 발생하게 된다면 어떻게 될까? 그럼 파일을 닫아주는 작업을 실행하지 못하고 그다음 작업을 수행할 때 문제가 발생하게 될 수도 있다. 이런 경우에 사용하는 형식이 finally 문이다 finally 문은 try 문에서 예외가 발생했거나 발생하지 않았거나 무조건 실행된다. import java.io.FileWriter; import java.io.IOException; public class CheckedExceptionApp { public static void main(..
인터페이스(INTERFACE)보충 및 다형성(POLYMORHPISM)
2021. 7. 11. 16:04
JAVA
인터페이스(Interface)를 이용하면 앞으로 만들 클래스의 메소드 규격을 선언할 수 있다. 인터페이스에서 이를 이용해서 만들 클래스의 메소드의 형식을 미리 선언하고, 인터페이스를 이용해서(implements 키워드) 만드는 클래스는 인터페이스의 메소드를 정의한다. 자바 인터페이스는 기본적으로 추상메서드의 모음이다. 추상 메서드는 아래와 같이 구현부가 없는 메서드를 말한다. interface Printable{ void print(); // 메소드를 인터페이스에 정의할 때는 내용이 들어가지 않는다. } 구현부가 없으므로 인터페이스를 만든다면 반드시 구현하는 클래스를 만들어야 하며, 인터페이스를 구현하기로 한 클래스는 반드시 인터페이스에 명시되어 있는 추상메서드들을 모두 구현해야 한다. 만약 이를 구현하..