본문 바로가기

java7

추상적으로 프로그래밍 하세요. 철수와 영희가 컴퓨터를 조립하는 코드를 작성했습니다. ​ 철수 컴퓨터 = CPU + RAM + SDD + VGA ​ 영희 데스크탑 = 인텔 i9 10900k + 삼성 DDR4 8GB PC4-21300 * 2 + 삼성 860EVO-250G + 지포스 RTX3090 ​ 누가 더 코드를 잘 짰나요? 철수는 대충대충 코딩한거 같은데 영희는 정말 심혈을 다해서 작성한거 같아요! 그러니 영희의 코드가 더 좋을까요? ​ 데스크탑은 컴퓨터입니다. 인텔 i9 10900k는 CPU이고요. 삼성 DDR4 8GB PC4-21300은 RAM입니다. 즉, 철수의 코드에 영희의 코드를 대입해도 아무런 문제가 생기지 않습니다. ​ 반면 반대는 어떤가요? 컴퓨터는 데스크탑일까요? CPU는 인텔 i9 10900k라고 할 수 있나요? ​.. 2020. 11. 11.
static 사용에 주의하세요. Java와 C#에서 static 키워드를 사용하면 변수나 메소드가 프로그램 실행 시 바로 메모리에 올라갑니다. 객체를 생성하지 않아도 말이죠. 그렇기에 무분별한 static 남발은 비효율적인 메모리 구조를 낳게 됩니다. ​ 그런데 이보다 더 무서운 사실이 있습니다. static 변수는 하나만 생성됩니다. 그렇기에 이 변수를 수정하게 되면 모든 곳에 반영됩니다. eat() 함수가 static String food = 'pork'를 사용한다고 생각해봅시다. 잘 사용하고 있는데 다른 개발자가 실수로 혹은 악의적으로 food = 'stone'이라고 수정한다면? 아마 프로그램은 각종 오류를 뿜게 될 것입니다. ​ 그렇기에 static 변수를 사용할 시에는 final이나 const 등을 사용하여 값이 변하지 않게 .. 2020. 11. 10.
public보다는 private을 사용합시다. Java나 C#에서 class, field, method 등에 접근 제한자를 사용할 수 있습니다. 이 때 습관적으로 public을 사용하는 분들이 있는데요. 이는 매우 위험한 행동이므로 고칩시다! ​ public의 의미는 '누구나 어디서든' 사용할 수 있다는 뜻입니다. 즉, 만든 사람은 여러분이지만 사용하는 사람은 여러명일 수 있기에 함부로 코드를 수정할 수 없습니다. 여러분이 10을 반환하는 함수를 public으로 작성하여 10이 필요한 다른 개발자가 이 함수를 사용한다고 가정합시다. 여러분이 이 함수를 만든 이유는 같은 class에서 이 값을 이용하여 20을 만들기 위해서였죠. 그런데 필요한 값이 30으로 변경되어 10을 반환하는 함수도 15를 반환하게 만들게 되면 어떻게 될까요? 이 함수를 가져다 .. 2020. 11. 10.
Java(자바)의 Interface(인터페이스)를 쉽게 이해해보자!(1) 어렸을 때 그 어렵다는 C를 겉핥기 한 경험이 있어서인지 자바를 처음 접했을 때 너무 재밌고 또 술술 이해됐습니다. 그렇게 진도를 훅훅 빼다가 만난 암초가 바로 자바의 인터페이스!... 처음 읽었을 땐 이 놈을 도대체 어따 쓰는 지 이해가 되지 않았고, 두 번 읽었을 땐 다형성 뭐시기 하는 거 같은 느낌이 왔고, 그 이후로 아마 열 번 이상은 공부하고 나서야 비로소 이해했습니다. 혹 저처럼 자바의 인터페이스에서 헤메고 계시다면 잘 찾아오셨습니다! 그럼 한 번 인터페이스라는 놈을 함께 분석해볼까요? 1. 인터페이스는 약속이다! 네! 인터페이스는 단순한 약속이라고 이해하시면 됩니다. 개발자와 컴파일러, 개발자와 개발자 사이의 약속인거죠. 위의 코드를 함께 볼까요? Flyable 인터페이스는 말 그대로 '날 .. 2020. 8. 26.
3. 상속 객체들을 이용해서 즐겁게 프로그램을 만들어 보자. 프로그램 A : 주인과 걷고 있는 푸들 객체 프로그램 B : 주인과 걷고 있는 요크셔 테리어 객체 프로그램 C : 주인과 걷고 있는 불독 객체 ....... 자 이렇게 모든 강아지 종에 대한 프로그램을 만드려고 마음을 먹었는데, 언제 끝낼 수 있는 지 가늠도 안된다. 그러던 와중에 다음과 같은 아이디어가 떠오른다면? 프로그램 X : 주인과 걷고 있는 '강아지' 객체 프로그램 단 한개로 해결되었다! 푸들도 강아지, 요크셔 테리어도 강아지, 불독도 강아지니 전혀 문제가 없지 않은가? 이게 상속의 슈퍼파워다. 1. 푸들, 요크셔 테리어, 불독을 묶을 수 있는 개념인 강아지 class를 먼저 만들고(귀, 꼬리, 신장, 운다, 꼬리 흔든다, 잔다, 달린다) 2. .. 2019. 12. 15.
2. 클래스(Class)와 객체 자바는 객체들을 이용하여 프로그래밍 한다. 그럼 객체를 어떻게 만드나? 바로 클래스를 이용하여 만든다. 클래스는 붕어빵틀이라고 생각하면 된다. 하나의 붕어빵틀(클래스)로 무수히 많은 붕어빵을(객체) 만들 수 있다. 푸들 클래스를 이용한다면 푸들1, 푸들2, 푸들3 객체를 만들 수 있다. 자 그런데 재밌는 것은, 자바안에서는 붕어빵틀이 각기 다른 스펙의 붕어빵을 만들어 낼 수 있다. 푸들1은 신장이 1M, 푸들2는 1.2M, 푸들3는 1.3M가 될 수도 있는 것이다. 클래스는 상태와 동작으로 구성된다. 푸들 클래스를 예로 들면, 신장, 털 색깔, 눈 크기 -> 상태 짖기, 꼬리 흔들기, 눈 깜빡거리기 -> 동작 클래스(푸들틀)를 정교하게 설계할수록, 정교한 객체(푸들)를 만들 수 있다. 2019. 12. 13.