포스코DX X 비트교육센터 6기 - 자바 객체지향


이클립스 프로젝트 jdk, java 버전 바꾸기

도움 블로그

ABOUT JAVA

  • 자바의 빌드 툴 + 프로젝트 구조를 가짐 : Ant(이제 안씀), maven, gradle
    • 빌드 도구(Build Tool) 란? 빌드 도구(Build Tool)란 소프트웨어 개발에 있어서 소스 코드를 실행 가능한 애플리케이션으로 만들어주는 도구를 말합니다.
    • Maven
      • src / main / java , resourse
      • src / test / java, resourse (여기에 java에서 짜기 시작한다.
      • pom.xml(메이븐한테 프로젝트를 설명해 줌) / mainfest / package (jar야? 콘솔 war야? 웹) , java compiler, dependency(어떤 라이브러리를 쓰고있음), build (플러그인을 담음)
    • 메이븐 총정리
- jar? war?
- maven을 사용하는 이유는? 1. dependency 해결하려고 2. build를 가지고 설정하려고
- java bulid tool이란?
- maven의 폴더 구조
   + src
   + pom.xml

jar? war?

모두 JAVA의 jar 툴을 이용하여 생성된 압축(아카이브) 파일

어플리케이션을 쉽게 배포하고 동작시킬 수 있도록 있도록 관련 파일(리소스, 속성파일 등)들을 패키징해주는 것

  • JAR (Java Archive)
  • WAR (Web Application Archive)

pom.xml

image

image

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.poscodx</groupId>
	<artifactId>helloworld2</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<packaging>jar</packaging>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.build.outputEncoding>UTF-8</project.build.outputEncoding>
		<maven.compiler.source>17</maven.compiler.source>
		<maven.compiler.target>17</maven.compiler.target>
	</properties>

	<dependencies></dependencies>

	<build>
		<finalName>helloworld</finalName>
	</build>
</project>

깃에 올릴 것 2개 image

image

image

이렇게 작성하고 나면,

image

깃허브 프로젝트 이클립스에 가져오기

image

image

image

finish

깃에 잔디가 안 심어지면,

image

add해줌

메이븐 모듈

image

image

image

image

image

그리고 부모 메이븐 프로젝트에 src 지우기, .gitignore파일 만들어서 깃에 올리기


기본 프로그래밍

  • 도메인 = business = 문제영역

ex. 도메인 : 도서대여점 운영

  • 객체
    1. 데이터 저장 (데이터 객체) ex. 책
    2. 기능을 담는 객체 ex. 책 저장, 검색, 삭제
  • message == method

  • UML (분석 및 설계)
    • 클래스다이어그램 : 객체 찾기 -> 클래스 담기 -> 관계 설
    • 설계 원칙 SOLID
  • 추상화
    불필요한 것을 빼고 필요한 것만 남기는 것이다. 도메인에 입각한 클래스, 객체를 설계할 때, 추상화작업이 필요하다. 그래서 클래스는 재사용이 어렵다. user 객체만 어마무시하게 만들어진다. ex) 도서대여점 user에게 신발가게 user처럼 신발사이즈를 물어볼 수 없다.

***********클래스는 재사용이 어렵다.

  1. 클래스

설계도다. 이를 토대로 생성하면, 실제 세상의 인스턴스가 된다.

VS Reference란? object가 저장된 곳의 주소를 일련의 bit로 가지고 있는 것

  • 객체(Object)란 자신 고유의 속성을 가지는 물리적, 추상적인 모든 대상을 일컫는다.

  • 클래스(Class)란 객체들을 소프트웨어 내에서 구현하기 위해 만든 설계도이다.

    • 이를 통해 생성된 객체 하나하나를 인스턴스(Instance)라고 부른다.
    • 대체로 객체와 인스턴스는 혼용해서 표현한다.
클래스와 관련된 용어
   - 필드
   - 메소드
   - 생성자

