Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

rabbit97 님의 블로그

5일 일지 본문

개발 일지

5일 일지

rabbit97 2024. 11. 5. 17:44

주말동안은 알고리즘 시간을 가지고 어제 팀 프로젝트 발제 시작

 

어제는 클라이언트 코드 분석하느라 시간 가는 줄 모르고 작성을 못해 이번 TIL에 기록

이번 게임은 타워디펜스 게임 리마스터!

 

tcp 프로토콜 방식으로 클라이언트와 패킷을 교환하면서 게임이 잘 돌아가게끔 서버를 만드는 것

내가 맡은 역할

 

몬스터 생성 관련과 기지 체력 업데이트 알림

일단 프로토콜 버퍼 파일을 생성하였다

 

게임 패킷은 클라이언트에서 정의된 내용을 담은 패킷 명세서인데 참고용으로 넣어두고 나중에 합칠때 삭제할 예정

 

문제는 여기서 있는데

서버 로직을 작성할때 어떻게 작성을 할까 하는 2가지 선택지가 생겼다

 

게임이 시작할때 게임 세션 안에 몬스터 정보를 담아서 같이 보내주는 방식

 

게임과 별개로 몬스터 세션을 만들어서 게임이 시작할때 같이 보내주는 방식

 

클라이언트 코드를 뜯어보니 생성 로직이 있었고 서버에서 몬스터의 정보를 받는 식으로 되어있었다.

 

어떻게 전달을 할 것인가에 대해 고민이 많은데.....

 

일단 튜터님에게 질문한 결과 게임 세션 안에서 몬스터의 정보를 관리하는게 편하다는 의견 하나

 

팀원들에게도 같은 질문을 했었는데 구조적으로도 게임 세션을 보낼때 같이 보내는게 맞는 것 같다 의견 하나

 

그러면 게임 세션을 보낼때 몬스터의 정보를 보내야하는데

 

또 하나의 고민

 

게임 세션은 게임 클래스를 불러와서 핸들러를 통해 이벤트로 패킷을 파싱하고 보내는데

 

그럼 게임 클래스 안에 몬스터의 정보를 넣어야하는지

 

몬스터 클래스를 따로 만들어야하는지에 대한 고민

 

팀원분들의 회의 덕분에 몬스터 클래스를 만들고 게임 세션안에 담아서 핸들러를 통해 보내자는 의견

 

일단 틀리면 나중에 수정하면 되고 이렇게 진행 할 예정

 

그 외에 필수 구현과는 상관 없는 얘기

 

클라이언트 코드를 뜯어보니

 

몬스터의 아이디는 1 말고는 없었다.

 

몬스터의 아이디가 정의 된 곳을 못찾은건지 직접 생성해야하는건지에 대한 의견

 

===================================================================================

 

베이직 반 수업 내용

 

클래스 선언 중 상속과 합성의 개념

 

인터페이스 관련 내용도 나왔었는데 이건 확실하게 이해하지 못해 검색해서 찾아 볼 예정

 

강의 중간 시간 이슈로 여기까지만 작성

 

나머지는 개인 공부 시간에 작성하기

 

아래는 인터페이스 관련 내용

 

참고 블로그 : https://velog.io/@devgosunman/%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4Interface%EB%9E%80

 

💡 인터페이스(Interface)란?

인터페이스는 `변수`나 `함수`, 그리고 `클래스`가 만족해야하는 최소 규격을 지정할 수 있게 해주는 도구이다. 그래서 `사용자 정의 자료형`으로도 사용할 수 있다.

velog.io

 

 

🌷 문제 상황

  • 타입스크립트 코드를 보다보니 interface란 명령어(?)를 자주보게 되었다.
  • 무언가 클래스와 비슷한 거 같으면서도 뭐가 다른 것인지 애매하여 찾아보게 되었다.

☘️ 인터페이스란?

  • 인터페이스는 변수나 함수, 그리고 클래스가 만족해야하는 최소 규격을 지정할 수 있게 해주는 도구이다.
  • 그래서 사용자 정의 자료형으로도 사용할 수 있다.

🌸 예제 코드

// 인터페이스의 정의
interface Todo {
  id: number;
  content: string;
  completed: boolean;
}

