<복습 문제>

 

 

 참조 자료형  - String/ Date/Student 등

클래스형으로 선언, 클래스에 따라 메모리 크기가 다름, String을 예외하고 사용시에 변수에대해 생성해야함

 § 정의 후 사용방법

< subject.java >

public class Subject { String SubName; int Score; }

 

 접근제어 지시자 

private - 동일 클래스 내에서만 접근 가능

protected - 동일 패키지내에서 or 상속관계에 있는 private를 사용하고 싶을때 사용하여 접근 가능

public - 어디서나 접근 가능

x - 같은 패키지내에서 접근 가능(다른 패키지에서 사용시 import )

 

 캡슐화 

정보은닉을 활용한 캡슐화 - 꼭필요한 정보와 기능만 외부 접근허용 (인터페이스만 제공함)

오류 최소화함

 

 this 키워드 

인스턴스 자신의 (heap)메모리를 가르키며 자신의 주소를 return / 생성자에서 또 다른 생성자를 호출할때 사용

클래스 내에서 참조변수가 가지는 주소값과 동일한 주소값을 가지는 키워드

ex) 위 Student 클래스에서  Student 생성자 생성 시 멤버변수을 입력 받음  > this.참조변수 = 매개변수;

 

#생성자의 역할: 인스턴스 초기화

클래스에 생성자가 여러개인 경우 생성자에서 다른 생성자 호출가능 (but, this() 선언 이전에 다른 statement 사용불가)

순서 : this(매개변수) 호출 > 매개변수 형식이 맞는 생성자 찾음 > 인스턴스 초기화 완료

main 함수에서 생성된 thisper과 class내 생성자에서 리턴해준(thisper2) 값과 동일 

 

 Static(정적) 변수  == 클래스 변수

> 공통으로 사용하는 변수가 필요한 경우, 여러 인스턴스가 공유하는 기준값이 필요한 경우

> 인스턴스 생성과 상관 없음, 클래스 이름으로 직접 참조

사용법 ) static 자료형 변수명;

ex) 입사자에게 사번 부여하는 프로그램

static형의 변수는 인스턴스 생성 전 클래스(Employee)명으로 접근하여 출력가능

> static 메서드내에서 인스턴스 변수 사용불가 (생성 전에도 static 변수가 사용가능하므로), 일반 메서드 내에서는 static 변수 사용가능

 

 Singleton패턴 

> 인스턴스가 한개만 생성되어야 하는 디자인 패턴으로 static 변수와 메서드를 활용해 구현가능

> 유일한 객체를 제공할때 구현

방법) class내  private 생성자  /유일한  private 인스턴스  / 인스턴스를 참조할 수 있는  public 메서드  생성

private 클래스명( ) { }

private static 클래스명 instance = new 클래스명();

public static 클래스명 getInstance( ) { return instance; }

 

 배열 

동일한 자료형의 순차적 자료구조로 인덱스로 빠른참조 가능 (인덱스 = 0~length-1)

ArrayList 클래스 사용 多

선언 = 타입[ ] 배열명 = new 타입[크기]    OR    타입 배열명[ ] = new int[크기] 

배열크기 = 타입의 byte * 크기 / length와 요소개수 다를 수 있음

ex)

 

** for (타입 변수 : 배열명){ }

// 배열의 요소를 인덱스0 ~ length-1까지 순차적 순회기능

 

복사

- System.arraycopy( )

: 복사본과 원본의 주소 동일, 배열요소 값 변경시 원본, 복사본 모두 변경

: 얕은 복사(주소복사)

 

 

 

 

 

> 얕은 복사와 깊은 복사

 2차원 배열 

> 선언: 타입[ ] [ ]배열명 = new 타입[행][열]  

> 초기화: 타입[ ] [ ]배열명 = {{#,$,%}, {!.@}}

 

 ArrayList 사용법 

성적 산출 프로그램

 

 

[내일배움카드], [국비지원교육]

 

객체지향 언어 : 객체를 선언한 후, 그 객체에 관한 내용(관계)을 프로그래밍함 => C++, C#, Python, JS, Java

 

Obj 객체란? 구체적, 추상적인 데이터 단위 

객체를 정의하고, 객체가 제공하는 기능을 구현, 그 기능들 간 메시지(파라미터/객체) 전달을 통해 객체간의 관계(협력), 속성을 구현

> 객체를 정의 (class ObjName)

> 객체의 속성을 멤버변수로, 역할을 메서드로 구현

> 객체간의 협력을 구현

ex)

public class UserInfo {

// 멤버변수

String id;

String password;

String name;

String address;

int phone;

}

Funtion 함수란?

스택메모리 : 함수가 호출될때 지역변수들이 사용하는 메모리

하나의 기능을 수행하는 코드로 호출 여러곳에서 가능, 호출하지 않으면 사용되지 않음, 호출시 return하여 반환해줌

ex) 반환타입 함수명 (매개변수) { 코드 }

