본문 바로가기

Study/Java

(10)
[Java]예외(Exception) 처리 오류(Error)가 프로그램 자체 또는 JVM 등의 원인으로 발생하는 문제를 말한다면, 예외(Exception)는 사용자의 조작이나 개발자의 코딩 실수로 발생된 문제를 말한다. 오류는 개발자가 고칠 수 없지만 예외는 대처가 가능하기 때문에, 코드를 작성할 때부터 예외 처리를 미리 해 놓는다. 오류나 예외가 발생한 경우 프로그램은 강제로 종료되는데, 예외 처리를 하면 정상적으로 프로그램 종료를 할 수 있다. 예외는 컴파일 시점에 체크 가능한 Compile Checked Exception, 실행을 해야 체크 가능한 Compile Unchecked Exception으로 분류된다. 전자는 처리가 되어야만 코드 실행이 가능하기 때문에 예외 처리에 강제성을 띤다. 여기서 처리를 하지 않으면 컴파일 에러가 발생한다...
[Java]인터페이스(Interface)와 중첩 클래스 인터페이스를 설명하기에 앞서 final 키워드를 얘기하자면, final 키워드가 붙은 멤버는 변경이 불가능해진다. 필드는 리터럴 데이터(상수)로, 메서드는 오버라이딩 불가 상태로, 클래스는 상속 불가 상태로 바뀐다. 그리고 final 키워드를 변수 앞에 붙여 상수로 만들 수 있다. 이때 static을 함께 붙여서 상수형 변수라고 부르고, 역시 값을 변경할 수 없다. (static final 변수명) 참고로 상수명은 주로 대문자와 언더스코어(_)로만 작성한다. 인터페이스(Interface) 인터페이스는 객체와 개발자를 연결시켜주는 중간다리 역할을 한다. 클래스와 비슷하지만 클래스가 아니며, 멤버로 상수(상수형 변수)와 추상메서드만 가질 수 있다. 추상메서드가 포함되어 있고, 인터페이스 타입으로 인스턴스 생..
[Java]추상화(abstract)와 static, 싱글톤 추상 클래스와 추상 메서드 추상클래스(abstract class)는 말 그대로 추상적인 클래스로, 인스턴스 생성이 불가능한 클래스다. 하지만 다형성은 적용되기 때문에, 추상클래스 멤버를 여러 서브클래스에 상속시켜 공통 멤버로 쓸 때 사용한다. 추상클래스는 기존의 멤버들 외에도 추상메서드(abstract method)를 가질 수 있다. 물론 추상메서드가 없을 수도 있는데, 그런 경우에는 일반클래스와 같아서 추상클래스의 의미가 없다. 추상메서드는 구현부 없이 선언부만 있는 메서드이며, 추상클래스 내에서만 작성할 수 있다. 구현부는 추상클래스를 상속받는 서브클래스에서 오버라이딩하여 작성해야 한다. 추상메서드는 구현되어야만 사용할 수 있는 강제성을 띄기 때문에, 서브클래스에서 구현을 하지 않으면 그 서브클래스도..
[Java]상속과 참조 형 변환, 다형성 상속(Inheritance) 객체 지향 프로그래밍(OOP)의 특징 중 상속(Inheritance)은 기존 클래스의 멤버들을 다른 클래스가 물려받아 사용할 수 있게 하는 것이다. 단순히 한 클래스에서 다른 클래스의 인스턴스를 생성하여 사용하는 것은 has-a 관계이고, 상속을 받게 되면 is-a 관계가 된다. 상위 클래스는 슈퍼 클래스나 부모 클래스로, 하위 클래스는 서브 클래스나 자식 클래스로도 불린다. 서브 클래스는 하나의 슈퍼 클래스만(단일 상속) 가질 수 있지만 슈퍼 클래스는 여러 서브 클래스를 가질 수 있으며, 서브 클래스는 슈퍼 클래스 내에서 private이 붙은 필드, 메서드와 생성자를 제외한 모든 멤버에 접근 가능하다. 만약 아무 클래스도 상속받지 않으면 자동으로 최상위 클래스(Object)..
[Java]생성자와 패키지, 접근제한자 생성자(Constructor) java에서 생성자는 메서드와 매우 비슷하게 생겼지만 역할은 다르다. 주로 필드(멤버변수)를 초기화하는 데 사용되며, 생성자의 이름은 클래스명과 같아야 한다. 작성은 메서드 작성법에서 리턴타입 부분이 완전히 빠져있는, 접근제한자 생성자(매개변수) { 코드 } 형식으로 이루어진다. 클래스를 처음 정의할 때 생성자를 따로 만들지 않으면 컴파일러가 자동으로 기본 생성자(매개변수X)를 만들어주지만 매개변수 유무와 관계없이 생성자를 따로 정의하면, 기본 생성자는 만들어지지 않는다. main 클래스에서 인스턴스 생성 시 작성하는, 클래스명 변수명 = new 클래스명(); 에서 마지막 부분이 생성자이기 때문에, 생성자는 인스턴스를 호출하면서 무조건 한 번 호출되고, 한 번만 호출된다. ..
[Java]OOP - 클래스와 메서드 객체 지향 프로그래밍(OOP) java의 가장 큰 특징은 객체 지향 프로그래밍(Object-Oriented-Programming) 언어라는 점이다. 절차 지향 프로그래밍(Procedure-Oriented-Programming)과 다르게 OOP는 여러 객체를 조합해서 프로그램을 만드는 기법으로, 객체가 중심이 된다. 처리를 객체 단위로 하게 되면 코드 재사용성이 높고 유지보수가 쉬워, 대규모 프로젝트에 적합하다. 대신 상대적으로 처리가 느리고, 객체가 늘어날수록 용량도 늘어나며 설계부터 시간이 걸린다는 단점이 있다. OOP의 특징으로는 A(Abstraction;추상화), P(Polymorphism;다형성), I(Inheritance;상속성), E(Encapsulation;캡슐화)가 있는데, 이에 대해서는 ..
[Java]배열 먼저 JVM(자바 가상 머신)에는 method(메서드) 영역, heap(힙) 영역, stack(스택) 영역이 있다. method 영역에는 클래스에 대한 정보가, heap 영역에는 참조 데이터 타입의 데이터가, stack 영역은 메서드 호출 시 관계되는 변수가 저장된다. 이 stack 영역에서는 메서드가 호출될 때 메모리 공간을 제공했다가 메서드가 종료되면 회수한다. 그리고 배열(Array)은 참조 타입이기 때문에 heap 영역 메모리로 저장된다. 배열 java에서 배열은 데이터 타입이 상관없는 JS와 달리, 동일한 데이터 타입 변수들의 집합체다. 메모리 상에서 연속된 공간에 생성되며, 생성 후에는 배열 크기를 바꿀 수 없다. 인덱스 번호는 똑같이 0에서 시작하지만, JS와 다르게 없는 인덱스 호출 시에는..
[Java]연산자와 제어문 연산자 Java와 JavaScript는 비슷한 부분이 꽤 있어서, JS에서 다뤘던 연산자들이 Java에도 거의 똑같이 있다. 산술, 대입(복합 대입), 증감, 비교, 논리, 삼항 조건 연산자가 있다는 점은 같으면서 세부적으로 조금씩 다르긴 하다. 산술 연산자(+, -, *, /, %) 중 %가 나눗셈 결과에서 나머지를 뜻하는 건 JS와 같지만, Java에서 /는 나눗셈 결과 중 몫만을 말한다. 즉, 실수가 아니라 정수가 결과로 도출된다. 더불어 Java의 산술 연산 시에는 자동 형 변환이 일어나기 때문에, int 이하의 타입들은 int로, 그 외에는 큰 타입 쪽으로 변환된다. 대입 연산자(=)와 복합 대입 연산자(+=, -=, *=, /=, %=)는 우변 값을 좌변에 계산하여 대입한다는 의미로, JS에서..