본문 바로가기

신세계 국비과정/신세게 - Java 공부

2주차 배운점 느낀점 - UML, 모델링, 객체지향, 객체, 생성자

728x90
반응형

 

 

2주차 목요일

 

강사 선생님이 이상하다 폭풍진도다. 안그래도 진도 따라가기 급급했던 학생들이 힘겨워한 날이었다. UML 부터 클래스, 클래스와 클래스 관계까지 개념 위주로 수업하셨다. 모델링을 할때 대학생 시절 starUML을 사용하고 과제 제출하던 내가 생각난다. 익숙한 내용들이지만 오랜만에 봐서 낯설다. 차근차근 따라가자

 

배운점

 

UML


UML(Unified Modeling Language)
표준 통합 모델 언어
시스템 개발을 위한 시각적인 설계 표기
객체 지향 시스템을 개발할 때 산출물을 명세화, 시각화, 문서화하는 데 사용
개발하는 시스템을 이해하기 쉬운 형태로 표현하여 분석가, 설계자, 의뢰인이 효율적으로 의사소통할 수 있게 해줌
-> UML은 표준화된 통합 모델링 언어

 

모델링: 개발하고자 하는 프로그램을 시각적으로 표현하는 것
의뢰자가 요구에 맞도록 쉽게 수정해서 결과적으로 유지보수 기간을 줄여 생산성을 높이는데 목적이 있다.

 

모델링은 언제 해야 할까?
개인이 제어 할 수 없는 작업을 할때
다양한 관점에서 설계도가 있어야할 때
협업이 필요한 프로젝트를 할 때
결론: UML 이용하여 설계도를 만들 수 있다.

 

시각화(Visualization) 언어
소프트웨어의 개념 모델을 시각적인 형태로 표현하며 명확히 정의된 표준화된 다이어그램을 제공
이를 이용해 오류 없는 원활한 의사소통 가능

 

명세화(Specification) 언어
소프트웨어 개발 과정인 분석, 설계 단계의 각 과정에서 필요한 모델을 정확하고 완전하게 명세화하여 만들 수 있음
명세화에서 각 다이어그램의 기호는 의미를 담고 있으며 추상적이지만 고유의 특성을 갖고 있음

 

구축(Construction) 언어
자바 Java C++ Visual Basic, C# 같은 다양한 프로그래밍 언어로 표현 가능
UML로 설계된 모델을 프로그램 코드로 자동 변환할 수 있으며, 이미 구축된 소스 코드를 UML로 역변환하여 분석하는 역공학 Reverse Engineering도 가능

 

문서화(Documentation) 언어
UML은 StarUML, 투게더 Together 등 케이스 툴을 이용하여 설계한 내용 자동으로 문서화 가능

 

서로다른 언어 시각적 표현 가능

 

객체지향


c++ , 자바 등의 언어를 사용해 자료 구조를 중심으로 객체를 설계한 다음 이들의 흐름을 설계하는 방식
기본요소: 객체 object , 클래스 class , 메시지 message

 

객체와 클래스


객체는 현실에 존재하는 모든 것 (구체적)
클래스는 개념적으로 객체를 생성할 수 있는 틀 (개념적)
클래스는 그 자체만으로 사용할 수 없음

 

 

 

메시지
객체 간의 상호작용 수단
한 객체가 다른 객체에 특정 작업을 요청하는 신호
메시지를 보내는 객체는 송신 객체
메시지를 받아서 동작을 수행하는 객체는 수신 객체

 

객체(object) 물리적으로 존재하거나 개념적인 것 중에서 다른 것과 식별 가능한 것
객체는 속성과 동작으로 구성 . 자바는 이러한 속성과 동작을 각각 필드와 메소드라고 부름

 

객체지향 프로그래밍 (OOP) Object-Oriented Programming
시스템을 객체(Object)의 관점으로 봐야한다.
객체지향 시스템을 가시화, 명세화 하고 문서화 하는 것이 목적이다.
객체들을 먼저 만들고 , 이 객체들을 하나씩 조립해서 완성된 프로그램을 만드는 기법
-제품을 만들때
부품(객체)→ 부품 조립 → 완성품

 

객체의 상호작용
객체 지향 프로그램에서도 객체들은 다른 객체와 서로 상호작용하면서 동작
객체가 다른 객체의 기능을 이용할 때 이 메소드를 호출해 데이터를 주고받음
매개값 : 객체가 전달하고자 하는 데이터이며 , 메소드 이름과 함께 괄호 () 안에 기술
리턴값 메소드의 실행의 결과이며 , 호출한 곳으로 돌려주는 값
argument = 받는거

 

객체간의 관계
집합 관계 : 완성품과 부품의 관계
사용 관계 : 다른 객체의 필드를 읽고 변경하거나 메소드를 호출하는 관계
상속 관계 : 부모와 자식 관계 . 필드 , 메소드를 물려받음

 

 


화살표 생긴거 다 다름
상속관계: 자식이 부모에게 요청하는거 , 그래서 화살표 위로감.
부모는 자식을 알 필요가 없다 -> 자식 몰라도 됨
상속은 확장성. 부모의기능 ++

 

객체지향 프로그래밍 특징


캡슐화: 객체의 데이터 (필드), 동작(메소드)을 하나로 묶고 실제 구현 내용을 외부에 감추는 것


상속 : 부모 객체가 자기 필드와 메소드를 자식 객체에게 물려줘 자식 객체가 사용할 수 있게 함 -> 코드 재사용성 높이고 유지 보수 시간 최소화
코드의 재사용, 부모 객체가 자기가 가지고 있는 필드, 메소드를 자식객체가 사용할 수 있도록 클래스 설계한것