return 값 없는 함수 = void 타입

return 타입 = 함수 타입

 

return 값을 출력하려면  main함수에서 변수에 담아서 출력가능

변수에 담아주지 않으면 void형인 sayHello 함수 실행결과만 출력된다.

 

지역변수 = res, num1, num2, sum, i

 

 

 

 ※ 메서드와 차이점 

> 함수 : 단독으로 존재

> 메서드 : 객체의 기능으로 클래스 안에 속함, 클래스 안의 멤버변수를 사용하며, 멤버 함수라고도 한다.

 

객체의 속성 = 멤버변수

객체의 기능 = 메서드

 

 

클래스 활용

class 객체A {
    멤버변수, 메서드 선언;  }

class 객체B {
   main 함수 {
      객체A  참조변수 = new 객체A() ; // 인스턴스 생성  
      참조변수.멤버변수 = 값; ...    }
 }

getter 메서드:  변수값을 얻는 메서드

setter 메서드: 변수값을 재설정 하는 메서드

 

객체 A를 B에서 사용할때

> new 키워드를 사용하여 인스턴스를 생성 

> 참조변수(타입 = 객체A) 를 이용하여 멤버변수 or 메서드에 접근, 값 변경 가능함

 

ex)

학생 정보를 출력하는 객체를 생성 (=객체A)                        ->           학생을 만들어줌 (=객체B)

 

인스턴스란?

> new키워드를 통해  클래스를 메모리에 생성한 상태

> 실제 클래스 기반으로 생성된 인스턴스 객체는 각각 다른 멤버변수 값을 가짐

 

힙메모리 (동적메모리)

변수를 사용할때 메모리 할당(new 키워드)  > 사용하지 않으면 할당해제됨

> 메모리 주소 : 참조변수가 가르킴  =>  println(참조변수) // 메모리 주소 출력

> 참조 값: 생성된 인스턴스의 메모리 주소 값

 

생성자란?

> 클래스 이름과 동일, 반환값 없음

> 객체를 생성하기 위해 new키워드 뒤에 오는 것 => 위 코드에서는 StudentInfo 임

> 접근 제어자를 통해 외부에서 접근하지 못하도록 가능

> 클래스에 생성자가 하나도 없는 경우에만 디폴트 생성자가 생김

** 생성자를 생성하고 멤버변수 값을 설정하지 않으면 null, 0으로 할당됨 == 디폴트 생성자

 

ex) 디폴트 생성자 

ex) 클래스에 이미 생성자 존재시

#오류

# 디폴트 생성자 추가

 

생성자 여러개 정의 = 오버로딩

 

 Overriding 

> 상의 클래스에 정의된 메서드내용을 하위 클래스에서 동일한 이름의 메서드로 재정의 하는 것

 

메서드의 이름은 주소값을 나타냄

메서드 내의 변수는 스택 메모리에 위치, 다른 인스턴스라도 같은 메서드 호출

ex)

 다형성 

> 하나의 코드가 여러 자료형으로 구현되어 실행되는 것으로 같은 코드에서 여러 실행결과  출력

> 유연, 확장성있는 프로그램 제작 가능

> 여러 클래스의 하나의 상위 클래스 타입(Animal)으로 핸들링 가능

[내일배움카드], [국비지원교육]

토익 시험 준비하느라 2주차 강의는 별로 듣지 못했다고 한다,,,

그래도 내일배움카드는 잘 사ㅏ용해야지!

 

1/28일  ch1 -14 ~16 (조건문)

 

< if-else문 >

조건이 여러개일때의 if문을 배우고 

학점계산기를 만들어 보았다.

 

90점 이상이면 A

80점 이상이면 B

70점 이상이면 C

그 이하 점수일땐 F를 출력하도록 코드를 짰다.

 

Scanner 함수를 이용해 점수를 입력받았다.

이때 import scanner을 해줘야 한다.

그리고 Scanner 객체를 생성해준다.

 Scanner scanner = new Scanner(System.in); 

 

 

 

 

 

 

< if-if문 > 여러 조건이 존재시 사용한다.

 

