국비지원 공부 정리/Java

객체지향 프로그래밍과 객체

worldstroy 2025. 4. 8. 11:01

객체지향 프로그래밍(Object Oriented Programming)

필요한 데이터와 코드를 묶어 하나의 객체로 만들고 이 객체들 간에 상호작용을 하도록 프로그램을 만드는 방식

 

객체?

물리적으로 존재하거나 개념적인 것 중에서 다른 것과 식별이 가능한 것
ex. 학생, 자동차, 학과 등
속성(field, 필드)와 동작(메소드, method)로 구성됨

 

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

캡슐화(Encapsulation) 객체의 필드와 메소드를 묶고, 내용을 외부에 감추는 것
상속(Inheritance) 부모 객체에 필드/메소드를 자식 객체에게 물려주는 것
다형성(PolyMorphism) 사용 방법은 동일하지만 결과가 다양하게 나오는 것

 

객체 지향 프로그래밍의 장단점

장점 코드 재사용성이 크게 향상됨
유지 보수에 용이
대형 프로젝트에 적합
단점 처리 속도가 느림
설계가 복잡함
많은 시간 투자가 필요함

 


변외편 - 절차지향 프로그래밍 

 

장점 실행속도가 현저하게 빠름(기술 순서대로 실행)
단점 프로그램이 커진다면 유지 보수 어려움
순서가 바뀌면 결과 도출에 한계가 존재함
대형 프로젝트에 적합하지 않음

 

 


JAVA의 클래스란?

자바 코드를 구성하는 가장 작은 단위이며, 사용자나 시스템이 정의하는 단위값

 

클래스 선언과 객체 생성 

 

필드 클래스 내에 값을 저장하는 공간(변수)
메소드 객체 동작으로 호출 시 실행하는 함수
생성자 클래스 이름과 동일한 이름을 갖는 특별한 종류의 메소드로 객체 생성시 자동 호출되며, 객체를 초기화하는 역할을 담당
필드의 초기값을 할당하지 않으면 자동으로 기본값이 초기화되며, 클래스 블록이 만들어져야 필드 선언이 가능함

 

 

 


패키지?

관련 있는 클래스 파일을 모아, 놓은 디렉터리로 비슷한 유형끼리 모아놓은 것 
패키지의 선언은 소스파일의 최상단에 위치하며 소문자로만 작성되는 것이 관례

 

 

접근 제어자(Access Modeifier)

 

클래스나 일부 맴버(필드, 메소드)를 외부에서 접근하는 것을 제한하는 범위를 결정함
중요한 필드와 메서드가 외부로 노출되지 않도록 처리하기 위함

 

접근 제어자(Access Modeifier)의 종류

public 패키지에 관계 없이 모든 클래스에서 접근이 가능함
protected 같은 패키지 내의 모든 클래스에서 접근 가능(다른 패키지에서 접근이 불가함)
단, 다른 패키지에 있더라도 상속 받은 서브클래스에서는 접근 가능함.
default 같은 패키지 내의 모든 클래스에서 접근 가능하며, 다른 패키지에서 접근 불가함
private 같은 클래스에서만 접근가능하다는 의미
필드와 메소드는 어떤 접근 제한자를 갖느냐에 따라 호출 가능 여부가 결정함

 

getter와 setter

public class Person {

	private int age;
	private String name;

	public Person(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void  setAge(int age) {
		this.age = age;
	}
}
클래스에서 필드(변수)는 private로 지정하는 것이 일반적이다. 외부에서 마음대로 데이터를 변경한다면 무결정이 깨짐
private로 선언하면 다른 클래스에서 접근하지 못하니까, 간접적으로 필드에 접근할 수 있도록 public 메소드를 제공한다.
이것을 getter와 setter라고 하며, 객체지향 프로그래밍에서는 데이터의 직접적인 변경을 막고, 메소드를 통해 필드에 접근하는 것을 선호함.

 


static 맴버(변수, 메소드)

객체마다 생성되는 것이 아니고, 클래스당 하나면 생성됨
클래스가 생성되는 순간에 메모리를 할당 받음
즉, 객체를 생성하지 않아도 static 맴버에 접근이 가능하며 동일한 클래스의 모든 인스턴스에 공유됨
non-static의 경우 객체가 생성될 때마다 맴버 공간을 만드니, 메모리 공간이 공유되지 않음

 

static 맴버 변수의 활용

보통의 static 변수는 공유의 목적으로 많이 사용되며 주로 유틸리티성 메소드를 사용할 때 많이 사용됨
객체가 생성되지 않은 상태에서 non-static 맴버는 만들어져 있기 때문에 static으로 설정된 메소드에서는 non-static 맴버에는 접근할 수 없음
반대로, non-static 메소드에서 static 맴버에서 접근할 수 있음
static 메소드에서는 this 키워드 사용 불가함

 


 

final 필드란?

인스턴스 필드, 정적 필드는 언제든지 값 변경이 가능하지만 final 필드는 읽기만 허용할 수 없음

 

상수 선언

 

 

상수는 객체마다 저장할 필요가 없고, 단 한번 만 같이 선언되면 되기에 static이면서 final인 특성을 가짐
대문자로 작성하는 게 관례이며, 여러 단어를 사용한다면, 언더스코어(_)를 이용해 연결됨

 

 


클래스의 상속(Inheritance)

부모 클래스에서 정의된 필드와 메소드를 자식 클래스가 물려 받는 것
프로그래밍에서는 자식 클래스가 어떤 부모로부터 상속 받을 것인지를 선택
Java는 다중 상속을 허용하지 않으며, 상속 받을 수 있는 부모는 딱 하나

 

상속의 종류

맴버의 중복 작성 제거
클래스 수정 최소화
클래스의 계층적 분류 가능
클래스의 재사용과 확장성 용이

 

상속에서의 부모 생성자의 호출

모든 객체는 생성자를 호출해아먀 생성되며, 부모 클래스의 생성자를 super함수를 통해 호출하지 않으면 부모의 기본 생성자가 자동으로 호출되게 됨.

 

메소드 오버라이딩이란?

부모(슈퍼) 클래스의 메소드를 자식(서브) 클래스에서 재정의하는 것 
단, 메소드의 이름, 매개변수 타입 및 개수, 리턴 타입이 동일해야 함
@Override라는 어노테이션으로 상속인지 여부를 표시해둘 수 있음

 

 

 

 

'국비지원 공부 정리 > Java' 카테고리의 다른 글

Wrapper 클래스 - 기본 변수를 포장  (0) 2025.04.09
추상 클래스와 인터페이스  (0) 2025.04.08
JAVA 예외처리  (0) 2025.04.08
자바의 반복문  (0) 2025.04.05
Arrays 클래스와 ArrayList  (0) 2025.04.05