본문 바로가기

Java35

자바 패키지와 접근 제한자 프로젝트를 개발하다 보면 적게는 수십 개, 많게는 수백 개의 클래스를 작성해야한다. 클래스를 체계적으로 관리하지 않으면 클래스 간의 관계가 뒤엉켜서 복잡하고 난해한 프로그램이 되어 결국 유지 보수가 어려워진다. 자바에서는 클래스를 체계적으로 관리하기 위해 패키지를 사용한다. 패키지는 물리적인 형태는 파일 시스템의 폴더이다. 패키지는 단순히 파일 시스템의 폴더 기능만 하는 것이 아니라 클래스의 일부분으로, 클래스를 유일하게 만들어주는 식별자 역할을 한다. 클래스는 이름이 동일하더라도 패키지가 다르면 다른 클래스로 인식 된다. 클래스의 전체 이름은 '패키지 이름 + 클래스 이름' 인데 패키지가 상 • 하위로 구분되어 있다면 도트(.)를 사용해서 아래와 같이 표현한다. 상위패키지.하위패키지.클래스 패키지 선언.. 2023. 6. 26.
자바 인스턴스 멤버와 정적 멤버 클래스는 객체의 설계도이다. 클래스 멤버(필드, 메소드)는 당연히 객체에도 포함되어 있어야 한다. 하지만 이것이 과연 효율적인지를 따져봐야 한다. 클래스로부터 객체(인스턴스)는 하나가 아니라 여러 개가 만들어질 수 있다. 이 경우 클래스 멤버들은 객체마다 모두 가지고 있을 필요가 있는지부터 따져봐야 한다. 객체마다 필드값이 달라져야 한다면 해당 필드는 객체마다 가지고 있는 것이 맞다. 하지만 객체의 필드값이 모두 같아야 한다면 이 필드를 객체마다 가지고 있을 필요는 없다. 만약 객체가 갖고 있다면 메모리 낭비가 되며, 모든 객체의 필드값을 같게 맞추는 추가적인 작업이 필요할 수 있다. 오히려 이런 필드는 한 곳에 위치시키고 객체들이 공유하는 것이 좋을 수도 있다. 자바는 이런 경우를 위해 클래스 멤버를 .. 2023. 6. 23.
자바 메소드 메소드 선언은 선언부와 실행 블록으로 구성된다. 메소드 선언부를 메소드 시그너처 라고 하며, 선언부와 실행 블록에는 다음 요소를 포함해야한다. 리턴 타입 : 메소드가 리턴하는 결과의 타입을 표시한다. 메소드 이름 : 메소드의 기능이 드러나도록 식별자 규칙에 맞게 이름을 지어준다. 매개 변수 선언 : 메소드를 실행할 때 필요한 데이터를 받기 위한 변수를 선언한다. 메소드 실행 블록 : 실행할 코드를 작성한다. 리턴타입 메소드이름 ([매개 변수 선언, ...]) { 2023. 6. 23.
자바 생성자 생성자는 new 연산자로 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당한다. 객체 초기화란 필드를 초기화하거나 메소드를 호출해서 객체를 사용할 준비를 하는 것을 말한다. 생성자를 실행하지 않고는 클래스로부터 객체를 만들 수 없다. new 연산자에 의해 생성자가 성공적으로 실행되면 힙 영역에 객체가 생성되고 객체의 번지가 리턴된다. 리턴된 객체의 번지는 클래스 변수에 저장된다. 기본생성자 모든 클래스는 생성자가 반드시 존재하며, 생성자를 하나 이상 가질 수 있다. 우리가 클래스 내부에 생성자 선언을 생략했다면 컴파일러는 아래와 같이 중괄호 블록 내용이 비어있는 기본 생성자를 바이트 코드에 자동 추가한다. [public] 클래스(){ } 클래스가 public class 로 선언디면 기본 생성자.. 2023. 6. 22.
자바 필드 필드는 객체의 고유 데이터, 객체가 가져야 할 부품, 객체의 현재 상태 데이터를 저장하는 곳이다. 자동차 객체를 예로 들면 제작회사, 모델, 색깔, 최고 속도는 고유 데이터에 해당되고 현재속도, 엔진 회전 수는 상태 데이터에 해당한다. 그리고 차체, 엔진, 타이어는 부품에 해당한다. 따라서 자동차 클래스를 설계할 때 이 정보들은 필드로 선언되어 있어야 한다. 필드 선언 필드 선언은 크랠스 중괄호 블록 어디서든 존재할 수 있다. 생성자 선언과 메소드 선언의 앞과 뒤 어떤 곳에서도 필드 선언이 가능하다. 하지만 생성자와 메소드 중괄호 블록 내부에는 선언될 수 없다. 생성자와 메소드 중괄호 블록 내부에 선언된 것은 모두 로컬 변수가 된다. 필드 선언은 변수의 선언 형태와 비슷하다. 그래서 일부 사람들은 클래스.. 2023. 6. 22.
자바 클래스 객체 지향 프로그래밍 객체란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있으면서 식별 가능한 것을 말한다. 예를 들어, 물리적으로 존재하는 자동차, 자전거, 책, 사람과 추상적인 학과, 강의, 주문 등이 모두 객체가 될 수 있다. 객체는 속성과 동작으로 구성되어 있다. 예를 들어 사람은 이름, 나이 등의 속성과 웃다, 걷다 등의 동작이 있고, 자동차는 색깔, 모델명 등의 속성과 달린다, 멈춘다 등의 동작이 있다.자바는 이 속성과 동작을 각각 필드와 메소드 라고 부른다. 현실 세계의 객체를 소프트웨어 객체로 설계하는 것을 객체 모델링 이라고 한다. 객체 모델링은 현실 세께 객체의 속성과 동작을 추려내어 소프트웨어 객체의 필드와 메소드로 정의하는 과정이라고 볼 수 있다... 2023. 6. 22.
자바 열거 타입 데이터 중 몇 가지로 한정된 값만을 갖는 경우가 있다. 예를 들어 요일에 대한 데이터는 월, 화, 수, 목, 금, 토, 일 이라는 7개의 값만 갖고, 계절에 대한 데이터는 봄, 여름, 가을, 겨울 이라는 4개의 값만 가진다. 이와 같이 한정된 값만 갖는 타입을 열거 타입이라고 한다. 열거 타입은 한정된 값인 열거 상수 중에서 하나의 상수를 저장하는 타입이다. 아래는 월, 화, 수, 목, 금, 토, 일 이라는 7개의 값을 갖는 요일 데이터의 열거 타입 week 를 선언한 것이다. public enum Week { 2023. 6. 22.
자바 배열 배열은 같은 타입의 데이터를 연속된 공간에 나열하고, 각 데이터에 인덱스를 부여하는 자료구조이다. 예를 들어 학생 30명의 성적 평균을 구한다는 상황이 발생했을 때 배열을 사용하지 않는다면 학생의 성적을 하나하나 변수로 선언한 후 변수들을 하나하나 다 더해서 변수의 갯수만큼 나눠야 하는 비효율적인 코드를 작성해야 한다. 하지만 배열을 이용해서 사용 한다면 for 문을 이용해서 쉽게 계산을 할 수 있다. 배열은 다음과 같은 특징을 가진다. 배열은 같은 타입의 데이터만 저장할 수 있다. int 배열은 int 값만 저장 가능하고, String 배열은 문자열만 저장한다. 또한 선언과 동시에 값을 저장할 수 있는 타입이 결전된다. 만약 다른 타입의 값을 저장하려고 하면 타입 불일치 컴파일 에러가 발생한다. 한 번.. 2023. 6. 22.
자바 참조 타입 자바의 타입은 크게 기본타입과 참조타입 으로 분류한다. 기본 타입은 정수, 실수, 문자, 논리 리터럴을 저장하는 타입을 말한다. 참조 타입은 객체의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스를 말한다. 기본 타입과 참조 타입 기본 타입으로 선언된 변수와 참조 타입으로 선언된 변수의 차이점은 저장되는 값이다. 기본 타입은 byte, char, short, int, long, float, double, boolean 변수는 실제 값을 변수 안에 저장하지만, 참조 타입인 배열, 열거, 클래스, 인터페이스 변수는 메모리의 번지를 변수 안에 저장한다. 번지를 통해 객체를 참조한다는 뜻에서 참조 타입 이라고 부른다. 예를 들어 int 타입과 double 타입으로 선언된 변수 age, price가 있.. 2023. 6. 21.