if-else문과 다르게 여러 출력이 나올 수 있음

위 코드로 if-if를 사용한다면 grade가 97점일땐 출력이 여러개가 된다.

3개의 if 조건을 만족하기 때문에.

하지만 else문은 조건을 만족하지 않을때만 실행되기 때문에 실행되지 않고

최종출력은 A+ A B 가 출력

grade가 89일땐 B만 출력

 

< switch-case문> 

 

if-else문의 코드를 더 짧게 줄여 가독성을 향상시킬 수 있다.

비교조건이 숫자거나 문자열 등 특정 값으로 나타낼 수 있는 경우 용이하게 사용가능

break 사용시 더 내려가지 않고 바로 switch문을 탈출한다.

 

ex)month 입력시 달의 일 수를 출력해준다.

Java14부터는 쉼표로도 가능, 명령어 여러개 일경우에는 { } 사용하고 리턴값은 yield를 사용한다.

변수 = switch문~~ 으로 사용시 변수 =값 대신 리턴값만 작성시 변수에 바로 리턴된다!!

 

 

1/31일  ch1 -17 ~21 (반복문)

< while문 > 

조건에 만족되면 만족하지 않을때까지 계속 수행

while(조건){ 수행문 } 

< do-while문 >

do { 수행문 } while(조건);

일단 do문을 실행하고 조건에 만족시 while문 수행 => 또 조건 만족시 do문 실행

< for문 >

횟수가 정해질때 편리

for (초기화; 조건; 증감식) { 수행문 }

 

while / do-while / for문 비교

ex) i =0부터 i에 카운트 횟수를 더하는데 카운트가 10이 될 때까지만 반복하는 코드

 

< 중첩반복문 >

너무 많은 반복문 사용시에 시간이 너무 많이 소요된다.

변수를 두개 사용할때 유용하게 사용가능

 

< break-continue문 >

- break : 제어문에서 탈출하는 기능으로 n중 반복문일때는 break가 타이핑 된 반복문 하나에 대해서만 탈출하고 밖에 반복문을 계속 실행

Ex)

 

이때 곱한값이 20보다 크면 break가 걸린다.

그럼 i=1,2일때는 20보다 클 수 없어서 다 출력되고

i가 3일때는 3*6 이후부터는 20이 넘으므로 출력되지 않을것이다.

 

 

 

 

result >

 

[내일배움카드], [국비지원교육]

CAN통신

: broadcast 방식(1:N방식)

: 2가닥으로 구현, 최대1Km 전송거리(50kbps일때)/ 최대속도 1Mbps (전체대역폭의 50%이하 트래픽 유지권장)

: 비동기 통신에서와 같이 NRZ(Non Return to Zero) 코딩 방법사용/ 1비트 동안은 같은 값을 유지

: ECU 간의 통신을 위한 통신

: 매체접근방식 (CSMA/CD 방식) 시간손실없이 우선순위 순서로 메시지 전송

: 중재(arbitration) id경쟁을 통한 이벤트기반 통신 <-> LIN -20Kbps

 

CAN규격 (2.0A > 2.0B 전송가능, 2.0B > 2.0A 전송불가)

  • 표준 형태(2.0A)의 ID= 11bits
  • 확장형태(2.0B)의 ID= 29bits 

ISO규격 (물리계층에서 차이, 통신속도로 구분)

  • ISO 11898 -1Mbps이상의 고속통신  
  • ISO 11519- 125Kbps까지 저속통신

CAN 프로토콜

- 데이터 링크 계층

  • LLC : Acceptance Filtering, Overload Notification, Recovery Management
  • MAC: Data Capsulation/Decapsulation, Frame Coding, Error Detection/Signaling , Serialization/DeSerialization

- 물리계층 (120ohm의 종단저항 처리)

 

Terms

** Dominant(우성) == ‘d’비트 == 0 / Recessive(열성) == ‘r’비트 == 1 

 

- SOF(Start Of Frame) 
: 한 개의 우성 bit 로 구성 Frame의 처음을 지시하고 모든 노드의 동기화를 위해 사용

- Arbitration(중재) ID 
: 메시지 내용 식별 > 우선순위 나타냄/ 11비트(CAN 2.0A버전) or 29비트(CAN 2.0B버전)  

- IDE (Identifier Extension) Bit
: 우성bit => Standard / 열성bit => Extended Frame (프레임 구분)

- RTR (원격 전송 요청) Bit

: 우성 RTR bit => Data Frame/ 열성 RTR bit => Remote Frame (프레임 구분)

