IT/개발(자바, 서블릿, 스프링 등)
-
[Java] 상속 개념과 사용법 그리고 super() 문으로 부모 인스턴스 초기화하는 방법IT/개발(자바, 서블릿, 스프링 등) 2019. 12. 9. 22:19
클래스에서 필드와 메서드의 중복을 제거하는 방법? 상속을 이용한다. 중복 제거 조건 1. 클래스 간의 공통 멤버를 가지는가? 중복 제거 조건 2. is a 관계가 성립하는가? 위 두가지 조건에 만족하면, 각 클래스의 중복을 제거할 수 있다. (예시) 제거 조건 1. 사람이라는 공통점 존재. 제거 조건 2. is a 관계 성립. Employee is a Person, Professor is a Person, Student is a Person. 위 두가지 조건 만족하기 때문에 아래의 상속관계가 가능하다. Employee extends Person Professor extends Person Student extends Person Employee, Professor, Student 인스턴스가 생성될 때 부..
-
[Java] this 키워드로 생성자 호출IT/개발(자바, 서블릿, 스프링 등) 2019. 12. 9. 18:10
생성자 인스턴스를 초기화하는 역할. 개발자가 하나 이상의 생성자를 만들지 않으면, 컴파일러가 기본 생성자를 만들어준다. 기본 생성자의 접근 제한자는 클래스의 접근 제한자를 따른다. this 키워드 자신을 가리키는 키워드 this. this는 현재 실행중인 인스턴스의 주솟값을 나타낸다. 생성자를 통해서 인스턴스를 초기화할 때 아래와 같이 두가지 방법으로 할 수 있다. 첫번째 방법에선 중복이 많이 보인다. 객체지향 프로그램은 최대한 중복된 코드를 제거하고 코드를 재사용하는 방법으로 구현한다. 소스코드를 더 쉽게 이해할 수 있고 쉽게 수정할 수 있도록 변경하는 것을 '리팩토링'이라고 한다. 중복을 제거하기 위해 두번째 코드에선 리팩토링을 진행했다. public Class User{ priavate String..
-
[Java] 정적 멤버 개념 (static 키워드 개념)IT/개발(자바, 서블릿, 스프링 등) 2019. 12. 9. 17:05
클래스의 모든 인스턴스가 공유하는 멤버를 정적 멤버라고 한다. 특정 인스턴스만 사용하는 것이 아니라 해당 클래스로 생성한 모든 인스턴스가 공유하는 멤버다. static 키워드를 이용한다. 프로그램이 시작될 때 메모리에 딱 한 번 코드 영역에 할당되며 프로그램이 종료될 때까지 유지된다. 이 키워드는 변수나 메서드를 선언할 때 특정 코드 블록 앞에 선언할 수 있다. 클래스 필드(정적 필드) 구분 메모리 할당 시점 메모리 할당 위치 메모리 해제 시점 인스턴스 필드 인스턴시 생성 시 힙 메모리 인스턴스 소멸 시 클래스 필드 프로그램 시작 시 코드 메모리(메서드 영역) 프로그램 종료 시 class Count{ public static int totalCount; int count; } public class Co..
-
[Java] 자바의 메모리 구조 정리IT/개발(자바, 서블릿, 스프링 등) 2019. 12. 7. 18:35
자바 프로그램은 JVM에 의해 실행된다. JVM은 자바 프로그램을 실행하면서 필요한 데이터를 메모리에 생성한 후에 사용한다. 이 때 메모리를 세가지 영역으로 구분하여 사용한다. Code 영역 / Heap 영역 / Stack 영역. 코드 영역(메서드 영역) 클래스 파일을 실행하면 JVM의 클래스 로더가 클래스 파일을 실행하기 위해 필요한 클래스 파일을 메모리에 올린다. 자바 소스 파일에 정의한 클래스에 관한 정보와 코드를 코드 영역에 만들어준다. 힙 영역 클래스를 설계하고 이를 사용하려면 메모리에 해당 클래스의 인스턴스를 생성해야 한다. new 명령문으로 인스턴스를 생성하면 메모리의 힙 영역에 생성된다. 그런데 클래스의 메서드는 실행 시작 시점에 클래스 로더에 의해 코드 영역에 만들어진다. 따라서 실제로 ..
-
[Java] 클래스 객체 인스턴스 용어 정리IT/개발(자바, 서블릿, 스프링 등) 2019. 12. 7. 18:02
클래스에 설계한 내용대로 메모리에 객체를 생성하는 명령문은 new이다. 이 명령어는 클래스의 필드와 메서드를 사용할 수 있도록 메모리에 준비해준다. 이처럼 클래스를 이용해 객체를 생성했을 때 각각의 독립적인 객체를 '인스턴스(instance)'라고 한다. 그럼 클래스와 객체 그리고 인스턴스의 차이는 무엇일까? 객체(object)는 속성과 행동으로 구성되어 있는 하나의 단위이다. 궁극적인 실체이다. 클래스(class)는 객체를 만드는 설계도이다. 어느 무리의 객체를 특징 짓는 데에 공통적으로 갖춘 모양을 뽑아서 하나의 틀을 만든 것이다. 이런 과정을 '추상화'라고 한다. 인스턴스(instance)는 클래스를 new 명령문으로 메모리에 생성한 객체이다. 설계도를 통해 독립적인 객체를 만든 것이다. 즉, 우리..
-
[Java] 가변 길이 인자 개념과 사용법IT/개발(자바, 서블릿, 스프링 등) 2019. 12. 7. 17:31
같은 타입의 데이터를 전달받는 메서드라면 꼭 오버로딩 사용하지 않고도 인자의 개수를 다르게 호출할 수 있는 방법이 있다. JDK5부터 추가된 가변 길이 인자를 사용하면 된다. 가변 길이 인자는 메서드 호출시 자동으로 배열이 생성되고 배열에 인자값들을 저장한 후에 배열로 처리하는 것이다. 자동으로 생성되는 배열의 타입은 선언된 타입으로 지정되며 배열의 크기는 인자의 개수와 동일하다. 문법 [메서드 이름]([데이터 타입]...[변수 이름]){} 예시 void test(int... v){ System.out.println(v.length); } 메서드가 실행이 되면 자동으로 int[] 배열을 생성해 전달받은 인자값(들)을 저장하고, v 변수가 이 배열을 참조한다. 메서드 내에서 v 변수를 통해 전달받은 인자값..
-
[Java] 메서드 오버로딩IT/개발(자바, 서블릿, 스프링 등) 2019. 12. 7. 17:14
같은 이름의 메서드 정의한다. 매개변수의 개수와 타입은 다르게 정의한다. 매개변수 개수는 인자값의 개수와 반드시 일치해야 한다. 매개변수 타입은 인자값의 타입과 일치해야 한다. 단, 타입이 다르다면 인자값의 타입보다 큰 타입으로 선언된 매개변수면 된다. (인자와 매개변수의 차이점은 이곳에 정의되어 있다.) 우리가 흔히 사용하는 System.out.println() 여기에서 println() 메서드도 오버로딩 되어 있다. 때문에 우리가 String, int, long 할 것 없이 호출하여 사용할 수 있는 것이다. void println(boolean b) void println(char b) void println(char[] b) void println(int b) void println(Object b..
-
[Java] 객체지향 프로그래밍 개념 / 객체 모델링과 클래스 다이어그램 개념IT/개발(자바, 서블릿, 스프링 등) 2019. 12. 7. 16:07
객체지향 프로그래밍 C는 절차적 프로그래밍 언어이고 자바는 객체지향 프로그래밍 언어이다. 절차적 프로그래밍은 프로그램을 실행하는데 필요한 모든 데이터를 미리 준비하고, 준비된 데이터를 사용하여 순서대로 처리해 나가는 방식이다. 객체지향 프로그래밍은 작업 순서를 중요하게 생각하지 않는다. 기능별로 작업을 분리한 후 필요한 기능이 있다면 가져다 사용하는 방식이다. 객체지향 프로그래밍의 주인공은 객체이다! 객체는 속성과 동작으로 이루어져 있다.(객체 = 속성 + 동작) 객체지향 프로그램을 구현하기 위해 객체를 선정하고 객체의 속성과 동작을 정의하는 것을 객체 모델링이라고 한다. 객체를 모델링하면 해당 객체의 특성을 쉽게 알 수 있다. 객체를 만들기 위해 클래스가 필요하다. 클래스는 객체를 만드는 틀이다. 객체..