Java 기본 개념

it초보·2021년 11월 30일
0

자바의 기초 문법
변수와 자료형

  • 변수는 프로그램에서 데이터를 저장하는 공간을 말하고, 자료형은 변수에 저장할 데이터의 유형을 말한다.

  • 자바에서 변수 선언은 명시적으로 데이터형을 지정하게 되어 있으며, 선언된 데이터 유형과 대입된 데이터값에 차이가 있을 때 오류나 오버플로, 언더플로가 발생하기에 주의해야한다.

  • 자바의 변수는 인스턴스 변수, 클래스 변수, 지역 변수, 파라미터로 구분한다.

  • 자바에서 지원하는 기본 자료형 Primitive Data Types 는 정수형, 실수형, 논리형 으로 나눈다.

분기문

  • 분기문은 프로그램을 개발할 때 논리적 수행을 지원하는 명령어

  • 자바에서 지원하는 분기문은 if 문과 switch 문이 있다.

반복문

  • 반복문은 순환문이라고도 하며, 분기문과 함께 프로그램에서 기본적인 로직을 구성하는 기본 문법 중 한가지이다.

  • 패턴이 일정하여 반복적으로 일을 수행할 때 순환문을 사용하면 쉽게 결과를 확인할 수 있다. 자바 언어에서 지원하는 순환문으로는 for 문과 while 문이 있다.

  • for 문은 시작과 조건, 증감식 등으로 구성된다. while 문은 조건을 충족하는 동안 계속 수행하는 반복문으로 경우에 따라 do ~ while 문의 형태로도 사용이 가능하다.

객체지향 프로그래밍 언어

  • 객체지향이란 현실 세계의 개체 모델을 바탕으로 프로그램을 구조화하고 개발하는 프로그래밍 기법을 말한다.

  • 함수와 메서드(Method)가 비슷하며, 기본적으로는 객체 간의 메시지 교환을 이용한 프로그래밍 모델이다.

  • 상속, 추상화, 캡슐화 등 특징을 활용한 구조적이고 재활용 가능한 모듈화로 생산성과 유지보수 효율성을 높인 프로그래밍 언어이다.

객체

  • 객체를 뜻하는 Object는 기본적으로는 사물 이라고 해석된다. 사물은 우리 눈에 보이는 모든것을 말하며, 그 사물이 가진 속성 Attribute 과 행위 Behavior 로 설명할 수 있는 대상이다.

클래스와 인스턴스

  • 속성이 같은 객체들을 대표할 수 있는 대상을 클래스 라고 한다. 예를 들어 소나무는 클래스가 되고, 주변에 보이는 각 소나무들은 모두 소나무 클래스의 인스턴스(객체)가 되는 것이다.

  • 클래스는 객체를 정의하는 틀이며, 필드(속성)와 메서드(행위)로 구성한다. 클래스는 추상화를 이용하여 슈퍼클래스(상위 클래스, 부모클래스)와 서브 클래스(하위 클래스, 자식 클래스) 로 구분된다.

  • 인스턴스는 클래스에서 생성한 객체로, 고유한 상태가 있다. 동일한 클래스에서 생성된 객체라 할지라도 필드 값과 메서드의 내용은 다를 수 있다.

상속

  • 상속은 어떤 클래스에서 좀 더 내용이 구체적인 새로운 클래스가 필요할 때 기존 클래스를 물려받아 새로운 부분만 추가하거나 수정하려고 만든 개념이다.

  • 상속을 이용하면 슈퍼 클래스의 기본 구성 요소(필드, 메서드)를 물려받으며(상속), 자신만의 필드나 메서드를 추가하여 구체화하는 것이 가능하다. 물론 물려받은 메서드의 내용을 수정하는 것도 가능하다.

  • 상속은 클래스를 선언할 때 extends 키워드를 사용하여 정의한다.

객체지향 프로그래밍의 주요 특징

  • 캡슐화: 생성한 객체를 어떤 메서드와 필드로 어떻게 일을 수행할지 외부에 숨기는 특성을 말한다.

  • 상속: 클래스는 추상화된 슈퍼 클래스와 구체화된 서브 클래스로 구성한다. 그리고 슈퍼 클래스와 서브 클래스의 관계를 상속이라고 한다. 자바에서는 다른 객체지향 언어와 달리 다중 상속을 지원하지 않는다.

  • 다향성: 클래스의 상속 관계를 이용하여 슈퍼 클래스가 같은 서버 클래스들이 동일한 요청을 다르게 처리할 수 있는 특징을 말하며 실제 프로그램에서는 메서드를 오버라이딩(재정의) 하여 구현한다.

자바 클래스의 기본 구조

  • 패키지: 자바 클래스들을 같은 성격으로 묶어서 관리하는 일종의 디렉터리 개념이다. 역도메인 방식으로 이름을 부여한다.

  • 클래스: 자바 프로그램은 기본적으로 클래스를 만드는 것에서부터 시작한다. 클래스는 자바 프로그램의 기본 단위이며, 프로그램 실행을 위한 main() 메서드를 반드시 클래스에 포함해야 하는 것은 아니다.

  • 인스턴스: 객체지향의 개념에 따라 클래스는 바로 사용할 수 없고, 인스턴스로 사용해야 한다. main() 메서드에서는 클래스의 인스턴스를 만들고, 인스턴스를 이용하여 메서드 호출 등 필요한 작업을 처리한다.

  • 참조 변수: 자바 클래스의 인스턴스 참조를 위한 변수이다. 구조는 일반적인 변수와 유사 하지만, 참조 변수에는 데이터가 없고 클래스 인스턴스를 가리킨다.

  • 생성자: 클래스를 생성할 때 제일 먼저 실행되는 특수한 형태의 메서드로, 리턴값이 없으면 메서드 이름은 반드시 클래스 이름과 일치해야 한다.

  1. 리턴값이 없다 void를 비롯한 리턴값의 데이터형을 입력하면 안된다.
  2. 파라미터가 있는 다른 여러 생성자를 정의할 수 있다(메서드 오버로딩)
  3. 파라미터가 없는 기본 생성자는 특별히 생성자에서 처리해야 하는 일이 없다면 굳이 프로그램에서 구현할 필요가 없다. 다만 생성자를 여러 개 정의 할 때는 반드시 기본 생성자를 명시해야 기본 생성자로 객체 생성이 가능하다.