- DLC (Data Length Code)

: 0 ~ 8bytes 사이즈

- SRR (Substitute Remote Request) 
: 표준 프레임의 RTR 위치 점유
- CRC (Cyclic Redundancy Code) 
: 16bits 체크섬(checksum) = 15bits  CRC + 열성 구분자(1bit == CRC Del) / 에러 감지에 사용

- ACK (ACKnowledge) Slot
: 전송노드는 열성Bit 송신, 버스에 ACK 비트가 있는지 확인, 없으면 전송 다시 시도

: 수신노드는 오류없으면 우성Bit송신

: 메시지를 올바르게 수신한 모든 CAN 컨트롤러는 메시지 끝에 ACK 비트 전송
- EOF (End of Frame)
: 7개의 ‘r’비트로 구성되어 메시지의 끝을 알리는 목적으로 사용

 

 

(입력) 리모트 프레임 요구 > 송신메일박스 > (응답) 데이터 프레임
##송신 메일 박스가 자동 응답 기능이설정되어 있고 ID가 일치해야 응답

 

Frame Types

  • Data Frame : 데이터 전송하기 위해 구성
  • Remote Frame  데이터 프레임에서 RTR bit == 1 / 데이터 영역 없음 / 데이터를 요구하는데 사용
  • Error Frame : 프레임에 에러 발견시 버스에 전송 / 6~12 dominant bits에러 플래그 + 8 recessive bits 에러경계
  • Overload Frame : 다음 프레임사이에 지연을 위함/ 6-7bits overload 플래그 + 8bit overload 경계

 

< Data Frame >

 

 

▶ Standard(2.0A)

 Arbitration Field = 11bits ID + 1bit RTR

Control Field =  r0 + 4bit DLC

 

▶ Extended(2.0B)

 Arbitration Field

= 11bits ID+ SRR + IDE + 18bits ID + 1bit RTR

Control Field = r1 + r0 + 4bit DLC

 

 

 

 

 

- Arbitration Field
: 11비트 또는 29비트의 크기를 갖는 ID와 1비트의 RTR(Remote Transmission Request) 비트로 구성 
: 둘 이상의 노드에서 메시지의 전송이 동시에 일어날 경우 메시지 간의 충돌을 조정. 
: RTR비트의 값은 데이터 프레임인지(d) 리모트 프레임인지(r)를 결정하는 데 사용

- Control Field
: 2비트의 IDE(IDentifier Extension) 비트, 4비트의 데이터 길이 코드(DLC, Data Length Code)로 구성/ 
: R0은 Reserved 비트(Extended CAN 2.0B R0, R1)

- Data Field
: 0 ~ 8bytes (==DLC 데이터 길이 코드) 의 데이터를 포함/ MSB(Most Significant Bit)부터 송신

: 특정 노드에서 다른 노드로 전송하는 데이터를 포함

- CRC (Cyclic Redundancy Check) Field
: CRC 시퀀스(15Bits) + CRC del(1개 ‘r’ Bit 

: SOF에서부터 데이터 필드까지의 비트열을 이용해 생성 / 메시지 상의 에러 유무를 검사하는데 사용

- ACK (ACKnowledge) Field
: 1bit의 ACK slot + ACK 델리미터(del)

: 노드에서 올바른 메시지를 수신하게 되면 ACK 필드를 받는 순간 ACK 슬롯의 값을 ’d’로 설정해 버스 상에서 계속 전송

 

< Remote Frame >

 SOF, Arbitration/ Control/ CRC/ ACK Field, EOF

: 데이터 영역이 없음 / 데이터 프레임에서 RTR 비트==1
: 데이터를 요구하는데 사용, 리모트 프레임의 요구를 받은 장치는 데이터 프레임으로 응답

<Error Frame>
:  6~12 dominant bits 에러 플래그+ 8 recessive bits 에러경계(에러 종료 상태) 
: 비트 stuffing 규칙을 일부러 손상 시키며, 따라서 현재 전송 중인 장치는 에러로 인해 현재의 프레임이 실패 하였음을 인식하고 즉시 중지하여 다음의 재 전송 기회를 기다림

  • 송신장치에서 발생 에러
    Bit 에러: 보낸 비트와 받은 비트가 서로 다르면 발생
    ACK 에러 : ACK 슬롯 동안 수신 장치가 0을 보내 주지 않을 때 발생.
  • 수신 장치에서 발생 에러
    CRC 에러 : CRC 가 맞지 않을 때 에러 발생 (crc계산결과와 나머지가 동일하지 않을때)
    STUFF 에러 : 스터핑(stuffing) 규칙이 맞지 않을 때 에러 발생
    FORMAT 에러 : CRC Del, ACK Del, EOF의 영역에 0(dominant) 값이 나타날 때 

** Frame Coding : 동일신호 5개이상 연속시 1개의 stuff Bit 전송

 

<Overload Frame> 
EOF | 6-7bit 오버로드 플래그 | 8bit 오버로드경계
: CAN 제어기가 아직 이전 메시지의 처리를 마치지 못한 경우 다음 메시지의 시작을 지연시키기 위해서 사용
: 오버 로드 프레임은 에러카운터 수에 영향X 

1/20일  ch1 -01~09 (자료형)

배운 내용

이클립스 설치

변수, 자료형을 학습했다.

이전에 공부해본 적이 있어서 어렵지 않은 부분이였지만

자료형 범위는 주의 해야 한다.

정수) byte = 8bit, 범위는 -128 ~ +127