// 변수 todo의 타입으로 Todo 인터페이스를 선언하였다.
let todo: Todo;

// 변수 todo는 Todo 인터페이스를 준수하여야 한다.
todo = { id: 1, content: 'typescript', completed: false };




// 인터페이스의 정의
interface Todo {
  id: number;
  content: string;
  completed: boolean;
}

let todos: Todo[] = [];

// 파라미터 todo의 타입으로 Todo 인터페이스를 선언하였다.
function addTodo(todo: Todo) {
  todos = [...todos, todo];
}

// 파라미터 todo는 Todo 인터페이스를 준수하여야 한다.
const newTodo: Todo = { id: 1, content: 'typescript', completed: false };
addTodo(newTodo);
console.log(todos)
// [ { id: 1, content: 'typescript', completed: false } ]




// 함수 인터페이스의 정의
interface SquareFunc {
  (num: number): number;
}

// 함수 인테페이스를 구현하는 함수는 인터페이스를 준수하여야 한다.
const squareFunc: SquareFunc = function (num: number) {
  return num * num;
}

console.log(squareFunc(10)); // 100




// 인터페이스의 정의
interface ITodo {
  id: number;
  content: string;
  completed: boolean;
}

// Todo 클래스는 ITodo 인터페이스를 구현하여야 한다.
class Todo implements ITodo {
  constructor (
    public id: number,
    public content: string,
    public completed: boolean
  ) { }
}

const todo = new Todo(1, 'Typescript', false);

console.log(todo);




// 인터페이스의 정의
interface IPerson {
  name: string;
  sayHello(): void;
}

/*
인터페이스를 구현하는 클래스는 인터페이스에서 정의한 프로퍼티와 추상 메소드를 반드시 구현하여야 한다.
*/
class Person implements IPerson {
  // 인터페이스에서 정의한 프로퍼티의 구현
  constructor(public name: string) {}

  // 인터페이스에서 정의한 추상 메소드의 구현
  sayHello() {
    console.log(`Hello ${this.name}`);
  }
}

function greeter(person: IPerson): void {
  person.sayHello();
}

const me = new Person('Lee');
greeter(me); // Hello Lee




interface IDuck { // 1
  quack(): void;
}

class MallardDuck implements IDuck { // 3
  quack() {
    console.log('Quack!');
  }
}

class RedheadDuck { // 4
  quack() {
    console.log('q~uack!');
  }
}

function makeNoise(duck: IDuck): void { // 2
  duck.quack();
}

makeNoise(new MallardDuck()); // Quack!
makeNoise(new RedheadDuck()); // q~uack! // 5




interface IPerson {
  name: string;
}

function sayHello(person: IPerson): void {
  console.log(`Hello ${person.name}`);
}

const me = { name: 'Lee', age: 18 };
sayHello(me); // Hello Lee





function sayHello(person) {
  console.log("Hello " + person.name);
}
var me = { name: 'Lee', age: 18 };
sayHello(me); // Hello Lee




interface UserInfo {
  username: string;
  password: string;
  age?    : number;
  address?: string;
}

const userInfo: UserInfo = {
  username: 'ungmo2@gmail.com',
  password: '123456'
}

console.log(userInfo);





interface Person {
  name: string;
  age?: number;
}

interface Student extends Person {
  grade: number;
}

const student: Student =  {
  name: 'Lee',
  age: 20,
  grade: 3
}





interface Person {
  name: string;
  age?: number;
}

interface Developer {
  skills: string[];
}

interface WebDeveloper extends Person, Developer {}

const webDeveloper: WebDeveloper =  {
  name: 'Lee',
  age: 20,
  skills: ['HTML', 'CSS', 'JavaScript']
}





class Person {
  constructor(public name: string, public age: number) {}
}

interface Developer extends Person {
  skills: string[];
}

const developer: Developer =  {
  name: 'Lee',
  age: 20,
  skills: ['HTML', 'CSS', 'JavaScript']
}

'개발 일지' 카테고리의 다른 글

8일 일지  (0) 2024.11.08
6일 일지  (2) 2024.11.06
1일 일지  (0) 2024.11.01
31일 일지  (0) 2024.10.31
30일 일지  (0) 2024.10.30