일반 한정자의 종류

  • static: 클래스 메서드와 클래스 변수를 선언하는 데 사용한다. static은 자바의 정적 영역에 할당되는 리소스를 선언하는데 사용하며, 동일 가상머신상에서 실행 중인 모든 클래스에서 공유한다. 인스턴스를 생성하지 않고도 클래스의 메서드나 멤버에 접근할 수 있다.

  • final: 더 이상 변경할 수 없도록 선언하는 한정자. 클래스에 사용할 떄는 서브 클래스를 만들 수 없고, 메서드에 사용할 때는 오버라이딩을 할 수 없다. 변수에 사용하면 변수에 저장된 값이 변할 수 없으므로 변수가 아닌 상수의 역할을 한다.

  • abstract: 추상 클래스를 선언하는 데 사용하는 한정자

  • synchronized/volatile: 스레드 프로그래밍에서 여러 스레드가 동시에 자원에 접근할 때 발생하는 데이터 동기화를 처리하는 한정자.

인스턴스 변수와 클래스 변수

  • 인스턴스 변수는 클래스의 인스턴스로만 접근 가능한 변수를 말하며, 일반적인 멤버 변수가 여기에 속한다. 클래스 외부에서 접근을 차단하려고 private 키워드를 사용하기도 한다.

  • 동일 클래스의 인스턴스라 해도 각 인스턴스 변수는 값이 서로 다르고 서로에 영향을 주지 않는다.

  • 클래스 변수는 모든 클래스의 인스턴스로 공유되는 변수로, static 키워드를 사용하여 선언한다. 클래스가 인스턴스 되기전 main() 메서드 시작부분 에는 인스턴스 변수에 접근할 수 없으므로 main(). 에서 멤버 변수에 바로 접근하는 것은 불가능하다.

추상 클래스와 인터페이스

  • 추상 클래스와 인터페이스는 객체지향 개념을 실제 프로그램 개발에 쉽게 적용하고 유연한 설계를 지원하는 요소이다.

  • 일반 클래스보다 추상적인 관점에서 접근한다. 구체적인 내용보다는 기본적인 속성과 필요한 메서드의 형태(프로토 타입)만 기술하고 세부적인 구현은 구현하는 클래스에서 담당 하도록 하는 형태이다.

추상 클래스

  • 추상 메서드(구현되지 않고 정의만 한 메서드)를 하나 이상 포함한다.추상 메서드가 포함된 클래스는 반드시 추상 클래스로 정의해야 한다.

  • 추상 클래스는 일반 클래스와 같이 멤버 변수 및 메서드를 포함할 수 있다.

  • 추상 클래스는 그 자체를 인스턴스화, 즉 객체 생성에 사용할 수 없으며, 반드시 추상 클래스를 상속받는 클래스를 만든 후 추상 클래스에 선언된 모든 추상 메서드를 오버라이딩 해서 구현해야 한다.

인터페이스

  • 인터페이스는 일반 메서드를 포함할 수 없으며, 모두 추상 메서드(public abstract)로만 구성해야 한다.

  • 일반 멤버 필드는 없고, public, static, final로 선언한 상수만 있다.

  • 추상 클래스와 마찬가지로 직접 객체를 생성하는 것은 불가능하고, 다른 클래스로 구현할 때는 implements 키워드로 구현을 선언 해야 한다.

  • 클래스 상속과는 별도로 동작하므로 문법상 다중 상속을 지원하지 않는 자바에서 다중 상속의 개념을 지원하는 형태로 사용하는 것이 가능하다.

메서드 오버로딩과 메서드 오버라이딩

  • 메서드 오버로딩과 메서드 오버라이딩은 자바에서 다향성을 지원하는 구현 형태 중 하나 이다.

  • 메서드 오버로딩은 메서드 이름은 동일하지만 파라미터가 다른 여러 메서드를 만드는 것을 말한다.

  • 메서드 오버로딩의 조건은 다음과 같다.

  1. 메서드 이름이 같아야 한다.
  2. 파라미터의 개수 또는 타입이 달라야 한다.
  3. 파라미터는 같고 리턴 타입이 다르면 오버로딩이 성립되지 않는다.
  • 메서드 오버라이딩은 슈퍼 클래스에서 정의한 메서드를 서브 클래스에서 재정의하는 것을 말한다.

  • 메서드 오버라이딩의 조건은 다음과 같다.

  1. 오버라이딩하는 메서드는 슈퍼 클래스의 메서드와 메서드 구성 요소 모두가 동일해야 한다.
  2. 이때 이름, 파라미터, 리턴 타입이 모두 같아야 한다.

0개의 댓글