Java/Java의 이해

Java란 무엇인가? java에 대한 이해!

startfront 2025. 2. 10. 17:50

안녕하세요!

 

오늘은 

자바란 무엇인지 기본적인 정리와 문법까지 알아보도록 하겠습니다!

 

자바는 왜 배워야 하는가?

자바는 '객체지향언어'로

필요한 데이터를 각각의 객체로 만들고, 객체들 간의 상호작용을 통해 로직을 구성 할 수 있습니다!

이로인하여  별도의 작업 없이 플랫폼을 넘나들며 동작하기 때문에 웹, 앱과의 높은 호환성 으로
안드로이드 앱, 웹 개발에 자바를 많이 사용한답니다.
오랜 역사를 가지고 있어 참고 자료와 오픈소스가 많고,  유지 보수가 용이하며 안정성도 높답니다.

가장 호환성 높은 언어이며

백엔드에 대한 이해와 활용을 위해선 꼭 필요한 언어라고 생각합니다!!

현재 저도 프론트엔드 교육 과정 배우고 있지만 알고리즘과 코딩테스트는 Java로 준비예정입니다(●'◡'●)

 

언어의 발전 과정을 살펴 보며 객체지향에 대하여 좀 더 자세히 살펴 보겠습니다~

 

  1. 프로그래밍 언어의 발전 과정과 특징
  • 기계어 : 모든 명령셋이 0 1로 구성되어 있어 기계어로 프로그램 구현하기 어렵다.
  • 어셈블러 : 명령이 간단한 심볼(fatch, mov)로 구성되어 있어 기계어보다는 쉽지만 여전히 어렵다.
  • 절차식 언어 : 자연어와 가까워 프로그램을 구현하기 쉬워졌지만 프로그램이 실행 되는 순서대로 모든 코드가 구현되어야 하므로 구현 양이 많아 메모리를 많이 차지하고 프로그램 개발 시간이 오래 걸린다.
  • 구조적 언어 : 자주 사용하는 코드를 모듈화하여 재사용 함으로서 구현된 코드 양이 적어 빠르고 개발 시간이 적다.    데이타와 코드의 커플링이 너무 높아 수정하기 힘들다. 유지보수 용이성이 떨어진다.
  • 객체 지향언어 : 데이타와 코드의 커플링이 낮아 재사용성과 수정성이 높다.                                                               =>interface 만 동일하다면 여러가지 활용 가능

 2. 객체지향의 특징

  • 캡슐화 : 객체의 속성(데이터)과 행동(메서드)을 하나의 단위로 묶어                                                                                              외부에서 데이터를 직접 접근하지 못하도록 보호하고, 필요한 경우에만 메서드를 통해 데이터를 접근
  • 상속     : 자식 클래스는 부모 클래스의 속성과 메서드를 물려받고, 필요에 따라 메서드를 오버라이드하거나 확장
  • 다형성 : 같은 메서드나 연산자가 여러 다른 방식으로 동작할 수 있는 능력                                                                                    ->Overloading                                                                                                                                                                 동일한 이름의 생성자를 인자(인자의 개수, 인자 타입, 인자의 순서)가 다르게 해서  한개 이상 선언
public Customer(String name , String address , int age) {
		
		this.name= name;
		this.address = address;
		this.age = age;
	}
	
public Customer() {
		this("Uplus","서초구",2);
	}

 

=> 재사용성과 수정성(유지보수성)을 높이기 위한 특징

 

3. 객체

  • 현실 세계의 모든 것들 ==> 객체 지향에서는 현실 세계의 모든것들이 프로그램의 대상이다
  • 속성, 행위(메서드)를 가지고 있다.
  • 재사용의 단위                                                                                                                                                               => 객체 안에 속성들이 있고 각각의 속성들도 하나의 객체가 될 수있음!!

4. 클래스

객체의 속성과 행위를 선언해서 생성을 통해 객체를 생성할 수 있는 대상

=> 속성과 메서드 코드가 객체 생성을 통해 메모리에 올라가므로 매번 필요할 떄마다 선언할 필요가 없다!

 

객체 사용을 왜해? 재사용 할려고!!

 

5. 속성과 메소드를 클래스에 작성하는 방법

[modifier] class 클래스이름{    

*속성 선언
[modifiers]DataType 속성명;

*생성자
[access_modifier]클래스이름([인자,.....]){}

*매서드
[access_modifier]리턴타입 메서드이름([인자,.....]){
 return [데이타];}
}
 
  • 한 파일 내에는 public class는 한개만 있어야 한며  public class는 파일 이름과 동일해샤 한다.
class myclass{
		String 	name;
		String 	address;
		int 	age;}
  • Default Constructor: 생성자가 하나도 없으면 컴파일러가 no-arg , no body  생성자 작성                                                                                  => 클래스 내에 생성자가 있다면 컴파일러가 default Constructor를 만들지 않는다.

 

  • jenerate을 활용하여 클래스 내 생상자를 손쉽게 작성 가능
@Override
	public String toString() {
		StringBuilder builder = new StringBuilder(50);
		builder .append("Customer [name=").append(name) // 원래는 this.name 해줘야하는데 컴파일러가 해줌
				.append(", address=")
				.append(address)
				.append(", age=").append(age)
				.append("]");
		return builder.toString();
	}

 

  • 객체의 내용을 문자열로 리턴하는 기능*toString()

- 문자열 +객체 ,system.out.println(객체) 할때 toString() 호출합니다.

 

// public String toString() {

// StringBuilder sb = new StringBuilder(50);

// sb.append("이름: ")

// sb.append(name) }

 

  • this

this : this는 this를 작성한 클래스로 부터 생성된 객체 중 현재 사용 중인 객체를 참조

- 속성과 로컬변수 이름이 같을 때 구별하기 위해 속성 앞에 this.을 붙인다.

- 코드 재사용을 위해 인자가 다른 생성자를 호출할 때 this(~)를 사용한다.

- 주의점: 생성자 호출은 생성자의 첫번째 명령에서만 호출이 됨.

- 클래스 내부에서 해당 클래스의 객체가 필요한 경우

* ex) 이벤트 처리

	public Customer(String name , String address , int age) {
		
		this.name= name;
		this.address = address;
		this.age = age;
  }

 

 

이와 같이 클래스를 선언하여 필요한 객체를 생성하고 필요에 따라 매번 선언하지 않고 코드를 용이하게 이용 가능하다!!

 

이렇게 간단하게 자바의 필요성과 함께 객체 형태와 클래스의 형태에 대해 알아보았습니다!

이후 자바에 대한 자세한 문법과 이를 활용한 알고리즘 , 코딩테스트 활용 내용으로 찾아보겠습니다~