다형성 : 사용 방법은 동일하지만 실행 결과가 다양함(프레임워크)
다형성을 구현하기 위해서는 자동타입변환(프로모션), 재정의(오버라이딩)

 

인스턴스
객체 지향 프로그래밍에서도 객체를 생성하려면 설계도에 해당하는 클래스가
클래스로부터 생성된 객체를 해당 클래스의 인스턴스라고 부름
클래스로부터 객체를 만드는 과정을 인스턴스화라고 함
동일한 클래스로부터 여러 개의 인스턴스를 만들 수 있음

 

클래스 선언
객체를 생성 생성자 하고 , 객체가 가져야 할 데이터 필드 가 무엇이고 , 객체의 동작 (메소드) 는 무엇인지 정의
클래스 선언은 소스 파일명과 동일하게 작성
클래스명은 첫 문자를 대문자로 하고 캐멀 스타일로 작성 . 숫자를 포함해도 되지만 첫 문자는 숫자가 될 수 없고 , 특수 문자 중 $,_ 를 포함할 수 있음
공개 클래스 어느 위치에 있든지 패키지와 상관없이 사용할 수 있는 클래스

 

클래스 변수
클래스로부터 객체를 생성하려면 객체 생성 연산자인 new 가 필요
new 연산자는 객체를 생성시키고 객체의 주소를 리턴
라이브러리 클래스 : 실행할 수 없으며 다른 클래스에서 이용하는 클래스
실행 클래스 : main( ) 메소드를 가지고 있는 실행 가능한 클래스

 

생성자, 필드 , 메소드
필드 객체의 데이터를 저장하는 역할 . 선언 형태는 변수 선언과 비슷하지만 쓰임새는 다름
생성자 : new 연산자로 객체를 생성할 때 객체의 초기화 역할 . 선언 형태는 메소드와 비슷하지만 ,리턴 타입이 없고 이름은 클래스 이름과 동일
메소드 : 객체가 수행할 동작 . 함수로도 불림

 

필드 선언
필드는 클래스 블록에서 선언되어야 함
타입은 필드에 저장할 데이터의 종류를 결정 . 기본 타입 참조 타입 모두 가능
초기값을 제공하지 않을 경우 필드는 객체 생성 시 자동으로 기본값 초기화

 

 

필드 사용
필드값을 읽고 변경하는 것 . 클래스로부터 객체가 생성된 후에 필드를 사용할 수 있음
필드는 객체 내부의 생성자와 메소드 내부에서 사용할 수 있고 , 객체 외부에서도 접근해서 사용할수 있음

 

기본 생성자
클래스에 생성자 선언이 없으면 컴파일러는 기본 생성자를 바이트코드 파일에 자동으로 추가

 

생성자 선언
생성자는 메소드와 비슷한 모양을 가지고 있으나 , 리턴 타입이 없고 클래스이름과 동일
매개변수의 타입은 매개값의 종류에 맞게 작성

 

생성자 오버로딩
매개변수를 달리하는 생성자를 여러 개 선언하는 것
매개변수의 타입 , 개수 , 선언된 순서가 똑같을 경우 매개변수 이름만 바꾸는 것은 생성자 오버로딩이 아님
생성자가 오버로딩되어 있을 경우 , new 연산자로 생성자를 호출할 때 제공되는 매개값의 타입과 수에 따라 실행될 생성자가 결정
생성자 오버로딩시 디폴트 생성자가 자동생성되지 않는다. 써줘라직접
public ClassName (){}

 

 

메소드 선언
객체의 동작을 실행 블록으로 정의하는 것
리턴 타입: 메소드 실행 후 호출한 곳으로 전달하는 결과값의 타입
메소드명 : 메소드명은 첫 문자를 소문자로 시작하고 , 캐멀 스타일로 작성
매개변수 메소드를 호출할 때 전달한 매개값을 받기 위해 사용
실행 블록 : 메소드 호출 시 실행되는 부분

 

인스턴스 멤버 : 필드와 메소드 등 객체에 소속된 멤버

 

this 키워드
객체 내부에서는 인스턴스 멤버에 접근하기 위해 this 를 사용 . 객체는 자신을 자신을 this’ 라고 지칭
생성자와 메소드의 매개변수명이 인스턴스 멤버인 필드명과 동일한 경우 , 인스턴스 필드임을 강조하고자 할 때 this 를 주로 사용

 

final 필드
final 필드는 초기값이 저장되면 최종적인 값이 되어서 프로그램 실행 도중에 수정할 수 없게 됨
final 필드에 초기값을 주려면 필드 선언 시에 초기값을 대입하거나 생성자에서 초기값 대입

 

상수
불변의 값을 저장하는 필드
상수는 객체마다 저장할 필요가 없고 , 여러 개의 값을 가져도 안 되기 때문에 static이면서 final

 

객체.toString()
public static void main(String[] args){
Student s1 = new Student();
Student s2 = new Student();
System.out.println(s1.toString());
System.out.println(s2.toString());
->
oop.Student@4eec7777
oop.Student@3b07d329 // 해쉬코드 실제주소 아님
그냥 println(s1) 해줘도 됨

 

정적 팩토리 메소드(static factory method)
직접적으로 생성자를 통해 객체를 생성하는 것이 아닌 메서드를 통해서 객체를 생성하는 것
public static Boolean valueOf(boolean bol){
return b? Boolean.TRUE : Boolean.FALSE;

}

 

회고

 

다들 지친게 보인다. 호기롭게 시작한 교육이지만, 사람이 환경이 변하면 지치기 마련이다. 9~6시 수업에 통학시간 1~2시간 , 나머지 공부 11시까지 ,, 본인 운동도 챙기는 분이 있다. 지치지 말자. 해내자 . 나도 휩쓸리지 말자

반응형