develop/Java (43) 썸네일형 리스트형 StringBuilder, StringBuffer 클래스 java.lang 패키지에 위치하는 클래스 앞서 본 String 클래스에 의하면 String 클래스는 불변 객체이므로 문자열 조작이 빈번할 경우 매번 새로운 공간을 할당하기 때문에 성능이 떨어지거나 메모리가 낭비된다. 이런 문제를 해결하기 위해 버퍼(Buffer) 공간을 할당하여 해당 버퍼에 문자열을 저장하고 조작 시 버퍼 데이터를 직접 수정하므로 문자열 조작이 빈번할 경우 String 클래스에 비해서 성능이 향상 된다. 두 클래스의 메서드는 거의 동일하나 사용 목적이 좀 다름. (멀티쓰레딩 환경에서의 성능 향상 관련 차이) String 클래스와 달리 리터럴을 직접 할당할 수 없으며 반드시 객체 생성(new)를 통해 문자열을 저장한다. String 클래스와 상속 관계가 없으므로 기본 변환은 불가능하며 생.. String 클래스 String 클래스에 문자열 저장하는 방법 2가지 1. 일반 클래스와 동일하게 객체 생성 시 문자열을 전달하는 방법 ex_ String str = new String("홍길동"); 동일한 문자열이라도 new 키워드를 사용하게 되면 새로운 힙 공간에 객체가 생성되므로 서로 다른 주소값을 감짐. 2. 객체 생성 없이 문자열 리터럴 바로 전달 ex_ String str = "홍길동"; => 상수 풀에 홍길동 문자열이 없을 경우 새로 저장 후 주소값 리턴함 String str2 = "홍길동"; 앞서 저장한 홍길동 문자열이 상수풀에 이미 존재하므로 str과 동일한 주소값을 리턴한다. 그래서 str 과 str2는 주소값도 같고 문자열도 같다. String 클래스 - java.lang 패키지에 위치하는 문자열 관리 .. Object 클래스 모든 클래스의 슈퍼클래스 모든 클래스의 부모 - extends 키워드로 상속을 표현하지 않으며, 묵시적 상속 적용됨. java.lang 패키지에 포함되므로 별도의 import과정이 필요하지 않음. object 클래스의 모든 메서드는 다른 클래스에서 접근이 가능하며 그대로 사용하거나 오버라이딩해서 사용 가능함. 1. equals 메서드 - 두 객체가 같은지 비교하는 메서드(동등비교 (==)와 동일한 연산을 수행함) => 두 객체의 주소값 비교해서 같으면 true, 다르면 false 리턴함. - 실제 '두 객체가 같다'라는 의미는 두 객체의 주소값이 아닌 객체가 가지는 속성값(멤버변수)가 같다는 의미로 사용. 따라서, 사용자가 정의하는 클래스에 equals()메서드를 오버라이딩하여 각 객체의 멤버변수를 비교.. 인터페이스(Interface) 인터페이스는 장착하는 것. [접근제한자] interface 인터페이스명 { //상수 //추상메서드 } 1. 인터페이스는 상수와 추상메서드만 가질 수 있다. -상수(public static final) => 한 번 저장된 값은 변경 불가하며, 인터페이스명으로 접근 가능. -추상메서드(abstract method) => 상속받는 서브클래스에서 반드시 구현해야 함 => 상수나 추상메서드 외의 생성자나 일반 변수, 메서드는 가질 수 없음. 2. 서브클래스에서 정의 시 extends가 아닌 implement(구현) 키워드를 사용해야 함. => 클래스에서는 다중 상속이 불가능하지만 인터페이스는 두개 이상을 상속(구현)받을 수 있다. => 인터페이스 끼리 상속은 extends 키워드 사용하며, 다중 상속 가능 => .. 객체지향 다형성 하.. 이거 놓치면 큰일 객체지향의 종류중 다형성 다형성 = 하나의 참조변수로 여러 인스턴스를 참조하는 것. = 인스턴스를 다양한 형태로 변환하는 것 = 인스턴스를 업캐스팅하여 슈퍼클래스 타입으로 서브클래스 멤버 접근 1) 슈퍼클래스 타입 참조변수 선언을 통해 각각 다른 서브클래스의 인스턴스를 참조하는 형태로 사용하거나 (서브클래스의 인스턴스를 슈퍼클래스로 업캐스팅을 통해 참조변수를 통일함) 2)메서드 파라미터 선언 시 슈퍼클래스 타입 참조변수 선언을 통해 메서드 호출하여 각각 다른 서브클래스의 인스턴스를 전달하거나 3)슈퍼클래스타입 배열 생성을 통해 각각 다른 서브클래스의 인스턴스를 배열에 저장하는 방법을 사용가능함. class Shape{ //공통적으로 도형을 그리는 shape 클래스 생성 publi.. 객체지향 추상화 으으윽 추상 abstract -추상메서드 기본적으로 메서드는 [접근제한자] 리턴할명 메서드명(){} 구조로 이뤄져있는데 추상메서드는 [접근제한자] abstract 리턴타입 메서드명(); 로 끝난다. 접근제한자와 리턴타입 사이에 abstract를 넣고 마지막을 세미콜론으로 마무리함. { 대신 ;로 메서드를 마무리하면서 구현부가 사라지게 되는데 이렇게 되면 외부에서 호출이 안되는 메서드다. => 즉, 서브클래스의 오버라이딩을 목적으로 정의하는 메서드 서브클래스들의 '모양은 동일하고 수행할 코드가 다른' 메서드들을 추상클래스 내의 추상메서드로 통일해 정의 (교실 청소라는 슈퍼클래스의 추상적 개념을 청소(바닥,칠판,창문)라는 서브클래스들로 오버라이딩) 서브클래스에서 상속받아 오버라이딩 하도록 강제성을 부여함. .. final 키워드, 상수 - final 마지막(최종)이라는 의미를 부여하는 키워드이며, 변수와 메서드, 클래스에 사용 가능하다. 사용처에 따른 설명 1. final 변수 - final이 변수에 붙게되면 변수 값 변경 금지 => 저장되어 있는 값만 사용 가능 = 상수 - 자신의 클래스 내에서도 값 변경 불가 - final이 붙은 변수 선언 시 일반 변수와 구분하기 위해 대문자로 이름 작성(관례) 1-1) 변수에 final 키워드를 사용할 경우 class FinalVariable{ final int NUM1 = 10; //final 상수 int num2 = 20; public void setNum(){ NUM1 = 99; (x) num2 = 100; (o) } } 1-2) final 상수 초기화 방법에 따른 차이점 class Fin.. instanceof 연산자,동적바인딩 instanceof 연산자 클래스의 관계 1. Has - A 관계 (포함 관계) => A has a B = A 가 B를 가지고 있다 = B가 A에 포함되어 있다. => 일반적인 클래스의 관계이며, 특정 클래스 내에 다른 클래스를 포함시켜 사용하는 관계 2. Is - A 관계 (상속 관계) => A is a B = A는 B이다 = A는 B를 상속받은 관계이다. => class A extends B{} 앞에서 레퍼런스 형변환을 할 때 기준은 부모-자식간 상속관계여야 형변환이 일어난다. 그걸 판별하기 위한 연산자로 instanceof 연산자를 사용한다. ==> 좌변의 객체가 우변의 클래스타입과 상속관계인지 판별하는 연산자이며 if문에 결합하여 판별하는데 사용되며 판별 결과가 true면 형변환이 가능한 관계다 .. 이전 1 2 3 4 5 6 다음