+) int i = 10 » i는 주소야. 주소에 10이 들어있는거야.

  1. 정보 은닉(=캡슐화)

  2. 상속을 왜 해?

  • 코드 재사용을 위해서 (30점)
  • ****확장성을 위해서 (70점)
    • 프로그램은 계속 변함. 버전이 계속 커짐. 그러므로 확장에 대해 열려있어야한다.
  1. 다형성
    • 오버로딩
    • 오버라이딩***객체 지향의 꽃
  • 확장성 있는 애플리케이션 : 상속과 오버라이딩
  1. 추상클래스 / 인터페이스
    • 추상클래스는 왜 있어? 인스턴스화도 안되는데??? 상속의 개념을 알아야 함.
      • 상속관계에서 부모클래스의 메소드가 구현이 안되는 걸 알지만, 확장성을 위해서 만든다.
      • 추상메서드가 하나라도 있으면, 추상클래스이다.
      • new가 안됨.
  • OCP란?

    OCP(Open-Closed Principle)란 객체 지향 프로그래밍의 SOLID 원칙 중 하나로, 소프트웨어의 설계를 확장에는 열려있고(Open), 수정에는 닫혀 있어야(Closed) 한다는 원칙을 말합니다. 이 원칙은 소프트웨어의 유지 보수성과 확장성을 높이기 위해 중요한 개념 중 하나입니다. OCP의 기본 개념은 다음과 같습니다:
    
    - 확장(Extension)에는 열려 있어야 합니다(Open for Extension): 기능을 추가하거나 새로운 동작을 정의할 때, 기존의 코드를 변경하지 않고도 확장할 수 있어야 합니다.
    - 수정(Modification)에는 닫혀 있어야 합니다(Closed for Modification): 이미 동작하는 코드를 변경하지 않고도 새로운 기능을 추가할 수 있어야 합니다. 즉, 기존 코드를 수정하지 않고도 새로운 요구사항을 반영할 수 있어야 합니다.
    
    OCP는 코드의 재사용성과 유지 보수성을 향상시키기 위해 중요한 원칙으로 여겨집니다. 이를 준수하면 새로운 요구사항이나 변경 사항이 발생했을 때, 기존 코드를 변경하지 않고도 새로운 클래스나 모듈을 추가하여 기능을 확장할 수 있습니다. 이를 통해 코드의 변경이 다른 부분에 영향을 미치는 것을 최소화하며, 시스템의 유연성을 높일 수 있습니다.
    
    OCP는 SOLID 원칙 중 하나로, 소프트웨어 설계의 품질을 높이고 유지 보수 비용을 줄이기 위한 중요한 원칙입니다.
    
    
  1. 자바API

class 주차장 {

	park(버스 c){
	 c. 주차하다();
 	}

	//오버로드, 기능 추가
	park(포크레인 c){
	 c. 주차하다();
	}

	//기능추가
	park(스포츠카 c){
	}
}

이건 클래스를 수정하며 확장하고 있는 것이고, 좋지 못하다. 에러날 확률이 올라감.


class 주차장 {

	park(자동차 c){
	 c. 주차하다();
 	}
}

//main

자동차 c = new 버스();
자동차 c = new 포크레인();

이렇게 수정없이 확장할 수 있다.

image

클래스의 수정 없이 확장하기 위해 부모, 자식으로 상속되었고

어쩔수 없이 부모 클래스의 메소드가 추상메소드로 생성되며 추상클래스가 되었다.

이것을 객체지향에서 SOLID 원칙에 맞춘 확장이라고 한다.

  • 상속과 오버라이드가 수정없이 확장하는 기능이다.

-> 인터페이스를 추가하면 확장성이 더욱 좋아진다. ****

인터페이스는 필드가 없고, 메서드 선언만을 포함한다.

image

참고 블로그

  • 설계할 때, 인터페이스와 추상클래스를 이용하여 확장성이 있는 프로그래밍을 위해 애쓴다.

객체 지향이 추구하는 것? (개념)

  • 재사용한다.
  • 현실을 그대로 옮긴다.
    • 현실이 도메인이고 여기의 객체를 실행 중인 어플리케이션에 그대로 옮긴다. + 학사관리 시스템에 현실(도메인)을 보면, 학생들이 엄청 많을 것이고, 학생별로 학과, 학년,, 등등이 필요하겠네. 그럼 학생들의 공통점을 뽑아야겠네?(추상화) 이를 바탕으로 클래스 만들어놓고 프로그램 코드에서 적당한 시기(입학)에 객체 만들어서 화면에 표현한다. => 현실반영

### 메모리 영역

  • method Area : 우리 코드
  • Stack
  • Heap : 객체 저장

image

image

parctice

객체지향 프로그래밍

자바 API (라이브러리, Hash, List…)