정수) int = 4byte로 32비트 내  –2,147,483,648 ~ 2,147,483,647

long = 8byte으로 숫자 뒤에 L을 써줘야 한다.

실수) float 형: 지수부 8bit/ 기수부 23bit

                    : 숫자 뒤에 F를 써서 double형과 구분해준다.

실수) double형: 지수부 11bit/ 기수부 52bit

자바에서 실수는 기본적으로 dobule형

 

같은 숫자여도 둘이 같지 않다.

문자형 char 

아스키코드 A ~ = 65~  단 음수는 대입 할 수 없다.

char ch = A  /    int(ch) = 65System.out.println(ch1);  // A출력
System.out.println((int)ch1); // 65출력

 

 

설치하고 2일 후에 Version 1.8.0_211 of the JVM is not suitable for this product. version: 17 or greater is required.
에러가 발생!!!!!!
> eclipse.ini 파일에서 -Dosgi.requiredJavaVersion=1.8으로 변경
> javaw.exe의 경로를 찾아서ini파일에
-vm
경로~~~~
를 작성해주면 해결 된다.

.

 

1/22일  ch1 -10~13(연산자)

<constant>

constant (상수) 는 변하지 않는 수로 final 예약어를 사용하여 선언한다.

변수명은 대문자로 짓는것을 권장, 가독성이 좋음, 값 변경시 용이

#format : final 자료형 변수명 = 선언

ex) final int MAX_NUM = 100;

 

<literal>

숫자, 문자, 논리값

정수:int / 실수: double, float

상수풀에 있음 (프로그램이 로드되는 순간 메모리를 할당받음)

 

<형 변환>

동일한 타입끼리만 자료유실 없이 정상적으로 연산이 가능 > 형변환 후 동일 타입으로 변경해야함 (더 큰 범위의 형으로)

ex)

double dNum = 3.14;

int iNum_1 = (int)dNum; // int는 정수 이므로 iNum_1은 3이 됨

System.out.println(iNum_1); //3 출력 =>자료유실

=========

int iNum_2 = 225; 

byte bNum_2 = (byte)iNum_2; // byte 범위는 127까지 이므로 들어갈 수 없음

System.out.println(bNum_2); // 강제 캐스팅시 값이 변경되어 다른 값을 출력

<연산자> 

대입 / 부호 / 산술(사칙) /논리 / 증감 / 관계 / 조건 / 비트 연산자

@ 복합대입(다른연산자와 대입연산자가 함께 쓰임)

ex) num1 = num1 + 2   ==  num1+=2         /      num2 = num2 | num1  ==  num2 |= num1

@ 증감 

ex) i=1; res1 = ++i;  =>  res1=2, i =2  /  j=1; res2 = i++;  =>  res2=1, j =2

증감연산자가 앞에 있으면 먼저 증감시킨 후 대입 / 뒤에 있으면 대입 후 증감시킴

@ 관계 : true or false 리턴

System.out.println( i == res1 ); // true

System.out.println( j == res2 ); // false

@ 조건(삼항연산)

if (조건) { true시 결과 }

else {false시 결과}== 조건문 ? true시 결과 : false시 결과

@비트

~: 비트반전(1의보수) / << ,>> : shift 비트 이동 /  ^ : xor  /  |: or  /  &: and

 

 연산자 우선순위 : 일차식 > 단항> 산술> shift > 관계 > 비트연산 > 논리 > 조건 > 대입 

 

+ Recent posts