자바 (ref. 자바의정석) 24

String 클래스 - JAVA

String 클래스 실제로 코테에서도 많이 활용되고, 자바의 정석에서도 중요하다고 강조를 하셔서 정리를 하게 되었습니다. String 클래스는 변경 불가능한(immutable) '클래스' 입니다. 클래스이기 때문에 String 은 기본 타입(Primitve Type)이 아닌 참조 타입(Reference Type)입니다. 아래 코드를 보면 String 클래스에는 문자열을 저장하기 위해서 byte[] 배열 변수 value 를 인스턴스 변수로 정의하고 있습니다. public final class String implements java.io.Serializable, Comparable, CharSequence, Constable, ConstantDesc { /** * The value is used for c..

인터페이스(interface) - JAVA

인터페이스(inteface) 란? 인터페이스는 객체를 어떻게 구성해야 하는지 정리한 설계도로 일종의 추상클래스입니다. 하지만 추상클래스보다 추상화의 정도가 높아서 추상클래스와 달리 몸통을 가지지 않습니다. 오직 추상메서드와 상수만을 멤버로 가질 수 있습니다. 인터페이스는 그 자체만으로 사용되기보다 다른 클래스를 작성하는데 도움을 줍니다. 선언방법 interface 인터페이스이름 { public statc final 타입 상수이름 = 값; public abstarct 메서드이름(매개변수목록); } - 모든 멤버변수는 public static final 이어야 하며, 이를 생략할 수 있다. - 모든 메서드는 public abstract 이어야 하며, 이를 생략할 수 있다. 구현방법 인터페이스도 추상클래스 처..

다형성(polymorphsim) - JAVA

다형성이란? 다형성은 객체지향프로그래밍 개념 중요한 특징 중의 하나이다. 이유는 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용되기 때문입니다. 그래서 다형성을 정의해보면 '여러 가지 형태를 가질 수 있는 능력' 을 의미합니다. 자바에서 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로 다형성을 프로그램적으로 구현하였습니다. 부모 타입의 참조변수로 자식클래스의 인스턴스를 참조할 수 있도록 만든 것입니다. 이때 참조 변수가 사용할 수 있는 멤버의 개수는 인스턴스의 멤버 개수보다 같거나 적어야 참조가 가능합니다. 말이 어렵게 느껴지면 부모는 자식을 품을 수 있지만, 자식은 부모를 품을 수 없다 라고 생각하시면 됩니다. class Parent { ... }..

오버라이딩(overriding) + super( ) - JAVA

오버라이딩이란? 부모 클래스로부터 상속받은 메서드의 내용을 재정의(변경) 하는 것을 오버라이딩이라고 한다. 물론 상속받은 메서드를 그대로 사용해도 되지만 자식클래스에서 변경해야 하는 경우가 많다. 이렇게 변경이 이루어지는 경우에 부모메서드를 오버라이딩합니다. *오버라이딩 사용 조건 오버라딩은 메서드를 새로 만들게 아니고 내용만을 새로 작성하는 것입니다. 메서드의 선언부는 부모와 완전히 일치해야 합니다. 그래서 다음과 같은 조건을 만족해야합니다. 1. 자식 클래스의 오버라이딩 하려는 메서드는 부모 클래스의 메서드와 - 이름이 같아야 한다. - 매개변수가 같아야 한다. - 반환타입이 같아야 한다. 2. 접근 제어자는 조상클래스의 메서드보다 좁은 범위로 변경할 수 없다. - ex) 부모클래스 : public ..

상속(inheritance) - JAVA

상속이란? 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것입니다. 상속이라는 말 그대로 누군가에게 자신의 것을 물려주는 것을 의미합니다. 상속을 통해서 클래스를 작성하면 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이하며, 적은 양으로 코드로 작성이 가능해집니다. 이러한 특징은 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여를 합니다. 상속의 사용 방법 - 'extends' ex) class 자식클래스명 extend 부모클래스명 { . . . } , class A extend B { . . . } 두 클래스는 서로 상속 관계에 있다고 하며, 상속해주는 클래스를 부모클래스 상속받는 클래스를 자식 클래스라고 합니다. 위에서 말씀드린 것처럼 코드를 공유하기 때..

생성자 (Constructor) - JAVA

생성자란? 생성자는 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드' 입니다. 인스턴스 변수의 초기화 작업에 주로 사용되며, 인스턴스 생성 시에 반드시 실행 되어야 할 작업을 위해서도 사용됩니다. 연산자 new가 인스턴스를 생성하는 것이지 생성자가 인스턴스를 생성하는 것은 아닙니다. 그러면 생성자는 어떻게 만드는 것일까? 다음과 같은 조건이 있습니다. 1. 생성자의 이름은 클래스의 이름과 같아야 한다. 2. 생성자는 리턴 값이 없다. 추가로 생성자도 오버로딩이 가능하므로 여러 생성자가 존재하게 만들 수 있습니다. public class ConstructorEx { public static void main(String[] args) { Car k3 = new Car(); Car k5 = new C..

오버로딩(overloading) - JAVA

오버로딩이란? 메서드도 변수와 마찬가지로 같은 클래스 내에서 서로 구별이 되어야 합니다. 자바에서 같은 이름을 가진 메서드가 있어도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있습니다. 즉, 한 클래스 내에 하나의 메서드 이름으로 여러 기능을 구현하는 것이 오버로딩 입니다. 하지만 메서드의 이름이 같다고 해서 오버로딩이라 하지는 않고 아래 두 조건을 충족해야 합니다. 1. 메서드 이름이 같아야 한다. 2. 매개변수의 개수 또는 타입이 달라야 한다. * 주의할 점은 해당 조건을 만족 시키지 못하면 컴파일 에러가 나고, 오버로딩은 오직 매개변수에 의해서 구별 되기 때문에 반환 타입은 오버로딩 구현에 영향을 주지 못합니다. 오버로딩의 대표적인 예는 println 메서드입니다..

클래스변수, 인스턴스변수, 지역변수 - JAVA

변수는 선언위치에 따라 종류가 다릅니다. 클래스변수, 인스턴스변수, 지역변수 모두 세 종류가 있습니다. '선언된 따라 종류가 결정되므로 어느 영역에 선언되었는지 파악하는 게 중요합니다. 멤버변수를 제외한 나머지 변수들은 모두 지역변수이며, 멤버변수 중 static 이 붙은 것은 클래스변수, 붙지 않은 것은 인스턴스 변수입니다. 예시) public class varExam { int instanceVariable; //인스턴스변수 static int classVariable; //클래스변수 (static변수, 공유변수) void method(){ int localVariable; //지역변수 } } 인스턴스 변수(instance vairable) - 클래스 영역에 선언 - 클래스 인스턴스를 '생성할 때' ..

배열의 복사 - JAVA

배열을 복사를 하려고 하는데 변수처럼 '=' 연산자로 넣으면 쉽게 되겠네? 라고 생각을 했다가 문제가 생겨서 한참을 찾아 헤맨 기억이 있습니다.. 자바의 정석에서 마침 이 파트가 있어 개인적으로 정리를 포스팅 하게 되었습니다. 우선 배열의 복사는 for문을 이용하여 배열을 복사하는 방법 ( 값을 for문을 돌며 다 넣어주기) , '=' 연산자를 사용하는 방법 ( ex. arr = arr2 ), System.arraycopy( ) 를 이용하여 배열을 복사하는 방법이 있습니다. for문 이용하여 값을 넣거나 System.arraycopy( ) 는 Deep copy(깊은 복사) 로서 '실제값'을 넣어주게 되지만 arr = arr2 와 같은 방식은 Shallow copy(얕은 복사)로 '주소값'을 복사하게 됩니..

for each 문 - JAVA

알고리즘을 풀거나 스프링 할때도 많이 사용되어 따로 정리를 하게 되었습니다. for each 문이라고 흔히 부르는데 '자바의 정석'에서 향상된 for문(enhanced for statement) 이라 명칭하고, JDK1.5 부터 배열과 컬렉션에 저장된 요 소에 접근할 때 기존의 사용하던 방법보다 편하게 처리할 수 있습니다. 사용방법 for( 타입 변수명 : 배열 or 컬렉션) { // 반복할 문장 } 사용 방법은 위와 같은 구조인데 글로만 적으면 어떻게 사용할지 감이 안올 수 있어 기존 for문과 비교하여 보여드리겠습니다. 1. 일반 for문 사용 - 배열 과 ArrayList import java.util.ArrayList; public class forExam { public static void m..