본문 바로가기

TIL

(76)
[Java] 제네릭(Generic), WildCard 제네릭(Generic)이란? - 데이터의 타입을 일반화한다는 것을 의미 (사전적 의미는 일반적인) - 제네릭을 활용하면 타입 변환 및 타입 검사에 들어가는 코드 생략이 가능하다. 제네릭은 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 지정하는 방법을 말한다. 컴파일 시에 미리 타입 검사를 시행하게 되면 클라스나 메소드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있으며, (잘못 된 타입인 경우 컴파일 에러를 발생시킴) 반환 값에 대한 타입 변환 및 타입 검사에 들어가는 코드 생략이 가능해진다. (instanceof 비교 및 다운캐스팅 작성 불필요) JDK 1.5 버전부터 추가된 문법이다. 제네릭 작성 방법 - 제네릭 설정은 클래스 선언부 마지막 부분에 다이아몬드 연산자를 이용하여 작성하게..
[Java] API - 3. Stringbuilder, Wrapper, Calendar String 불변이라는 특성을 가지고 있다. 문자열에 + 연산으로 합치기 하는 경우, 기존 인스턴스를 수정하는 것이 아닌 새로운 인스턴스를 반환한다. 따라서 문자열 변경이 자주 일어나는 경우 성능 면에서 좋지 않다. 하지만 변하지 않는 문자열을 자주 읽어 들이는 경우에는 좋은 성능을 기대할 수 있다. StringBuilder 가변이라는 특성을 가지고 있다. 문자열에 append() 메소드를 이용하여 합치기 하는 경우 기존 인스턴스를 수정하기 때문에 새로운 인스턴스를 생성하지 않는다. 따라서 잦은 문자열 변경이 일어나는 경우 String 보다 성능이 높다. 단, JDK 1.5 버전부터 문자열의 + 연산이 StringBuilder의 append()로 컴파일 된다. 따라서 성능에 큰 차이를 보이지 않는다. 하..
[java] API - 2. new String, equals, split, StringTokenizer, 이스케이프문자 문자열 객체 사용하는 방법 "" 리터럴형태 - 동일한 값을 가지는 인스턴스를 단일 인스턴스로 관리한다. (singleton) new String("문자열") -매번 새로운 인스턴스를 생성한다 String str1 = "java"; String str2 = "java"; String str3 = new String("java"); String str4 = new String("java"); 리터럴 형태로 만든 문자열 인스턴스는 동일한 값을 가지는 인스턴스로 하나의 인스턴스로 관리한다. - 따라서 주소 값을 비교하는 == 연산으로 비교 시 서로 동일한 주소를 비교하여 true를 반환한다. - new로 새로운 인스턴스를 생성하게 되면 기존 인스턴스를 두고 새로운 인스턴스를 할당했기 때문에 == 연산으로 비교 ..
[Java] API - 1. Object, toString, equals, hashCode, CharAt, compareTo, concat, indexOf, trim, lastIndexOf, toLowerCase, toUpperCase, substring, replace, length, isEmpty API (Application Programming Interface)란? - 응용 프로그램에서 사용할 수 있도록 운영체제나 프로그램이 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스 - 자바 API : 자바 플랫폼 위에서 동작하는 애플리케이션 개발 시 활용 (유용한 클래스 및 인터페이스 제공) JDK를 설치하면 시스템을 제어하거나 편의 기능을 위한 API를 제공 Object - 모든 클래스는 Object 클래스의 후손 - java.lang 패키지에 존재 - Object 클래스가 가진 메소드 중 관례상 많이 오버라이딩 해서 사용하는 메소드들이 존재 - 제공하는 메소드 ( toString, equals, hashCode ) toString() - 인스턴스 생성 시 사용한 full class name..
[Java] 객체지향 - 2. 다형성과 객체배열, 매개변수에 쓰이는 다형성, 리턴타입에 쓰이는 다형성, 추상클래스, 추상메소드 다형성과 객체배열 - 다형성과 객체배열을 이용하면 여러 인스턴스를 하나의 레퍼런스 변수로 연속 처리할 수 있음 Car[] car = new car[5]; car[0] = new Sonata[]; car[1] = new Avante(); car[2] = new Grandure(); for(int i = 0; i < car.length; i++){ car[i].move();//실행 후엔 동적바인딩 실행. Sonata, Avante, Grandure에있는 move메소드 출력 } 참고코드 Animal[] animals = new Animal[5]; animals[0] = new Rabbit(); animals[1] = new Tiger(); animals[2] = new Rabbit(); animals[3] =..
[Java] 객체지향 - 1. 다형성, 동적바인딩, instanceof 연산자, 클래스 형변환 다형성이란? 하나의 인스턴스가 여러가지 타입을 가질 수 있는 것을 의미한다. 다형성은 상속을 기반으로 한 기술이다. 하나의 타입으로 여러 타입의 인스턴스를 처리할 수 있고, 하나의 메소드 호출로 객체별로 각기 다른 방법으로 동작하게할 수 있다. 1. Parent p = new Parent(); (O) 2. Child c = new Child(); (O) 3. Parent p2 = new Child(); (O) -> 다형성 기술이 적용되어서 가능함 4. Child c2 = new Parent(); (X) -> Child클래스가 Parent클래스를 다룰 수 없음 Parent[] arr = new parent[3]; arr[0] = new Child1(); arr[1] = new Child2(); arr[2]..
[Java] 상속 - IS-A, super, super(), 오버라이딩(Overriding) 상속 - 부모클래스가 가지는 멤버를 자식클래스가 물려받아 자신의 멤버인 것처럼 사용할 수 있도록 만든 기술 - 멤버 외에 타입도 상속이 된다. - 자바는 단일상속만 지원한다. (하나의 클래스만을 부모클래스로 가짐) - 클래스 간의 상속 시에는 extends 키워드를 사용한다. ex) public class Academy extends Company{ }//Company가 부모 클래스 장점 - 새로운 클래스를 작성 시 기존에 작성된 클래스의 재사용 가능 - 클래스간 계층 관계가 형성되어 다형성 문법의 토대가 된다. 단점 - 부모클래스의 기능 변경시 자식클래스의 정상적인 동작 유무 예측이 힘들다. - 자식클래스가 물려받아 사용하는 기능들을 부모클래스에서 변경 시 어려움이 따름 - 부모클래스로부터 물려받은 기..
[Java] 객체배열 객체배열 - 레퍼런스 변수에 대한 배열 - 동일한 타입의 여러 인스턴스들을 배열로 관리할 수 있다. - 반환값은 1개의 값만 반환할 수 있기 때문에 동일한 타입의 여러 인스턴스를 반환해야 하는 경우 객체 배열을 이용한다. 선언 클래스명[ ] 배열명; 클래스명 배열명[ ]; ex) Product[ ] pArr; Product pArr[ ]; 할당 배열명 = new 클래스명[배열크기]; ex) pArr = new Product[3]; 선언과 동시에 할당 클래스명 배열명[ ] = new 클래스명[배열크기]; ex) Product pArr[ ] = new Product[3]; 인덱스를 이용한 초기화 배열명[ i ] = new 클래스명( ); ex) pArr[0] = new Product("TV", 300); 선..